看板 ASM 關於我們 聯絡資訊
小弟我用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
ruemann:你會當掉應該是其他原因,跟_at_和初始值都沒關係 07/09 12:27
ruemann:你宣告了16個BYTE的陣列,它就會留16BYTE空間給你 07/09 12:29
WolfLord:我比較好奇為什麼要用 _at_ 07/09 16:33
f751202:因為我是看書的 不知道有什麼區別呢XD? 07/09 17:54
WolfLord:_at_ 是直接指定記憶體,如果沒有特別需求這樣通常會撞爛 07/09 20:53
WolfLord:Stack,而不一定要指定數值,直接宣告來用編譯器自然會安 07/09 20:54
WolfLord:排安全可用的記憶體給你用了。 07/09 20:54
WolfLord:重點不是先給數值,而是你用了 _at_ 07/09 20:55
ksmrt0123:宣告0x39就會從0x39開始配起. 不過使用 _at_ 最好也要 07/10 01:05
ksmrt0123:同時宣告記憶體類型, 如 char data a[16] _at_ 0x39; 07/10 01:06
ksmrt0123:至於程式問題比較可能是如1F所說是其他原因 07/10 01:08
f751202:之前沒給值之前 程式跑到某一段會重開 給了就好了 07/10 09:50
f751202:後來把值 那段刪掉 又可以了 目前也還在找問題中 07/10 09:50
f751202:不知道什麼情況 MCU會強迫重新執行呢? 07/10 09:52