历史上的今天
今天是:2025年03月04日(星期二)
2021年03月04日 | MSP430中定义大数组存在的问题及解决方案
2021-03-04 来源:eefocus
问题:
利用CCS软件将代码烧入430之后,在还没有点击开始运行时,程序就已经开始自动运行了如下图所示,在点击暂停之后,程序就报错了。在把那个数组元素个数改的很小之后,程序就正常了。所以可以断定,是由于定义大数组产生的问题。

问题分析:
通过查找资料,发现产生这个问题的原因是因为全局数组定义过大时,系统一上电,需要对这些数组初始化,初始化的时间过长,导致看门口溢出,从而一直进不了主函数,导致程序跑飞了。
解决方案:
(1)编写C启动函数
在TI官网找了有关CCS的资料之后,找到了解决方案。
除了主函数之外,我们需要再定义一个函数,函数名为的_system_pre_init(),在CCS编译器中,这是一个C启动函数,是在主函数开始执行之前执行的,所以在该函数里,加入关闭看门口的代码就可以解决这个问题了~
在IAR编译器中,也有类似的函数,为__low_level_init(),使用方法与上文提到的相同。
(2)将大数组放在RAM的不初始化区域
既然已经知道是初始化时间过长导致这个问题,我们可以把大数组定义在RAM的不初始化区域就行了。
在IAR编译器中,在定义变量之前,加上__no_initm命令即可,如__no_init char a; 即把a这个字符型变量放在RAM的不初始化区域。
在CCS编译器中,没有这样的命令,需要做类似的操作的话,有些繁琐,需要自己改写CMD文件,这里就不再赘述了。大家有兴趣的话,可以到TI官网下载相应的文档看一下。
史海拾趣
|
最近打算买台新电脑,想试试Windows7,不知道与wince的开发环境兼容性如何 我一般用到的软件有:PB5.0 EVC VS2005 VC++6.0 ADS1.2 Keil3… 查看全部问答> |
|
TE2440-II的VGA是通过CH7026来把LCD信号转换成VGA信号的,我对比了下和阳初的BSP发现个问题,TE2440-II里找不到VGAinit,而且在KERNEL里的CFW.C文件中initdisplay函数中也没有关于VGA的初始化问题,请问TE2440-II的CH7026的控制程序在哪个地方啊(芯 ...… 查看全部问答> |
|
11月祥佑PowerPC嵌入式系统开发培训班 开始报名了 开课时间:2008年11月,为期三天。 上课地点:上海 课程教材:《PowerPC嵌入式开发系统实验教材》 收费标准: 4000元/人 注:本次开班7折优惠:2800元/人。(含讲义费,午餐费) 课程特点: ...… 查看全部问答> |
|
佛山本土的LED筒灯联盟标准近日在佛山市质监局发布。据悉,该标准由佛山市标准技术研究院、佛山市照明灯具协会、中山大学佛山研究院联合本土7家LED企业发起制定。 据悉,佛山是全国最大的筒灯生产基地,筒灯产量约占全国40%左右,目前已有120 ...… 查看全部问答> |
|
As design complexities increase, use of vendor-specific intellectual property (IP) blocks has become a common design methodology. Altera provides parameterizable megafunctions that are optimized for Altera device architectures. ...… 查看全部问答> |
|
Q1:当Timer_A的捕获比较模块工作在捕获模式(即CAP = 1)时,TAR是里面的值表示什么含义?它是在对什么进行计数? Q2:TAR中的值写入CCRx后,TAR会自动清零吗?此时TAIFG的状态和TAR有关吗?… 查看全部问答> |




