打印

CW C编译器的堆栈指针需要设置吗?

[复制链接]
3106|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
born|  楼主 | 2009-7-6 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
forthlab| | 2009-7-6 12:12 | 只看该作者

用PE的话在CPU的bean里面可以设置的

使用特权

评论回复
板凳
born|  楼主 | 2009-7-6 16:58 | 只看该作者

bug终于找到!

原来 我在程序中使用了两个中断,  一个是串口通讯中断,一个是实时时钟中断,  在进入实时时钟中断时候(每32ms),总中断允许位  是关闭的, 这时候如果来了串口数据,将不能处理,可能造成丢包的情况, 我在实时时钟中断的处理程序开始部分 加了一条   EnableInterrupts;开启总中断允许位,  串口丢包的情况再也没有了.

使用特权

评论回复
地板
r-bmw| | 2009-7-26 14:41 | 只看该作者

CW C编译器的堆栈指针需要设置吗?

不用啊

使用特权

评论回复
5
张明峰| | 2009-8-9 22:21 | 只看该作者
born找到了bug,但不幸引入了更大的bug:中断服务程序里面加"EnableInterrupts"有巨大隐患,要千万小心。
你的bug实质上就是“实时时钟中断的处理程序”占用太长时间了,应该改良这部分代码,而不是胡乱重新开启中断。

使用特权

评论回复
6
vr2whf| | 2009-8-13 01:01 | 只看该作者
张老师, 不明白nested interrupt有什么问题.

另一角度看, 若果interrupt常带来麻烦, 例不如索性不用好了, 就像RS08架构, 根本上不支持interrupt. 学老外说, "poses a challenge for dealing with interrupt...if interrupt is hassle, ditch them all together"

使用特权

评论回复
7
冯广州| | 2009-8-13 08:15 | 只看该作者
对于串口用中断还是比较好的,因为串口发送、接收数据的时候占用系统时间还是蛮长的,尤其是数据量很大的时候。简单的中断服务程序处理,只需要在中断服务程序里对要执行的程序进行状态更新,而真正的执行程序都放在无线循环的主程序了好了。

使用特权

评论回复
8
张明峰| | 2009-8-13 08:25 | 只看该作者
本帖最后由 张明峰 于 2009-8-13 08:26 编辑

基于FSL的单片机架构(S08或较老的908系列),若在中断服务程序中重新开启中断使能,内核将会响应包括本中断源在内的任何中断请求,这样当你的中断服务程序本身质量不高时(例如这里很长时间的“实时时钟中断的处理程序”),就会出现程序的递归调用,导致堆栈崩溃,系统异常。

例如:你的定时中断为100us间隔,正常执行需要花20us。在定时中断里面重新打开中断后响应了串口中断,执行串口串口中断时花了90us。当从串口中断返回后,定时中断标志已经出现,故立即相应定时中断服务程序,这时就出现了定时中断服务程序中递归调用一次自身,如果一直这样重复,系统就只有死路一条了。

“若果interrupt常带来麻烦, 例不如索性不用好了”,说的很对。我的原则就是只要查询能满足,就不用中断。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

100

帖子

1

粉丝