日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

S5PV210开发板用汇编设置栈和调用C语言

發(fā)布時間:2023/12/20 编程问答 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 S5PV210开发板用汇编设置栈和调用C语言 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

使用C語言前為什么要先用匯編設(shè)置棧?
C語言程序運行時需要棧,因為C語言中的局部變量都是用棧來實現(xiàn)的,如果沒有設(shè)置棧就使用C語言,局部變量就會落空,程序就會死掉,所以在使用C語言前,我們需要先在匯編編寫的啟動代碼中設(shè)置棧。

為什么使用51單片機和Ubuntu編寫應用程序時我們沒有設(shè)置棧依然能使用C語言?
原因是在單片機中已經(jīng)由硬件設(shè)置提供了一個默認可用的棧,而在應用程序中我們編寫的C程序其實并不是全部,編譯器(gcc)在鏈接時會幫我們自動添加一個頭,這個頭就是一段引導C程序能夠執(zhí)行的匯編代碼,在這個代碼中就幫我們的C程序設(shè)置了棧及其他的運行時需要。

為什么不同CPU模式下都有各自獨立的sp寄存器?
如果各個模式都使用同一個sp,意味著整個程序(操作系統(tǒng)內(nèi)核程序,用戶應用程序)都使用同一個棧,這樣做,一旦用戶程序編寫出錯(棧溢出),將會影響操作系統(tǒng)的正常運行,操作系統(tǒng)會崩潰,同時運行在操作系統(tǒng)上的其他應用程序也會崩潰。所以各個模式下要使用不同的sp,使用不同的棧,操作系統(tǒng)有自己的棧,每個應用程序也有自己的棧,互不干擾。

怎么設(shè)置棧?
我們要設(shè)置棧,并不是設(shè)置所有CPU模式下的棧,而是設(shè)置當前CPU模式下的棧,因為這個程序可能只用到一種CPU模式。S5PV210復位后默認是進入SVN模式下的,我們設(shè)置當前模式下的棧,只需直接操作sp即可。
需要注意的是,棧必須是當前一段可用的內(nèi)存(可用的意思是這個地方是有被初始化過的可以訪問的內(nèi)存,而且這個內(nèi)存只會被我們用作棧,不會被其他程序征用)
當前CPU剛復位(剛啟動),外部的DDR尚未初始化,需要我們后續(xù)對其初始化,所以目前可用的內(nèi)存只有內(nèi)部的SRAM(因為它不需初始化即可使用)。因此我們只能在SRAM中找一段內(nèi)存來作為SVC的棧。

在ARM中,ATPCS(ARM關(guān)于程序應該怎么實現(xiàn)的一個規(guī)范)要求使用滿減棧,結(jié)合iROM_application_note中的memory map,可知SVC棧應該設(shè)置為0xD0037D80。
示例代碼:
start.S

#define WTCON 0xE2700000#define SVN_STACK 0xD0037D80 .global _start _start:/*關(guān)看門狗*/ldr r0, =0ldr r1, =WTCONstr r0, [r1]/*設(shè)置SVN棧*/ldr sp, =SVN_STACK/*開/關(guān)icache*/mrc p15,0,r0,c1,c0,0; // 讀出cp15的c1到r0中//bic r0, r0, #(1<<12) // bit12 置0 關(guān)icacheorr r0, r0, #(1<<12) // bit12 置1 開icachemcr p15,0,r0,c1,c0,0; // 把r0寫到cp15的c1中/*流水燈*/bl led_blinkb .

led.c

#define GPJ0CON 0xE0200240 #define GPJ0DAT 0xE0200244 #define rGPJ0CON *((volatile unsigned int*)GPJ0CON) #define rGPJ0DAT *((volatile unsigned int*)GPJ0DAT) void delay(void); void led_blink(void) {rGPJ0CON = 0x11111111; while(1){rGPJ0DAT = ~(1<<3);delay();rGPJ0DAT = ~(1<<4);delay();rGPJ0DAT = ~(1<<5);delay();} }void delay(void) {volatile unsigned int i = 3000000;while(i--); } /* volatile的作用是防止編譯器優(yōu)化我們的變量,有時候編譯器會認為我們對這個變量的操作是無意義的,例如對一個數(shù)+1然后-1,有些編譯器會直接保持原值不變 ,這樣做的結(jié)果可能導致我們的程序不對,所以為了不受編譯器的這個影響,加上 volatile會使程序更加穩(wěn)定,一般對易變的變量都加上volatile,至于加不加volatile結(jié)果會不會有什么不同,取決于編譯器,一些編譯器不會對此優(yōu)化,一些則會。 */

