[问题] 阵列宣告问题

楼主: 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