4727|10

78

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

[请教]keil中如何更合理处理多中断,不容易出现异常? [复制链接]

譬如说:

我用个循环队列存储和发送消息,队列使用固定长度的数组,其中数组的长度肯定长于每条消息,队列中有8个数组(均存在XRAM中);

一个串口中断(每个字节触发一次) 另一个中断(固定T触发一次) 串口中断优先级高 波特率400Kbps;

串口是接收消息,入队列;定时中断发送消息,出队列;其中出队列按照一定的规则,存在出队列速度远远低于入队,如果队列满,则关闭串口;

我在高消息密度下入队时,丢消息是正常的,故宁可丢消息,也要保证工作稳定,但是发现我的队列以外的XRAM会被意外写成了数据,即被意外覆盖;

请教大家,在keil中应该如果避免此类的错误?
程序的架构上有没有改进的地方?

最新回复

谢谢ls 我判断越界了啊 一旦到了队列满,即数目达到队列总数8的时候,即关闭串口中断,停止入队啊; 我也加了关EA的操作啊,有点匪夷所思  详情 回复 发表于 2009-4-19 13:39
点赞 关注

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
循环队列管理有问题。
 
 

回复

94

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
ls

rear和front都是增减进行取余 可以在每个存储器上增加一个是否正使用的标志;

但是使用队列中数目依然可以达到这个要求 而且其中的使用都是在关中断执行;

谢谢!
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

4
 
最好保证: rear 和 front 之间最少都会相差一个。判断时采用

[code]

来比较

 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

5
 
C51用波特率400Kbps是不是太高了,115200(115K)对51已经够呛了!
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 
ls 我使用的MCU的主频比较高呵呵……

关于3楼的建议谢谢哈 有没有更好的队列控制模式呢?因为每次队列操作都要进行判断 效率是不是有些不好……而且队列中的区

域被意外擦写我能理解,但是队列以外的区域也被擦写了这是为什么呢?
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

7
 
“队列以外的XRAM会被意外写成了数据”,不是消息队列的架构导致的,应该是程序出错了,比如数组越界,指针错误,程序跑飞等等。
如果方便,可以将程序贴出,或者mail。
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

8
 
谢谢shuiyan 呵呵每次都这么热心

嗯程序粘贴不是很方便 我先按照你说的几个问题去查查 到时再分享;谢谢大家!
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

9
 
我承认是队列的问题,我目前的程序框架如下:

使用标志数组(就是和存储器一一对应的标志) “1”则表示存储器占用,“0”表示存储器被占;仍然延续了队列长度;

入队的时候,判断下一个存储器标志位是否为1,若为1,则认为队列满,关闭相应中断,停止入队;若不是,rear = (rear +1) % N;置标志位,队列长度增加;

出队的时候,判断队列中有长度,且front的当前位置寄存器标志位为“1”,表示此时存储器有效,进行出队;front= (front+1) % N,清标志位,队列长度减少;

可能有些繁琐,但是对于实际问题确实得到了解决,队列不再出问题了;一个中断频率很高,不停地入队;一个中断频率较低,慢慢地出队;

请教下大家,其实增加标志数组是个繁琐的东西,但是效果有改善,是为什么呢?
有没有更好的FIFO的代码?保护临界区的
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

10
 
说明原来的程序没有判断越界,不停的入队,超过预定范围,将队列范围外的地方也写了数据。
要标志临界区,肯定要有标志的,不然无从判断。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

11
 
谢谢ls

我判断越界了啊 一旦到了队列满,即数目达到队列总数8的时候,即关闭串口中断,停止入队啊;

我也加了关EA的操作啊,有点匪夷所思
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表