打印

Keil C51 的奇怪问题???

[复制链接]
1405|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wuljia|  楼主 | 2008-7-30 16:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
三种写法,前两种运行正常,第三种T2中断返回后跑飞!!
只是指定使用的寄存器组不一样啊!!
;----------------------
主程序是死循环,
comsrv 是串口中断,
t2srv 是T2定时器中断,
pross 是串口中断里调用的一个函数
;-----------第一种------------------
unsigned char pross(unsigned char cmd,unsigned int cs)
void comsrv() interrupt 4
void t2srv() interrupt 5
;-----------第二种------------------
unsigned char pross(unsigned char cmd,unsigned int cs) using 1
void comsrv() interrupt 4 using 1
void t2srv() interrupt 5 using 2
;------------第三种------------------
unsigned char pross(unsigned char cmd,unsigned int cs) using 2
void comsrv() interrupt 4 using 2
void t2srv() interrupt 5 using 1

相关帖子

沙发
zhaoyu2005| | 2008-7-30 17:05 | 只看该作者

俺记得using只在中断函数中使用

普通函数不能用的,虽然pross()是comsrv()调用的,但不是中断函数,可以理解为与interrupt连用(可以省略,默认using 0)
但是刚才试了下,普通函数可以使用using关键字。
那可能就是两个using的区域不同造成,数据不对的

使用特权

评论回复
板凳
wuljia|  楼主 | 2008-7-30 17:13 | 只看该作者

刚才改了一下,仍然不正常!

我把 pross 里的整体内容整合在了 comsrv 中,
这样 t2srv、comsrv 就没有调用其它的任何函数.
仍然是,前两种运行正常,第三种T2中断返回后跑飞!!
只是指定使用的寄存器组不一样啊!!
;----------------------
主程序是死循环,
comsrv 是串口中断,
t2srv 是T2定时器中断,
;-----------第一种------------------
void comsrv() interrupt 4
void t2srv() interrupt 5
;-----------第二种------------------
void comsrv() interrupt 4 using 1
void t2srv() interrupt 5 using 2
;------------第三种------------------
void comsrv() interrupt 4 using 2
void t2srv() interrupt 5 using 1
 
 

使用特权

评论回复
地板
wuljia|  楼主 | 2008-7-30 17:47 | 只看该作者

找到原因了,数据下标越界,冲了堆栈了

定义了个 on[5] ,用了 on[0]~on[5] ,冲了堆栈了

前段时间用 VB 用多了!

使用特权

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

本版积分规则

118

主题

265

帖子

0

粉丝