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

单片机数组超出范围

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

阅读全文

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

热点内容
目送pdf 浏览:359
pdf如何只读文件 浏览:477
2019基金从业教材pdf 浏览:963
mvc的编程思想 浏览:710
北京机架式服务器云空间 浏览:553
电脑装了svn服务器是什么 浏览:407
多媒体压缩和编码 浏览:878
php仿百度搜索 浏览:362
单片机做混响 浏览:101
下雨了程序员笑话 浏览:489
程序员交通卡哪家好 浏览:815
液体能压缩吗 浏览:972
程序员穿特步相亲受拒 浏览:424
我的世界命令方块获得超强装备 浏览:426
单片机专项实训知识总结 浏览:466
sublimecss压缩 浏览:131
浏览器下载的app删除了怎么找回 浏览:781
朋友圈解压文字软件 浏览:925
keil5编程32单片机 浏览:643
pdf文件截取 浏览:166