作者:TI FAE – Johnson Chen
在開發程序的時候,我們經常會希望某些全局變量在被使用時已經有想要的初始值,我們通常會用下面兩種方法來實現變量的初始值賦值,
方法一:定義帶初始值的全局變量
例如:int temp1 = 0x00;
方法二:定義不帶初始值的全局變量
例如:int temp1;
在main()函數初始化時給變量寫初值
例如: temp1= 0x00;
但如果很多的變量比如一個RAM section都要賦同一個初值,使用上面提到的兩個方法就會比較繁瑣。本文介紹方法可以快速實現這個功能。
此方法有以下幾個特點:
不影響這個連續的RAM區間里的部分變量需要通過前面提到的方法一重新賦初值。
可以避免有時因為編程者的初心大意忘記給某些變量賦值而導致程序運行異常。
解決很多不了解C2000匯編指令用戶實現此功能的困擾。
首先我們要了解C2000上電時的流程,下圖為C2000 上電時從RAM或者FLASH 引導的流程圖。
對于C2000 芯片來說程序的執行入口是在CMD 文件里面“codestart”這個段定義的,而在”XXXXXX_CodeStartBranch.asm”里面通過“.sect "codestart" ”語句將相應的跳轉指令分配到了這個段。
通常“XXXXXX_CodeStartBranch.asm”文件內容如下:

其中_c_int00 這個函數本體是在C2000編譯器的RTS library里面,這個函數實現的功能是把用戶定義的帶初始值的全局變量的初始值的從FLASH搬運到RAM里面,從而實現初始值的傳遞,之后PC就會跳轉到用戶的main()入口。
因此我們需要在“LB_c_int00” 語句之前實現RAM section值的初始化。
假設我們需要對0x00000400為起始地址長度為0x200的RAM 區間進行初始化,初始值為0x00。
下面為具體實現代碼:
MOV ACC, #00H ; initialed value
MOVL XAR5, #400H ;Dest address
MOVL XAR4, #(200H-1) ;length
RPT @AR4 || MOV *XAR5++, ACC
如果需初始化成其它值,將第一行 “#00H”更改為其它的值即可。
將代碼放入“XXXXXX_CodeStartBranch.asm ”下面藍色部分位置即可。

注意事項:
1.本方法適用于所有C2000產品,不同芯片“XXXXXX_CodeStartBranch.asm”文件名不同,XXXXXX為芯片系列名。
2.因為C2000的看門狗上電時是默認開啟的, 且溢出后會產生復位。為了確保在初始化RAM時不會產生看門狗復位,我們首先要先禁止看門狗,請確保“ WD_DISABLE.set 1 ”。
審核編輯:金巧
-
嵌入式處理
+關注
關注
0文章
341瀏覽量
10516 -
函數
+關注
關注
3文章
4417瀏覽量
67521 -
編譯器
+關注
關注
1文章
1672瀏覽量
51622
發布評論請先 登錄
高性能I2C接口F-RAM芯片:FM24V10深度解析
Texas Instruments HSEC180ADAPEVM SOM適配器板數據手冊
Texas Instruments XDS110ISO-EVM隔離式插件板數據手冊
谷東智能C2000 AR智能眼鏡推動航空航天行業數字化轉型
16 位 ADC 的 汽車類與非汽車類C2000? 32 位 MCU(TMS320F28377DPTPS TMS320F28377SPTPQ)微控制器
TMS320F2800155 C2000? 32 位 MCU 120MHz 128KB 閃存數據手冊
TMS320F280034-Q1 汽車級 C2000? 32 位 MCU 120MHz 128KB 閃存數據手冊
TMS320F2800133 C2000? 32 位 MCU,具有 120 MHz、64 KB 閃存、FPU 和 TMU數據手冊
TMS320F2800152-Q1 具有 CAN-FD、鎖步 ASIL B 的汽車級 C2000? 32 位 MCU 100MHz 64KB 閃存數據手冊
TMS320F2800153-Q1 具有 HRPWM、CAN-FD、鎖步 ASIL B 的汽車類 C2000? 32位MCU 120MHz 64KB 閃存數據手冊
TMS320F28P659DH-Q1 汽車級 C2000 32 位 MCU,600MIPS,2xC28x + 1xCLA + 鎖步技術手冊
F29H850TU C2000? 64 位 MCU,帶 C29x 200MHz 三核技術手冊
TMS320F28P550SG C2000? 32 位 MCU技術手冊
F29H859TU-Q1 汽車級 C2000? 64 位 MCU數據手冊
C2000芯片怎么給一個連續的RAM區間賦初值
評論