在開(kāi)發(fā)程序的時(shí)候,我們經(jīng)常會(huì)希望某些全局變量在被使用時(shí)已經(jīng)有想要的初始值,我們通常會(huì)用下面兩種方法來(lái)實(shí)現(xiàn)變量的初始值賦值,
方法一:定義帶初始值的全局變量
例如:int temp1 = 0x00;
方法二:定義不帶初始值的全局變量
例如:int temp1;
在main()函數(shù)初始化時(shí)給變量寫(xiě)初值
例如: temp1= 0x00;
但如果很多的變量比如一個(gè)RAM section都要賦同一個(gè)初值,使用上面提到的兩個(gè)方法就會(huì)比較繁瑣。本文介紹方法可以快速實(shí)現(xiàn)這個(gè)功能。
此方法有以下幾個(gè)特點(diǎn):
不影響這個(gè)連續(xù)的RAM區(qū)間里的部分變量需要通過(guò)前面提到的方法一重新賦初值。
可以避免有時(shí)因?yàn)?a href="http://www.xsypw.cn/v/tag/1315/" target="_blank">編程者的初心大意忘記給某些變量賦值而導(dǎo)致程序運(yùn)行異常。
解決很多不了解C2000匯編指令用戶實(shí)現(xiàn)此功能的困擾。
首先我們要了解C2000上電時(shí)的流程,下圖為C2000 上電時(shí)從RAM或者FLASH 引導(dǎo)的流程圖。
對(duì)于C2000 芯片來(lái)說(shuō)程序的執(zhí)行入口是在CMD 文件里面“codestart”這個(gè)段定義的,而在”XXXXXX_CodeStartBranch.asm”里面通過(guò)“.sect "codestart" ”語(yǔ)句將相應(yīng)的跳轉(zhuǎn)指令分配到了這個(gè)段。
通常“XXXXXX_CodeStartBranch.asm”文件內(nèi)容如下:
其中_c_int00 這個(gè)函數(shù)本體是在C2000編譯器的RTS library里面,這個(gè)函數(shù)實(shí)現(xiàn)的功能是把用戶定義的帶初始值的全局變量的初始值的從FLASH搬運(yùn)到RAM里面,從而實(shí)現(xiàn)初始值的傳遞,之后PC就會(huì)跳轉(zhuǎn)到用戶的main()入口。
因此我們需要在“LB _c_int00” 語(yǔ)句之前實(shí)現(xiàn)RAM section值的初始化。
假設(shè)我們需要對(duì)0x00000400為起始地址長(zhǎng)度為0x200的RAM 區(qū)間進(jìn)行初始化,初始值為0x00。
下面為具體實(shí)現(xiàn)代碼:
MOV ACC, #00H ; initialed value
MOVL XAR5, #400H ;Dest address
MOVL XAR4, #(200H-1) ;length
RPT @AR4 || MOV *XAR5++, ACC
如果需初始化成其它值,將第一行 “#00H”更改為其它的值即可。
將代碼放入“ XXXXXX_CodeStartBranch.asm ”下面藍(lán)色部分位置即可。
注意事項(xiàng):
1.本方法適用于所有C2000產(chǎn)品,不同芯片“ XXXXXX_CodeStartBranch.asm ”文件名不同,XXXXXX為芯片系列名。
2.因?yàn)镃2000的看門狗上電時(shí)是默認(rèn)開(kāi)啟的, 且溢出后會(huì)產(chǎn)生復(fù)位。為了確保在初始化RAM時(shí)不會(huì)產(chǎn)生看門狗復(fù)位,我們首先要先禁止看門狗,請(qǐng)確保“ WD_DISABLE .set 1 ”。
審核編輯:郭婷
-
芯片
+關(guān)注
關(guān)注
456文章
50889瀏覽量
424238 -
看門狗
+關(guān)注
關(guān)注
10文章
565瀏覽量
70838 -
編譯器
+關(guān)注
關(guān)注
1文章
1634瀏覽量
49157
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論