完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
[C] 纯文本查看 复制代码
#include "led.h"#include "delay.h"#include "sys.h"#include "usart.h"#include "key.h"#include "lcd.h"#include "includes.h"/////////////////////////UCOSII任务堆栈设置/////////////////////////////////////START 任务//设置任务优先级#define START_TASK_PRIO 10 //开始任务的优先级设置为最低//设置任务堆栈大小#define START_STK_SIZE 128//创建任务堆栈空间OS_STK START_TASK_STK[START_STK_SIZE];//任务函数接口void start_task(void *pdata); //LED1任务//设置任务优先级#define LED1_TASK_PRIO 5 //设置任务堆栈大小#define LED1_STK_SIZE 64//创建任务堆栈空间OS_STK LED1_TASK_STK[LED1_STK_SIZE];//任务函数接口void led1_task(void *pdata);//LED2任务//设置任务优先级#define LED2_TASK_PRIO 4 //设置任务堆栈大小#define LED2_STK_SIZE 64//创建任务堆栈空间OS_STK LED2_TASK_STK[LED2_STK_SIZE];//任务函数接口void led2_task(void *pdata);//KEY任务//设置任务优先级#define KEY_TASK_PRIO 2 //设置任务堆栈大小#define KEY_STK_SIZE 64//创建任务堆栈空间OS_STK KEY_TASK_STK[KEY_STK_SIZE];//任务函数接口void key_task(void *pdata);//LCD显示任务//设置任务优先级#define LCD_TASK_PRIO 3 //设置任务堆栈大小#define LCD_STK_SIZE 64//创建任务堆栈空间OS_STK LCD_TASK_STK[KEY_STK_SIZE];//任务函数接口void lcd_task(void *pdata); int main(void) { SystemInit();delay_init(); //延时初始化 NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(9600);LED_Init(); //初始化与LED连接的硬件接口KEY_Init();LCD_Init();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; OSStatInit();//初始化统计任务.这里会延时1秒钟左右 OS_ENTER_CRITICAL();//进入临界区(无法被中断打断) OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO); OSTaskCreate(led2_task,(void *)0,(OS_STK*)&LED2_TASK_STK[LED2_STK_SIZE-1],LED2_TASK_PRIO); OSTaskCreate(key_task,(void *)0,(OS_STK*)&KEY_TASK_STK[KEY_STK_SIZE-1],KEY_TASK_PRIO); OSTaskCreate(lcd_task,(void *)0,(OS_STK*)&LCD_TASK_STK[LCD_STK_SIZE-1],LCD_TASK_PRIO); OSTaskSuspend(START_TASK_PRIO);//挂起起始任务.OS_EXIT_CRITICAL();//退出临界区(可以被中断打断)}//LED1任务void led1_task(void *pdata){ while(1){LED0=!LED0;//delay_ms(300);POINT_COLOR=RED; LCD_ShowString(30,90,200,16,16,"led0 task on"); OSTimeDlyHMSM(0,0,0,300); }}//LED2任务void led2_task(void *pdata){ while(1){LED1=!LED1;//delay_ms(300);POINT_COLOR=RED; LCD_ShowString(30,110,200,16,16,"led1 task on"); OSTimeDlyHMSM(0,0,0,300); }}//KEY任务void key_task(void *pdata){ u8 key;while(1){ key = KEY_Scan(0);if(key == 1){OSTaskSuspend(LED1_TASK_PRIO);OSTaskSuspend(LED2_TASK_PRIO);POINT_COLOR=RED; LCD_ShowString(30,150,200,16,16,"TASK1"); }else if(key == 2){ OSTaskResume(LED1_TASK_PRIO); OSTaskResume(LED2_TASK_PRIO); POINT_COLOR=RED; LCD_ShowString(30,170,200,16,16,"TASK2"); } OSTimeDlyHMSM(0,0,0,10); }} //LCD显示任务void lcd_task(void *pdata){ while(1){// LCD_Clear(WHITE);POINT_COLOR=RED; LCD_ShowString(30,130,200,16,16,"yys_ucos"); OSTimeDlyHMSM(0,0,0,10); }} |
|
相关推荐
5个回答
|
|
|
就是四个任务同时工作,两个小灯,LCD显示,以及按键
|
|
|
|
|
|
一进去就是白屏,然后过了几秒才运行四个任务
|
|
|
|
|
|
是的啊
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
1018 浏览 1 评论
1849 浏览 0 评论
1830 浏览 1 评论
3254 浏览 5 评论
3581 浏览 9 评论
1021浏览 1评论
1850浏览 1评论
如何知道嵌入式电子控制单元 (ECU) 中的RAM使用情况?
1360浏览 1评论
1852浏览 0评论
1178浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 03:21 , Processed in 1.578316 second(s), Total 82, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1525