|
发表于 2006-12-30 11:30:31
|
显示全部楼层
任务之间可以发送信号,
中断也可以发信号给任务,只能用OSIntSendSignal(),
如果是非系统管理中断,必须注意如下设置,
1.非系统管理中断优先级要设置成最高;
2.将Os_cpu.h中EN_SP2定义为1
3.将Os_cpu.h中Sp2Space定义为适当大小,为非系统管理中断堆栈提供空间;
4.重写三个宏OS_ENTER_CRITICAL(),OS_EXIT_CRITICAL()和SET_EA,
比如51单片机系统时钟中断用T2,另外使用非系统管理中断T0,设置时这样的:
#define OS_ENTER_CRITICAL() IE&=~0x20,Os_Enter_Sum++ //关闭系统时钟中断和系统管理中断,不要关闭非系统管理中断;
#define OS_EXIT_CRITICAL() if (--Os_Enter_Sum==0)IE|=0xa0 //打开系统时钟中断和系统管理中断,这里千万不能把不受系统管理的中断打开(否则,系统就会崩溃);
SET_EA MACRO
ORL IE,#0A0H ;打开系统时钟中断和系统管理中断,这里千万不能把不受系;
ENDM ;管理的中断打开(否则,系统就会崩溃)
5.非系统管理中断不允许调用OS_INT_ENTER()和OSIntExit();但可以调用OSIntSendSignal()发送信号,使某个任务就绪。
6.在合适的时候打开非系统管理中断。
我是用一个单独的任务控制非系统管理中断,这个任务是由其他任务OSIntSendSignal()发送信号就绪的,任务之间发送信号没问题。 |
|