[問題] 陣列宣告問題

看板ASM (組合語言)作者 (hi~)時間11年前 (2013/07/09 11:10), 編輯推噓4(4010)
留言14則, 4人參與, 最新討論串1/1
小弟我用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

07/09 12:27, , 1F
你會當掉應該是其他原因,跟_at_和初始值都沒關係
07/09 12:27, 1F

07/09 12:29, , 2F
你宣告了16個BYTE的陣列,它就會留16BYTE空間給你
07/09 12:29, 2F

07/09 16:33, , 3F
我比較好奇為什麼要用 _at_
07/09 16:33, 3F

07/09 17:54, , 4F
因為我是看書的 不知道有什麼區別呢XD?
07/09 17:54, 4F

07/09 20:53, , 5F
_at_ 是直接指定記憶體,如果沒有特別需求這樣通常會撞爛
07/09 20:53, 5F

07/09 20:54, , 6F
Stack,而不一定要指定數值,直接宣告來用編譯器自然會安
07/09 20:54, 6F

07/09 20:54, , 7F
排安全可用的記憶體給你用了。
07/09 20:54, 7F

07/09 20:55, , 8F
重點不是先給數值,而是你用了 _at_
07/09 20:55, 8F

07/10 01:05, , 9F
宣告0x39就會從0x39開始配起. 不過使用 _at_ 最好也要
07/10 01:05, 9F

07/10 01:06, , 10F
同時宣告記憶體類型, 如 char data a[16] _at_ 0x39;
07/10 01:06, 10F

07/10 01:08, , 11F
至於程式問題比較可能是如1F所說是其他原因
07/10 01:08, 11F

07/10 09:50, , 12F
之前沒給值之前 程式跑到某一段會重開 給了就好了
07/10 09:50, 12F

07/10 09:50, , 13F
後來把值 那段刪掉 又可以了 目前也還在找問題中
07/10 09:50, 13F

07/10 09:52, , 14F
不知道什麼情況 MCU會強迫重新執行呢?
07/10 09:52, 14F
文章代碼(AID): #1HstyzBS (ASM)
文章代碼(AID): #1HstyzBS (ASM)