导航:首页 > 操作系统 > 单片机数组超出范围

单片机数组超出范围

发布时间:2025-05-05 08:18:05

‘壹’ 单片机中数组超出范围会产生怎样的异常

可以正常读取数据,但数据非你想获取的内容,而且溢出部分内容不可控。

‘贰’ 一个单片机UART接收与内存的问题,如果我定义了数组UART[60]用于接收UART接收来的数据,每收一个数据.....

超过60以后,指针uart_point 会指向UART[59]的下一个连续内存地址。假设UART[0]的地址是0x0000,编译器会分配一个连续的内存块,即0x0000~0x0059,当指针的值是0x0059,即指向最后一个变量UART[59]时,再加1就指针值就变成0x0060了,这个内存地址不属于UART,可能会被编译器分配给其它的变量。如果你通过指针改变了它的值,很明显,当你的UART运行时就会发生一些若明其妙的问题,而且现象可能各式各样,无迹可循。解决的办法是定义一个全局变量,用来指示接收的字符数量,在串口接收中断中检测接收数量是否超规,当字符数量达到指定值时若还有数据则把多余的部份丢弃,如下:
1:定义串口缓存数量 #define UARTCHARNUM 60
2:定义UART[UARTCHARNUM]和字符数量指示变量inuartnum
3:定义一系列操作函数,如:返回当前接收字符数量、复位字符数量等函数
4:在串口接收中断中检查接收字符数量是否达到指定值,若有则多余字符丢弃
其它语句。。。
if(inuartnum<UARTCHARNUM )
{
UART[inuartnum]=SBUF;
inuartnum++;
}
我就是这么做的,使用内存变量指针一定要记得给它加个检测,防止出现不可预知的错误,这种错误Keil C等编译器暂时没法自动检测出来,只能自已想办法。

‘叁’ 怎么解决单片机数组占用太多内存的问题

把不用修改的数组设为code,放在ROM中;
开辟一块通用的数组,其他数组设为指针,指向通用数组中的地址,这样就省多了,当然,你要考虑好,在复用时不要互相干扰

阅读全文

与单片机数组超出范围相关的资料

热点内容
香蕉科技验证码是什么app 浏览:774
权力pdf 浏览:359
手游苍穹变怎么找不到服务器登录 浏览:958
单片机与上位机通信 浏览:926
pr程序中的格式文件夹 浏览:312
java中引用传递 浏览:883
安卓手机如何获得复活卡 浏览:653
pdf怎么转换成cad文件 浏览:376
中国年龄的算法有哪些 浏览:818
安卓微信版本过低不升级怎么登录微信 浏览:939
程序员专科生长期目标 浏览:688
以太坊交易确认算法 浏览:816
文件夹变成hjm打不开怎么办 浏览:573
分页算法视频 浏览:106
python3标准库pdf 浏览:602
杭州云服务器销售 浏览:536
pdf密码移除 浏览:148
云迅智创FIL服务器 浏览:940
中间件pdf 浏览:277
输入服务器上的ip地址怎么办啊 浏览:296