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

单片机数组超出范围

发布时间: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中;
开辟一块通用的数组,其他数组设为指针,指向通用数组中的地址,这样就省多了,当然,你要考虑好,在复用时不要互相干扰

阅读全文

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

热点内容
邮箱在线文档怎么设文件夹 浏览:873
区块链编译eth 浏览:781
安卓手机软件如何给照片加发光点 浏览:977
结构性存款在app哪里 浏览:968
iphone如何快速打开app 浏览:797
好玩的程序员笑话 浏览:82
linux下如何搭建web服务器 浏览:222
狼群之饥和命令之眼 浏览:369
xp使用telnet命令 浏览:159
安卓如何有苹果涂鸦笔 浏览:598
图好快压缩 浏览:295
华为思科命令手册 浏览:155
七公主中文版在哪个app看 浏览:646
周立功单片机实验与实践 浏览:259
新建文件夹命名怎么老是显示重试 浏览:797
云服务器如何建立社区 浏览:230
把pdf转成word文档的软件 浏览:248
云服务器的操作系统选什么好 浏览:974
python没用 浏览:833
丁晓钟外刊pdf 浏览:246