⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 avr和small操作系统的一个测试程序
💻 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 + -