【iCore4 双核心板_uC/OS-II】例程四:软件定时器
一、实验说明:
一些应用程序执行它们的任务时需要延迟一段特定的时间,因此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(); //串口初始化
- 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*), //任务参数
- (OS_STK*)&START_TASK_STK[START_STK_SIZE-], //任务堆栈
- 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*),(OS_STK*)&TIMER_TASK_STK[TIMER_STK_SIZE-],TIMER_TASK_PRIO);//创建LED0任务
- OSTaskCreate(usart_task,(void*),(OS_STK*)&USART_TASK_STK[USART_STK_SIZE-],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 = ;
- /*
- LED_XX_ON 点亮相应LED
- LED_XX_OFF 熄灭相应LED
- 三色LED交替闪烁*/
- if(counter % == ){
- LED_RED_ON;
- LED_GREEN_OFF;
- LED_BLUE_OFF;
- }else if(counter % == ){
- LED_RED_OFF;
- LED_GREEN_ON;
- LED_BLUE_OFF;
- }else if(counter % == ){
- 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(,,OS_TMR_OPT_PERIODIC,(OS_TMR_CALLBACK)TmrCallback,,(INT8U *)"soft_timer",&err);//100ms执行一次
- OSTmrStart(soft_timer,&err);//启动软件定时器
- while(){
- OSTimeDlyHMSM(,,,);//延时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(){
- f+=0.1f; //浮点型运算
- usart6.printf("float f=%.4f\r\n",f); //串口输出
- OSTimeDlyHMSM(,,,); //延时500ms
- }
- }
iCore4链接:
【iCore4 双核心板_uC/OS-II】例程四:软件定时器的更多相关文章
- 【iCore4 双核心板_uC/OS-II】例程二:任务的建立与删除
一.实验说明: 本例程建立三个任务,通过任务寄存器来实现任务的建立与删除功能.红灯和绿灯同时以固定 频率闪烁,当任务寄存器为5时,删除绿灯闪烁的任务LED1,此时只有红灯闪烁,当任务寄存器的 值为10 ...
- 【iCore4 双核心板_uC/OS-II】例程十一:内存管理
一.实验说明: 应用程序在运行中为了某种特殊需要,经常需要临时获得一些内存空间.而作为比较完善的操作系统uC/OS-II,也具有动态分配内存的能力. uC/OS-II对内存进行两级管理:把连续内存分成 ...
- 【iCore4 双核心板_uC/OS-II】例程十:信号量集
一.实验说明: 在实际应用中,任务常常需要与多个事件同步,即要根据多个信号量组合作用的结果来决定任务的运行方式.UCOSII为了实现多个信号量组合的功能定义了一种特殊的数据结构——信号量集. 二.实验 ...
- 【iCore4 双核心板_uC/OS-II】例程九:消息队列
一.实验说明: 前面介绍通过信息传递可以进行任务间的交流,信息也可以直接发送给一个任务,在uC/OS-II中每一个任务在它们内部都有一个消息队列,也即任务消息队列,用户可以直接给一个任务发送消息,不需 ...
- 【iCore4 双核心板_uC/OS-II】例程八:消息邮箱
一.实验说明: 消息邮箱是uC/OS-II中的另一种通信机制,可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量.通常该指针指向一个包含了“消息”的特定数据结构. 二.实验截图: ...
- 【iCore4 双核心板_uC/OS-II】例程七:互斥信号量
一.实验说明: 在介绍互斥信号量前,我们先简单地描述一下什么是优先级反转.使用实时内核心,优先级反转问题是实时系统中出现得最多的问题.假设任务H优先级高于任务M,任务M优先级高于任务L.任务H和任务M ...
- 【iCore4 双核心板_uC/OS-II】例程六:信号量——任务同步
一.实验说明: 信号量是一个多任务内核提出的一个协议机构,上一个实验中我们介绍了信号量访问共享资源 的功能,其实信号量最初是用来控制访问共享资源的,它还可以用来同步一个中断服务函数和一个任 务,或者同 ...
- 【iCore4 双核心板_uC/OS-II】例程五:信号量——共享资源
一.实验说明: 信号量是操作系统中的一类事件,是实现任务间通信的一个中间环节.当系统中的多个任务 在运行时,经常需要互相无冲突地访问同一个资源,或者需要互相支持的依赖,甚至有时还要互 相加以必要的限制 ...
- 【iCore4 双核心板_uC/OS-II】例程三:任务的挂起与恢复
一.实验说明: 当一个任务正在运行的时候,由于某种情况可能需要终止运行一段时间,终止的这段时间就是 所谓的任务的挂起,可以由该任务自身或者其他任务来挂起一个任务.当被挂起的任务需要再次运 行的时候,可 ...
随机推荐
- 洛谷P2569 股票交易
题目传送门https://www.luogu.org/problemnew/show/P2569 第一眼看题就觉得是个dp ,然后看到2000的范围,hmm大概是个n^2的2维dp 开始设状态,第一维 ...
- JavaScript基础笔记(十四)最佳实践
最佳实践 一)松散耦合 1.解耦HTML/JavaScript: 1)避免html种使用js 2)避免js种创建html 2.解耦CSS/JS 操作类 3.解耦应用逻辑和事件处理 以下是要牢记的应用和 ...
- [Codeforces113C]Double Happiness(数论)
题意 给定闭区间[l,r] [l,r] [l,r],找出区间内满足t=a2+b2 t=a^{2}+b^{2} t=a2+b2的所有素数t t t的个数( a,b a,b a,b为任意正整数). 思路 ...
- svn window下过滤文件(如配置文件等)
第一种: 在资源管理器中,右键一个未加入版本控制文件或目录,并从弹出菜单选择TortoiseSVN →Add to Ignore List,会出现一个子菜单,允许你仅选择该文件或者所有具有相同后缀的文 ...
- 基于WebSocket实现聊天室(Node)
基于WebSocket实现聊天室(Node) WebSocket是基于TCP的长连接通信协议,服务端可以主动向前端传递数据,相比比AJAX轮询服务器,WebSocket采用监听的方式,减轻了服务器压力 ...
- Ruby语法基础(一)
Ruby语法基础(一) Ruby是一种开源的面向对象程序设计的服务器端脚本语言,最初由松本行弘(Matz)设计开发,追求『快乐和生产力』,程序员友好型,被称为『human-oriented langu ...
- 模板-gcd
GCD int gcd(int a, int b) { return b == 0 ? a : gcd(b, a%b); } EXGCD void ex_gcd(int a, int b, int & ...
- 安装pytorch0.4.0
参考了官网https://pytorch.org/previous-versions/中的说明 (jj1env) [ji@dev down_python0.4.0]$ pip install http ...
- web的几种轮播
我们在开发当中经常用到轮播.我在这里总结了一下几种,仅供参考: 第一种: 1.jQuery:用display :none/block控制的一种轮播: // CSS部分 #igs { margin: 3 ...
- 20、collections模块和re模块(正则表达式详解)
从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来 ...