关于MSP430 数组定义
答案:2 悬赏:10 手机版
解决时间 2021-02-01 06:25
- 提问者网友:难遇难求
- 2021-02-01 02:10
各位大侠,小弟正在用使用MSP430,用C编写程序,定义数组(比如int a[200])的时候,之后程序运行的时候出现The stack pointer for stack 'Stack' (currently Memory:0x3BE) is outside the stack range (Memory:0x9B0 to Memory:0xA00)的警告,不知道这是表示的什么意思?还有就是我定义个一个比较大的数组,就提示我类似堆栈溢出的问题,难道这样子的话就不能定义大容量数组了吗?还请各位大侠帮帮忙啊~~
最佳答案
- 五星知识达人网友:忘川信使
- 2021-02-01 02:38
解决方案:
(1)编写C启动函数
除了主函数之外,需要再定义一个函数,函数名为的_system_pre_init(),在CCS编译器中,这是一个C启动函数,是在主函数开始执行之前执行的,所以在该函数里,加入关闭看门口的代码就可以解决这个问题了~
在IAR编译器中,也有类似的函数,为__low_level_init(),使用方法与上文提到的相同。
(2)将大数组放在RAM的不初始化区域
既然已经知道是初始化时间过长导致这个问题,可以把大数组定义在RAM的不初始化区域就行了。
在IAR编译器中,在定义变量之前,加上__no_initm命令即可,如__no_init char a; 即把a这个字符型变量放在RAM的不初始化区域。
(1)编写C启动函数
除了主函数之外,需要再定义一个函数,函数名为的_system_pre_init(),在CCS编译器中,这是一个C启动函数,是在主函数开始执行之前执行的,所以在该函数里,加入关闭看门口的代码就可以解决这个问题了~
在IAR编译器中,也有类似的函数,为__low_level_init(),使用方法与上文提到的相同。
(2)将大数组放在RAM的不初始化区域
既然已经知道是初始化时间过长导致这个问题,可以把大数组定义在RAM的不初始化区域就行了。
在IAR编译器中,在定义变量之前,加上__no_initm命令即可,如__no_init char a; 即把a这个字符型变量放在RAM的不初始化区域。
全部回答
- 1楼网友:山有枢
- 2021-02-01 02:50
430跟51编程有些些不同。不过不好设置某一位输出控制,告诉你个一般的方法。
#define led_on p3out|=bit6;
#define led_off p3out&=~bit6;
调用的方法:
led_on;
led_off;
对于输入的话,方法又有些不同。
#define data_in (p2in&bit5)!=0
用法:
if(data_in) data++;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