作者:TI FAE – Johnson Chen
在開發(fā)程序的時候,我們經(jīng)常會希望某些全局變量在被使用時已經(jīng)有想要的初始值,我們通常會用下面兩種方法來實現(xiàn)變量的初始值賦值,
方法一:定義帶初始值的全局變量
例如:int temp1 = 0x00;
方法二:定義不帶初始值的全局變量
例如:int temp1;
在main()函數(shù)初始化時給變量寫初值
例如: temp1= 0x00;
但如果很多的變量比如一個RAM section都要賦同一個初值,使用上面提到的兩個方法就會比較繁瑣。本文介紹方法可以快速實現(xiàn)這個功能。
此方法有以下幾個特點:
不影響這個連續(xù)的RAM區(qū)間里的部分變量需要通過前面提到的方法一重新賦初值。
可以避免有時因為編程者的初心大意忘記給某些變量賦值而導(dǎo)致程序運(yùn)行異常。
解決很多不了解C2000匯編指令用戶實現(xiàn)此功能的困擾。
首先我們要了解C2000上電時的流程,下圖為C2000 上電時從RAM或者FLASH 引導(dǎo)的流程圖。
對于C2000 芯片來說程序的執(zhí)行入口是在CMD 文件里面“codestart”這個段定義的,而在”XXXXXX_CodeStartBranch.asm”里面通過“.sect "codestart" ”語句將相應(yīng)的跳轉(zhuǎn)指令分配到了這個段。
通常“XXXXXX_CodeStartBranch.asm”文件內(nèi)容如下:
其中_c_int00 這個函數(shù)本體是在C2000編譯器的RTS library里面,這個函數(shù)實現(xiàn)的功能是把用戶定義的帶初始值的全局變量的初始值的從FLASH搬運(yùn)到RAM里面,從而實現(xiàn)初始值的傳遞,之后PC就會跳轉(zhuǎn)到用戶的main()入口。
因此我們需要在“LB_c_int00” 語句之前實現(xiàn)RAM section值的初始化。
假設(shè)我們需要對0x00000400為起始地址長度為0x200的RAM 區(qū)間進(jìn)行初始化,初始值為0x00。
下面為具體實現(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)色部分位置即可。
注意事項:
1.本方法適用于所有C2000產(chǎn)品,不同芯片“XXXXXX_CodeStartBranch.asm”文件名不同,XXXXXX為芯片系列名。
2.因為C2000的看門狗上電時是默認(rèn)開啟的, 且溢出后會產(chǎn)生復(fù)位。為了確保在初始化RAM時不會產(chǎn)生看門狗復(fù)位,我們首先要先禁止看門狗,請確保“ WD_DISABLE.set 1 ”。
審核編輯:金巧
-
嵌入式處理
+關(guān)注
關(guān)注
0文章
341瀏覽量
10042 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4344瀏覽量
62864 -
編譯器
+關(guān)注
關(guān)注
1文章
1642瀏覽量
49229
發(fā)布評論請先 登錄
相關(guān)推薦
評論