作者f751202 (hi~)
看板ASM
標題[問題] 陣列宣告問題
時間Tue Jul 9 11:10:48 2013
小弟我用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就足夠?
因為我還是蠻怕他編譯後用到我目前還沒用到的位置
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.22.80.157
1F:推 ruemann:你會當掉應該是其他原因,跟_at_和初始值都沒關係 07/09 12:27
2F:→ ruemann:你宣告了16個BYTE的陣列,它就會留16BYTE空間給你 07/09 12:29
3F:推 WolfLord:我比較好奇為什麼要用 _at_ 07/09 16:33
4F:→ f751202:因為我是看書的 不知道有什麼區別呢XD? 07/09 17:54
5F:推 WolfLord:_at_ 是直接指定記憶體,如果沒有特別需求這樣通常會撞爛 07/09 20:53
6F:→ WolfLord:Stack,而不一定要指定數值,直接宣告來用編譯器自然會安 07/09 20:54
7F:→ WolfLord:排安全可用的記憶體給你用了。 07/09 20:54
8F:→ WolfLord:重點不是先給數值,而是你用了 _at_ 07/09 20:55
9F:推 ksmrt0123:宣告0x39就會從0x39開始配起. 不過使用 _at_ 最好也要 07/10 01:05
10F:→ ksmrt0123:同時宣告記憶體類型, 如 char data a[16] _at_ 0x39; 07/10 01:06
11F:→ ksmrt0123:至於程式問題比較可能是如1F所說是其他原因 07/10 01:08
12F:→ f751202:之前沒給值之前 程式跑到某一段會重開 給了就好了 07/10 09:50
13F:→ f751202:後來把值 那段刪掉 又可以了 目前也還在找問題中 07/10 09:50
14F:→ f751202:不知道什麼情況 MCU會強迫重新執行呢? 07/10 09:52