Makefile

led.bin: start.o led.oarm-linux-ld -Ttext 0x0 -o led.elf $^arm-linux-objcopy -O binary led.elf led.binarm-linux-objdump -D led.elf > led_elf.disgcc mkv210_image.c -o mkx210./mkx210 led.bin 210.bin%.o : %.Sarm-linux-gcc -o $@ $< -c -nostdlib%.o : %.carm-linux-gcc -o $@ $< -c -nostdlib#這里要加-nostdlib,作用是不使用編譯器自帶的標準函數(shù)庫文件#因為led.c文件中的delay函數(shù)與編譯器自帶的標準函數(shù)庫中的delay重名#默認會去使用編譯器自帶的,我們要使用自己定義的話就會報錯#相當于你一個C程序定義了兩個同名函數(shù) clean:rm *.o *.elf *.bin *.dis mkx210 -f

總結(jié)

以上是生活随笔為你收集整理的S5PV210开发板用汇编设置栈和调用C语言的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 夜夜操狠狠干 | 欧美黄色激情视频 | 色涩综合 | 久久久国产精品免费 | 久在线播放 | 免费美女视频网站 | 北条麻妃一区二区三区在线观看 | 99re热这里只有精品视频 | 欧美日本精品 | 成人区人妻精品一区二区不卡视频 | 亚洲一区二区三区色 | 日韩黄片一区二区三区 | 亚洲精选国产 | 亚洲一区h | 日韩性av| 熟妇人妻无乱码中文字幕真矢织江 | 成人公开免费视频 | 三级影片在线免费观看 | 冲田杏梨在线 | 国产精品第9页 | 亚洲黄a| 成人av手机在线观看 | 久久经典| 黄色在线观看免费视频 | 手机看黄色 | 亚洲国产精品欧美久久 | 欧美性视频播放 | 日本αv| 污视频网站在线播放 | 亚洲熟女少妇一区二区 | 一级精品视频 | 九九精品影院 | av手机免费观看 | 九色在线观看视频 | 一区二区自拍 | 午夜性刺激免费视频 | 亚洲综合婷婷久久 | 国产精品ⅴa有声小说 | 视频免费1区二区三区 | 精品久操| 男人的天堂av女优 | 黄页视频在线观看 | 漂亮人妻被中出中文字幕 | a天堂av| 国产视频在线观看一区 | 熊出没之冬日乐翻天免费高清观看 | 男女无套免费视频网站动漫 | 欧美黄色精品 | 黄色a免费 | 精品无码成人久久久久久免费 | 国产情侣第一页 | 亚洲爱情岛论坛永久 | 欧美丰满熟妇bbbbbb百度 | 国产日韩精品在线 | 久久久新| 九色91 | 5566在线| 日韩大片在线免费观看 | 亚洲一二三四在线观看 | 国产第一色 | 国产精品久久久久久久久免费桃花 | 清纯粉嫩极品夜夜嗨av | 欧美色图自拍 | 亚洲一二三四在线观看 | 森泽佳奈中文字幕 | 五月天婷婷综合网 | 真性中出 | 欧美日韩精品久久 | 九九九免费 | 夜夜嗨视频 | 精品成人一区二区三区久久精品 | 91中文字幕在线视频 | 日本两性视频 | 成人免费一区 | 邻居少妇张开腿让我爽了在线观看 | 五月天狠狠干 | 欧美久操 | 色呦呦视频在线观看 | 精品国产乱码久久久久久郑州公司 | 多毛的亚洲人毛茸茸 | 天天做天天摸天天爽天天爱 | 99re在线精品 | 在线观看欧美国产 | 精品中文在线 | 在线观看日韩欧美 | 亚洲男人天堂2022 | 96在线观看 | 2021天天干 | 日本视频精品 | 欧美精品videos极品 | 国产精品秘入口18禁麻豆免会员 | 91视频xxx| 免费一区| 波多野结衣激情视频 | 国产性猛交普通话对白 | 国产精品一级二级三级 | 在线观看91视频 | 久草美女 | 少妇又色又紧又大爽又刺激 |