"); //-->
今天调试程序用到了指针数组,如下:
Uchar code *state[]={"OFF ","ON ","REMOTE ","LOCAL ","BACKUP ","OFFLINE ","ONLINE ","NORMAL ","EMERGENCY","STARTED ","STOPED ","LIMIT ","NO-LIMIT ","MIN ","MAX ","NOREADY ","READY "};
可是伟福编译器提示:ERROR L107:ADDRESS SPACE OVERFLOW <LCD.M51>
改成如下(去掉几个数组):
Uchar code *state[]={"OFF ","ON ","REMOTE ","LOCAL ","BACKUP ","OFFLINE ","ONLINE ","NORMAL ","EMERGENCY","STARTED ","STOPED ","LIMIT ","NO-LIMIT "};编译通过. 这个是哪个溢出呢,已经定义成了CODE区了,这肯定够用,是指针放在RAM里了?不太清楚.
无奈改成: Uchar code state[][9]={"OFF ","ON ","REMOTE ","LOCAL ","BACKUP ","OFFLINE ","ONLINE ","NORMAL ","EMERGENCY","STARTED ","STOPED ","LIMIT ","NO-LIMIT ","MIN ","MAX ","NOREADY ","READY "};
LCD.h中的函数为:
void ePutstr2(Uchar x2,Uchar y2, Uchar code *ptr2)
{
Uchar i,len=0;
len = strlen(ptr2);
for (i=0;i<len;i++)
{
DispOneChar2(x2++,y2,ptr2[i]);
if ( x2 == 40 )
{
x2 = 0; y2 ^= 1;
}
}
}
在主函数中调用:
if(( disp[4]==4)
{
ePutstr2(30,1,&state[0][0]); //在第2行第30个位置显示出OFF
}
可显示的是CODE区的其他内容,跟踪执行发现指针ptr2指向的确实是”OFF”的首地址,问题就出现在len=strlen(ptr2)他判断字符串长度是以’\0’为标志的而前面定义的数组固定维数,没有空闲空间加入’\0’,所以导致把CODE区的其他内容全当成了一个数组,直到出现’\0’为止.
原来的判断字符串长度:while(isprint(ptr2[len])) {len++;}; 效果一样.
将数组改成:
Uchar code state[][10]={"OFF ","ON ","REMOTE ","LOCAL ","BACKUP ","OFFLINE ","ONLINE ","NORMAL ","EMERGENCY","STARTED ","STOPED ","LIMIT ","NO-LIMIT ","MIN ","MAX ","NOREADY ","READY "};
问题解决,知道为什么了吧,哈哈,仔细看!多了一维.不再多说了吧……
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
[转帖]e-os操作系统介绍
C6000 DSP软件开发环境CCS介绍
PCB走线的电阻如何计算?
DeepSeek带动国产半导体产业链需求爆发
FPGA的DSP应用
电子电路大全(合订本)
联想“服务转型”神话的虚幻与真实
嵌入式系统引导程序移植
50%新型HPC采用多芯片设计
开关电源手册
实时Linux技术:如何在嵌入式LINUX中应用实时特性
中国首个AI原生IDE!字节跳动发布AI编程工具Trae
家用电线,我们应该选哪种规格大小,才不会过流
仪表表头动圈断线的修复
电子工程师指南
中国将拥有自己的“Windows”操作系统
铝电解电容器老炼电路
电子线路(提高版·模拟电路与脉冲数字电路)
单结晶体管工作性能速测电路
绘制PCB板需知道哪些问题?
[转帖]串口驱动编写实例解读(一)
华中理工大学出的C51教材
三端稳压集成电路工作性能测试电路
LG Innotek进军车用半导体市场 推出车用应用处理器模块
一粒沙,一个充满希望的世界
人工智能将会如何颠覆物联网?
石英晶体挑选电路
嵌入式Linux优化:加快系统起动和应用起动的过程
苦寻产业化突破口 谁来买\"中国芯\"
RISC-V,迎来了「破冰者」