[問題] 陣列宣告問題

作者: f751202 (hi~)   2013-07-09 11:10:48
小弟我用KEIL C 宣告陣列
char a[16] _at_ 0x39;
後面在空16個位置給他 程式寫到後面會發現
他自動編譯出來的陣列位置好像會亂跳 然後我只要重複利用到 程式就會當掉
後來改成
char a[16] _at_ 0x39;
char a[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
先給他數值 程式就不會錯亂
我想問的是如何宣告陣列的每個位置? 還是一個0x39就足夠?
因為我還是蠻怕他編譯後用到我目前還沒用到的位置
作者: ruemann (路人甲)   2013-07-09 12:27:00
你會當掉應該是其他原因,跟_at_和初始值都沒關係你宣告了16個BYTE的陣列,它就會留16BYTE空間給你
作者: WolfLord (呆呆小狼￾ ￾ N￾ ￾ )   2013-07-09 16:33:00
我比較好奇為什麼要用 _at_
作者: f751202 (hi~)   2013-07-09 17:54:00
因為我是看書的 不知道有什麼區別呢XD?
作者: WolfLord (呆呆小狼￾ ￾ N￾ ￾ )   2013-07-09 20:53:00
_at_ 是直接指定記憶體,如果沒有特別需求這樣通常會撞爛Stack,而不一定要指定數值,直接宣告來用編譯器自然會安排安全可用的記憶體給你用了。重點不是先給數值,而是你用了 _at_
作者: ksmrt0123 (ksmrt)   2013-07-10 01:05:00
宣告0x39就會從0x39開始配起. 不過使用 _at_ 最好也要同時宣告記憶體類型, 如 char data a[16] _at_ 0x39;至於程式問題比較可能是如1F所說是其他原因
作者: f751202 (hi~)   2013-07-10 09:50:00
之前沒給值之前 程式跑到某一段會重開 給了就好了後來把值 那段刪掉 又可以了 目前也還在找問題中不知道什麼情況 MCU會強迫重新執行呢?

Links booklink

Contact Us: admin [ a t ] ucptt.com