6410之寫跳轉到c函式中執行

2021-06-17 17:00:07 字數 1356 閱讀 7533

匯程式設計序:

#define config_periport_base 0x70000000

#define config_periport_size 0x13

#define wtcon 0x7e004000

.global _start

_start:

/*告訴cpu 外設的位址*/

ldr r0, =config_periport_base

orr r0, r0, #config_periport_size

mcr p15,0,r0,c15,c2,4

/*關閉看門狗*/

ldr r0, =wtcon

mov r1, #1

str r1,[r0]

mov sp,#(1024*8)   //設定棧,用來儲存c函式的返回位址等等資訊

bl ***x             //跳轉到c函式中執行

halt:

b halt

c程式:

#define gpmdat (volatile unsigned long *)0x7f008824

#define gpmcon (volatile unsigned long *)0x7f008820

void delay()

}int ***x()

return 0;

}

在編譯的時候會出現下面的錯誤:

arm-linux-gcc  -c -o start.o start.s

arm-linux-gcc  -c -o led.o led.c

arm-linux-ld -ttext 0 -o led.elf  start.o led.o

led.o:(.arm.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr0'

led.o:(.arm.exidx+0x8): undefined reference to `__aeabi_unwind_cpp_pr1'

make: *** [led.bin] error 1

解決方法如下:

led.o:led.c

arm-linux-gcc-nostdlib -c -o led.o led.c

start.o:start.s

arm-linux-gcc-nostdlib -c -o start.o start.s

在編譯的選項中加入nostdlib 選項,不連線系統標準啟動檔案和標準庫檔案,只把指定的檔案傳遞給聯結器。這個選項常用於編譯核心、bootloader等程式,它們不需要啟動檔案、標準庫檔案。

6410之寫跳轉到c函式中執行

匯程式設計序 define config periport base 0x70000000 define config periport size 0x13 define wtcon 0x7e004000 global start start 告訴cpu 外設的位址 ldr r0,config pe...

關於keil中無法跳轉到函式 變數定義處的問題

keil中無法跳轉到定義的情況有多種情況 1 工程編譯不成功,這種情況肯定跳轉不到定義的,這時只能根據編譯提示資訊檢查程式直到程式正常通過編譯吧。2 工程未編譯或工程清空編譯資訊後未再進行編譯,肯定會跳轉不到定義處,這時一般再編譯一次工程就可以了。3 某些暫存器變數,列舉型別或結構體變數。4 定義的...

32k通過位址跳轉到函式 C語言結構化程式設計之函式

可重用性是一種編寫 並多次使用它的方法。使用結構化程式設計技術,我們編寫一次 並多次使用它。結構化程式設計還使程式易於理解,提高程式質量,易於實現並減少時間。在c語言中,可以使用函式概念來設計結構化程式設計。使用函式概念,我們可以將較大的程式劃分為較小的子程式,並且這些子程式是單獨實現的。c語言中的...