【iCore4 双核心板_uC/OS-II】例程四:软件定时器
2018-02-02 08:59
399 查看
一、实验说明:
一些应用程序执行它们的任务时需要延迟一段特定的时间,因此uC/OS-II为我们提供了一些相应的
延时函数,本例程我们使用软件定时器定时500ms点亮相应的LED实现三色LED循环闪烁。
二、实验截图:
三、源代码下载链接:
链接:https://pan.baidu.com/s/1kWFhoXp 密码:xuc7
四、核心代码:
iCore4链接:
一些应用程序执行它们的任务时需要延迟一段特定的时间,因此uC/OS-II为我们提供了一些相应的
延时函数,本例程我们使用软件定时器定时500ms点亮相应的LED实现三色LED循环闪烁。
二、实验截图:
三、源代码下载链接:
链接:https://pan.baidu.com/s/1kWFhoXp 密码:xuc7
四、核心代码:
/* * Name : main * Description : --- * Author : zh. * * History * -------------------- * Rev : 0.00 * Date : 07/12/2017 * * create. * -------------------- */ /*实验现象: 红绿蓝三色灯循环定时点亮。 */ int main(void) { system_clock.initialize(); //系统时钟初始化 led.initialize(); //LED初始化 usart6.initialize(115200); //串口初始化 usart6.printf("\x0c"); //清屏 usart6.printf("\033[1;32;40m"); //设置字体终端为绿色 usart6.printf("\r\nHello, I am iCore4!\r\n\r\n"); OSInit(); //UCOS初始化 OSTaskCreate(start_task, //创建开始任务 (void*)0, //任务参数 (OS_STK*)&START_TASK_STK[START_STK_SIZE-1], //任务堆栈 START_TASK_PRIO); //任务优先级 OSStart(); //开启UCOS }
/* * Name : start_task * Description : --- * Author : liu. * * History * -------------------- * Rev : 0.00 * Date : 07/12/2017 * * create. * -------------------- */ void start_task(void *pdata) { OS_CPU_SR cpu_sr; OSStatInit();//初始化统计任务 OS_ENTER_CRITICAL();//关中断 OSTaskCreate(timer_task,(void*)0,(OS_STK*)&TIMER_TASK_STK[TIMER_STK_SIZE-1],TIMER_TASK_PRIO);//创建LED0任务 OSTaskCreate(usart_task,(void*)0,(OS_STK*)&USART_TASK_STK[USART_STK_SIZE-1],USART_TASK_PRIO);//创建usart任务 OSTaskSuspend(OS_PRIO_SELF);//挂起start_task任务 OS_EXIT_CRITICAL();//开中断 }
/* * Name : led0_task * Description : --- * Author : liu. * * History * -------------------- * Rev : 0.00 * Date : 07/12/2017 * * create. * -------------------- */ void TmrCallback(OS_TMR *ptmr,void *p_arg) { static int counter = 0; /* LED_XX_ON 点亮相应LED LED_XX_OFF 熄灭相应LED 三色LED交替闪烁*/ if(counter % 3 == 0){ LED_RED_ON; LED_GREEN_OFF; LED_BLUE_OFF; }else if(counter % 3 == 1){ LED_RED_OFF; LED_GREEN_ON; LED_BLUE_OFF; }else if(counter % 3 == 2){ LED_RED_OFF; LED_GREEN_OFF; LED_BLUE_ON; } counter ++; }
/* * Name : led0_task * Description : --- * Author : liu. * * History * -------------------- * Rev : 0.00 * Date : 07/12/2017 * * create. * -------------------- */ void timer_task(void *pdata) { INT8U err; OS_TMR * soft_timer;//软件定时器 soft_timer = OSTmrCreate(10,10,OS_TMR_OPT_PERIODIC,(OS_TMR_CALLBACK)TmrCallback,0,(INT8U *)"soft_timer",&err);//100ms执行一次 OSTmrStart(soft_timer,&err);//启动软件定时器 while(1){ OSTimeDlyHMSM(0,0,0,500);//延时500ms } } /* * Name : usart_task * Description : --- * Author : liu. * * History * -------------------- * Rev : 0.00 * Date : 07/12/2017 * * create. * -------------------- */ void usart_task(void *pdata) { double f=0.1; while(1){ f+=0.1f; //浮点型运算 usart6.printf("float f=%.4f\r\n",f); //串口输出 OSTimeDlyHMSM(0,0,0,500); //延时500ms } }
iCore4链接:
相关文章推荐
- 【iCore3 双核心板_ uC/OS-III】例程五:软件定时器
- 【iCore4 双核心板_uC/OS-II】例程八:消息邮箱
- 【iCore4 双核心板_uC/OS-II】例程九:消息队列
- 【iCore4 双核心板_uC/OS-II】例程三:任务的挂起与恢复
- 【iCore4 双核心板_uC/OS-II】例程一:认识 uC/OS-II
- 【iCore4 双核心板_uC/OS-II】例程十:信号量集
- 【iCore4 双核心板_uC/OS-II】例程七:互斥信号量
- 【iCore4 双核心板_uC/OS-II】例程十一:内存管理
- 【iCore4 双核心板_uC/OS-II】例程二:任务的建立与删除
- 【iCore4 双核心板_uC/OS-II】例程五:信号量——共享资源
- 【iCore4 双核心板_uC/OS-II】例程六:信号量——任务同步
- 【iCore3 双核心板_ uC/OS-III】例程十:消息队列
- 【iCore3 双核心板_ uC/OS-III】例程四:时间管理
- 【iCore4 双核心板_ARM】例程八:定时器PWM实验——呼吸灯
- 【iCore3 双核心板_ uC/OS-III】例程八:互斥信号量
- 【iCore3 双核心板_ uC/OS-III】例程七:信号量——任务同步
- uc/OS II移植中软件中断的理解与应用
- 【iCore3 双核心板_ uC/OS-III】例程十一:任务消息队列
- 【iCore3 双核心板_ uC/OS-III】例程二:任务的建立与删除
- uc/OS II移植中软件中断的理解