📄 test.c
字号:
/*=========================================================================================
项目名称: 小型开源实时操作系统
软件版本: VER 1.0
目标平台: AVR系列单片机
工具链 : AVR-GCC(V4.1.2) WINAVR-20070525
开发人员: 韩骁
开发时间: 2007-07-05
版权 : GPL(GNU General Public License)
文件名称: test.c
文件说明:
sosos系统的测试程序
本次测试采用ARMEL公司的MEGA8进行
=========================================================================================*/
#include <avr/io.h>
#include <avr/interrupt.h>
#include "MYBIT.H"
#include "sosos.h"
#include "test.h"
//外部中断0 (2)
SOSOS_ISR(SIG_INTERRUPT0)
{
//进入中断
SOSOS_ENTER_INTERRUPT();
ENABLE_INTERRUPT();
//触发外部中断1
set_bit(PORTD,3);
clr_bit(PORTD,3);
counter_intr0++;
SososLogicSemPost(&LOG_SEM);
//离开中断
SOSOS_EXIT_INTERRUPT();
}
//外部中断1 (4)
SOSOS_ISR(SIG_INTERRUPT1)
{
//进入中断
SOSOS_ENTER_INTERRUPT();
counter_intr1++;
//离开中断
SOSOS_EXIT_INTERRUPT();
}
void SososIdleHook(void){//系统空闲任务钩子
//定时器
if(SososGetTimer(TIMER0)==0){
SososSetTimer(TIMER0,TIMER0_VALUE);//定时器0
}
if(SososGetTimer(TIMER0)<5){
counter_hook--;
//触发外部中断0
set_bit(PORTD,2);
clr_bit(PORTD,2);
}
else
counter_hook++;
}//系统空闲任务钩子
int main(void){//主函数
//初始化外部中断0
MCUCR=MCUCR|(1<<ISC01);//下降延触发
GIMSK=GIMSK|(1<<INT0);//允许外部中断0
DDRD=DDRD|(1<<DDD2);//D2为输出引脚
set_bit(PORTD,2);
//初始化外部中断0
MCUCR=MCUCR|(1<<ISC11);//下降延触发
GIMSK=GIMSK|(1<<INT1);//允许外部中断1
DDRD=DDRD|(1<<DDD3);//D3为输出引脚
set_bit(PORTD,3);
SososInitOs();//初始化SOSOS系统
SososCreateTask(task0,TASK0_PRI,TASK0_ID,TASK0_STACK_SIZE,(void *)&counter0);//创建task0任务
SososCreateTask(task1,TASK1_PRI,TASK1_ID,TASK1_STACK_SIZE,(void *)&counter1);//创建task1任务
SososCreateTask(task1,TASK2_PRI,TASK2_ID,TASK2_STACK_SIZE,(void *)&counter2);//创建task1任务
SososSetTimer(TIMER0,TIMER0_VALUE);//定时器0
SososCreateLogicSem(&LOG_SEM,SOSOS_SIGNAL_ENGROSS);//创建逻辑型信号量
SososCreateMutex(&MUTEX_SEM,SOSOS_SIGNAL_FREE);//创建互斥型信号量 SososCreateFlag(&event_flag1,&flag_grp1,1,1);//创建事件标志
SososCreateFlag(&event_flag2,&flag_grp1,2,2);//创建事件标志
SososStartOs();//启动SOSOS系统
}//主函数
void task0(unsigned int *ptr){//任务0
unsigned char i=0;
while(1){//任务循环
test0=SososLogicSemPend(&LOG_SEM,2);//等待逻辑型信号量
if(test0==SOSOS_OK){
(*ptr)++;//counter0
SososGetMutex(&MUTEX_SEM,0);//获得互斥型信号量
com_counter++;
SososFreeMutex(&MUTEX_SEM);//释放互斥型信号量
}
if((i&1)==0)
SososChangeFlag(&event_flag1,1,SOSOS_FLAG_OPT_SET);//改变事件标志
else
SososChangeFlag(&event_flag2,2,SOSOS_FLAG_OPT_SET);//改变事件标志
i++;
}//任务循环
}//任务0
void task1(unsigned int *ptr){//任务1/2
while(1){//任务循环
if(SososGetTaskId()==0x10){//任务1
SososWaitFlag(&event_flag1,1,1,0);//等待指定的事件
SososChangeFlag(&event_flag1,1,SOSOS_FLAG_OPT_CLR);//改变事件标志
(*ptr)++;//counter1
}//任务1
if(SososGetTaskId()==0x11){//任务2
SososWaitFlag(&event_flag2,2,2,0);//等待指定的事件
SososChangeFlag(&event_flag2,2,SOSOS_FLAG_OPT_CLR);//改变事件标志
(*ptr)++;//counter2
}//任务2
SososGetMutex(&MUTEX_SEM,0);//获得互斥型信号量
SososDelay(1);//任务延时
com_counter++;
SososFreeMutex(&MUTEX_SEM);//释放互斥型信号量
}//任务循环
}//任务1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -