Hi All
環境:cc2650, Zigbee, OTA
編譯器:IAR7.6
用途:用來判斷電池是否被拔掉(no hw pin)
添加code:main.c
__no_init uint8_t keep_pam;
但執行到的watchdog reset後似乎會清掉ram中需keep住的參數,
請問有辦法在watchdog reset情況下不清掉noinit的參數嗎??
Viki Shi:
复位不初始化即可,参考下面两个链接:
blog.csdn.net/…/79520095
blog.csdn.net/…/52610506
Kuo Austin:
回复 Viki Shi:
Hi Viki
謝謝您的回覆
但這似乎不是IAR,我在IAR中找不到類似的設定
Viki Shi:
IAR中定义__no_init也可以实现复位不初始化,__no_init 是一个SEGMENT,给LINKER用的,定义到不初始化的块中
Kuo Austin:
回复 Viki Shi:
謝謝您的回覆 ,
但如內文所述,我定義了__no_init uint8_t keep_pam;
但經過watchdog reset後參數無法keep住,
因此懷疑是否什麼地方沒設定,__no_init才無法動作?還是watchdog reset有function清掉了ram參數?
gaoyang9992006:
回复 Kuo Austin:
单片机本身不会清除RAM中的数据。
但C编译器在初始化程序中有执行清除RAM的指令,要通过特殊方法关闭。
Viki Shi:
回复 Kuo Austin:
还要在keep_pam后面加上@ram内的某个固定地址值
Kuo Austin:
回复 Viki Shi:
Hi Viki
測試noinit參數值仍然會被清掉欸,以下定義有錯誤嗎??
IAR 7.60.1
我定義如下:
<myapp.c>
__no_init uint8 ClearCount @(0x20004200)
ram addr是參考.map裡RAM_BASE_ADDR – RAM_END的中間值
Kuo Austin:
回复 Viki Shi:
Hi Viki
google到可從.icf file判斷ram addr,目前用try and error方式找到0x20002000可用,
0x20000000,0x20001000都會是其它值,請問要如何找可用的起始值??