一道嵌入式题目

[复制链接]
2858|11
 楼主| jadetang 发表于 2008-5-7 08:46 | 显示全部楼层 |阅读模式
程序流程是<br /><br />函数a()<br />{<br />....<br />}<br /><br />函数b()<br />{<br />....<br />}<br /><br />在函数b运行中可能会有中断,中断执行完以后会继续执行函数b,但是若想中断执行完以后直接执行函数a该怎么做?
liudewei 发表于 2008-5-7 08:58 | 显示全部楼层

在退出中断前将a函数的地址压入PC堆栈、需要的数据压入相

具体还和你的硬件中断保护机制,C编译系统都有关,要具体分析后对待,在中断退出前调用a函数应该是最安全的。
 楼主| jadetang 发表于 2008-5-7 09:13 | 显示全部楼层

OS是UCOSII,不知道楼上说的是不是一定要用汇编实现?

  
liudewei 发表于 2008-5-7 09:22 | 显示全部楼层

这和UCOSII的抢占不一样,你说的是中断退出后想立即执行a

  
liudewei 发表于 2008-5-7 09:29 | 显示全部楼层

你可以在中断中将a任务函数的优先级调整成高于b任务且就绪

  
 楼主| jadetang 发表于 2008-5-7 09:41 | 显示全部楼层

这个考虑过。

中断中将a任务函数的优先级调整成高于b任务且就绪<br />这样中断退出以后就会执行a,但是执行完a以后就会接着执行b,但是我的目的是放弃执行b。看来还是<br />在退出中断前将a函数的地址压入PC堆栈、需要的数据压入相应栈<br />这个方法好,但是好像有风险,直接用汇编的话。在考虑万全的方法。
computer00 发表于 2008-5-7 09:42 | 显示全部楼层

编程方式有问题。

a可以使用高优先级的,中断退出时执行任务调度。
 楼主| jadetang 发表于 2008-5-7 09:50 | 显示全部楼层

oo出来了,膜拜一下。任务调度确实比较可靠。

用汇编改寄存器还是怕怕啊。除非用得好,否则就SB了。
wsmcjm 发表于 2008-5-7 10:00 | 显示全部楼层

回复

插入一个BIT标志符来判断。
 楼主| jadetang 发表于 2008-5-7 10:06 | 显示全部楼层

插入一个BIT标志符来判断。

请能详细一点说明吗?
computer00 发表于 2008-5-7 10:14 | 显示全部楼层

真是够晕的...

还是编程思路的问题。换换思路吧。把不同的功能放不同的任务中,哪有中断执行之后,一个任务后面的代码就要放弃执行的?<br /><br />谁知道中断在哪发生?<br /><br />任务B执行时,发生中断,然后将A设置为高优先级,在A任务中,将B任务从系统中删除。这样B就不会再被执行了。
wsmcjm 发表于 2008-5-7 10:26 | 显示全部楼层

huifu

怎么详细说呢?定义一个全局或局部变量BIT。这是编程思路的问题。看看书,可以找到灵感的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

108

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部