这个实验中有三个任务:
1、DS0闪
2、KEY1来控制DS1亮以及打印KEY1
3、KEY0来控制打印KEY0
其实基于系统的外部中断和裸机跑是差不了多少的,就是要在任务中延时和开关中断!
第一:创建三个任务的优先级,栈的大小等等:- /////////////////////////ucosII任务设置///////////////////////////////////
- //START 任务
- //设置任务优先级
- #define START_TASK_PRIO 10 //开始任务的优先级设置为最低
- //设置任务堆栈大小
- #define START_STK_SIZE 64
- //任务堆栈
- OS_STK START_TASK_STK[START_STK_SIZE];
- //任务函数
- void start_task(void *pdata);
-
- #define LED0_TASK_PRIO 7
- //设置任务堆栈大小
- #define LED0_STK_SIZE 64
- //任务堆栈
- OS_STK LED0_TASK_STK[LED0_STK_SIZE];
- //任务函数
- void led0_task(void *pdata);
- #define KEY_TASK_PRIO 5
- //设置任务堆栈大小
- #define KEY_STK_SIZE 64
- //任务堆栈
- OS_STK KEY_TASK_STK[KEY_STK_SIZE];
- //任务函数
- void KEY_task(void *pdata);
- #define KEY_UART_TASK_PRIO 4
- //设置任务堆栈大小
- #define KEY_UART_STK_SIZE 64
- //任务堆栈
- OS_STK KEY_UART_TASK_STK[KEY_UART_STK_SIZE];
- //任务函数
- void KEY_UART_task(void *pdata);
- 然后是在main函数中初始化那些中断串口驱动什么的!
- int main(void)
- {
- stm32_Clock_Init(9); //系统时钟设置
- delay_init(72); //延时初始化
- LED_Init();
- LED_Init(); //初始化与LED连接的硬件接口
- KEY_Init();
- EXTIX_Init();
- uart_init(72,115200);
- OSInit();
- OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务
- OSStart();
- }
- 然后就是创建任务
- //开始任务
- void start_task(void *pdata)
- {
- OS_CPU_SR cpu_sr=0;
- pdata = pdata;
- OS_ENTER_CRITICAL();//进入临界区(无法被中断打断)
- OSTaskCreate(led0_task,(void *)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);
- //OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);
- OSTaskCreate(KEY_task,(void *)0,(OS_STK*)&KEY_TASK_STK[KEY_STK_SIZE-1],KEY_TASK_PRIO);
- OSTaskCreate(KEY_UART_task,(void *)0,(OS_STK*)&KEY_UART_TASK_STK[KEY_UART_STK_SIZE-1],KEY_UART_TASK_PRIO);
- OSTaskSuspend(START_TASK_PRIO); //挂起起始任务.
- OS_EXIT_CRITICAL();//退出临界区(可以被中断打断)
- }
- //LED0任务
- void led0_task(void *pdata)
- {
- while(1)
- {
- LED0=0;
- delay_ms(80);
- LED0=1;
- delay_ms(920);
- };
- }
- void KEY_task(void *pdata)
- {
- while(1)
- {
- delay_ms(920);
- };
- }
- void KEY_UART_task(void *pdata)
- {
- while(1)
- {
- delay_ms(920);
- };
- }
|