包括UCOSII实验例程!
单片机源程序如下:
- #include "public.h"
- #define START_TASK_PRIO 10 //开始任务优先级
- #define START_STK_SIZE 64 //设置任务堆栈大小
- OS_STK START_TASK_STK[START_STK_SIZE]; //创建任务堆栈空间
- #define LED1_TASK_PRIO 1 //led1任务优先级
- #define LED1_STK_SIZE 64 //设置任务堆栈大小
- OS_STK LED1_TASK_STK[LED1_STK_SIZE]; //创建任务堆栈空间
- #define BUTTON_TASK_PRIO 3 //BUTTON任务优先级
- #define BUTTON_STK_SIZE 64 //设置任务堆栈大小
- OS_STK BUTTON_TASK_STK[BUTTON_STK_SIZE]; //创建任务堆栈空间
- #define BEEP_TASK_PRIO 5 //BEEP任务优先级
- #define BEEP_STK_SIZE 64 //设置任务堆栈大小
- OS_STK BEEP_TASK_STK[BEEP_STK_SIZE]; //创建任务堆栈空间
- void start_task(void *pdata);
- void button_task(void *pdata); //任务2 按键
- void RCC_Init()
- {
- SystemInit();
- }
- int main()
- {
- delay_init(); //延时初始化
- RCC_Init(); //系统时钟初始化
- LED_Init(); //端口初始化
- BEEP_Init(); //端口初始化
- key_init();
- OSInit(); //初始化UCOS操作系统
-
- OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1]
- ,START_TASK_PRIO); //创建起始任务
- OSStart(); //启动ucos操作系统
- }
- void start_task(void *pdata) //开始任务
- {
- OS_CPU_SR cpu_sr=0;
- pdata=pdata;
- OSStatInit(); //初始化统计任务
- OS_ENTER_CRITICAL(); //进入临界区,中断无法打断
- OSTaskCreate(led1_task,(void *)0,(OS_STK *)&LED1_TASK_STK[LED1_STK_SIZE-1]
- ,LED1_TASK_PRIO);
- OSTaskCreate(beep_task,(void *)0,(OS_STK *)&BEEP_TASK_STK[BEEP_STK_SIZE-1]
- ,BEEP_TASK_PRIO);
- OSTaskCreate(button_task,(void *)0,(OS_STK *)&BUTTON_TASK_STK[BUTTON_STK_SIZE-1]
- ,BUTTON_TASK_PRIO);
- OSTaskSuspend(START_TASK_PRIO); //挂起起始任务
- OS_EXIT_CRITICAL(); //退出临界区,中断可以打断
- }
- void button_task(void *pdata) //任务2 按键
- {
- pdata=pdata;
- while(1)
- {
- if(k_up==1) //挂起
- {
- delay_ms(10);
- if(k_up==1)
- {
- OSTaskSuspend(LED1_TASK_PRIO); //挂起LED1任务
- }
- while(k_up);
- }
-
- if(k_down==0) //恢复
- {
- delay_ms(10);
- if(k_down==0)
- {
- OSTaskResume(LED1_TASK_PRIO); //恢复LED1任务
- }
- while(!k_down);
- }
- if(k_left==0) //删除
- {
- delay_ms(10);
- if(k_left==0)
- {
- OSTaskDelReq(BEEP_TASK_PRIO); //发送删除蜂鸣器任务请求
- }
- while(!k_left);
- }
- if(k_right==0) //创建任务
- {
- delay_ms(10);
- if(k_right==0)
- {
- OSTaskCreate(beep_task,(void *)0,(OS_STK *)&BEEP_TASK_STK[BEEP_STK_SIZE-1]
- ,BEEP_TASK_PRIO);
- }
- while(!k_right);
- }
- delay_ms(10);
- }
- }
复制代码
所有资料51hei提供下载:
元件库和封装库.zip
(76.6 KB, 下载次数: 22)
|