作者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