只有招式和套路,没有为什么。

总共分为四个招式:

1. 创建两个文件

MyLedTask.h MyLedTask.c

2.实现两个函数:

void MyLedTask_Init(uint8 task_id);  //任务初始化 -主要是把任务ID传过去。其他的随意
uint16 MyLedTask_ProcessEvent( uint8 task_id, uint16 events );//事件循环

3. 将MyLedTask_ProcessEvent 函数名添加到 const pTaskEventHandlerFn tasksArr[] 数组末尾。

比如:

const pTaskEventHandlerFn tasksArr[] =
{LL_ProcessEvent,
//    Pulse_Measure_ProcessEvent,
//    GPIO_Wakeup_ProcessEvent,Key_ProcessEvent,MyLedTask_ProcessEvent,  //我在这儿
};

4. 在void osalInitTasks( void ) 中添加MyLedTask_Init()函数,把任务ID传过去。

比如:  (切记初始化的顺序要和taskArr数组顺序一致)

void osalInitTasks( void )
{uint8 taskID = 0;tasksEvents = (uint16*)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));LL_Init( taskID++); //LIB 初始化第0个任务  taskID=0/*Application*/
//  Pulse_Measure_Init(taskID);
//  GPIO_Wakeup_Init(taskID);Key_Demo_Init(taskID++); //初始化第1个任务  taskID=1MyLedTask_Init(taskID);  //我在这儿  最后一个任务就不用++了
}

--------这就可以了---------

源码:

MyLedTask.h

#ifndef __MY_LED_TASK_H__
#define __MY_LED_TASK_H__
#include "types.h"#define NO_TASK_ID           0xFF            //没有注册时的任务id
#define NO_EVEN_ID           0x0000          //没有注册时的事件id //事件ID 索引是按位的 0x0003就是两个事件了
#define MY_LED_STATUS_CYCLE      0x0001  //0001状态灯循环
#define MY_LED_RED_ON            0x0002  //0010红色LED灯亮
#define MY_LED_RED_OFF           0x0004  //0100红色LED灯灭extern uint8 MyLed_TaskID;void MyLedTask_Init(uint8 task_id);
uint16 MyLedTask_ProcessEvent( uint8 task_id, uint16 events );
#endif

MyLedTask.c

#include "OSAL.h"
#include "log.h"
#include "MyLedTask.h"//任务ID
uint8 MyLed_TaskID = NO_TASK_ID;  //NO_TASK_ID=0xFF 0XFF 没有正确设置任务ID,任务尚未初始化。void MyLedTask_Init(uint8 task_id)
{MyLed_TaskID=task_id;//led io的初始化 //启动一个自动装载的timer,超时1秒发送事件MY_LED_STATUS_CYCLE。osal_start_reload_timer(MyLed_TaskID, MY_LED_STATUS_CYCLE, 1000);
}uint16 MyLedTask_ProcessEvent( uint8 task_id, uint16 events )
{if(task_id != MyLed_TaskID) //ID不一致就直接退出{return 0;}   if( events & MY_LED_RED_OFF){//添加led控制LOG("MY_LED_RED_OFF\n");return (events ^ MY_LED_RED_OFF);}if( events & MY_LED_RED_ON){//添加led控制LOG("MY_LED_RED_ON\n");return (events ^ MY_LED_RED_ON);}if( events & MY_LED_STATUS_CYCLE){//led 状态灯的控制 一闪一闪的LOG("Led Status Run..\n");return (events ^ MY_LED_STATUS_CYCLE);}    return 0;
}

烧写程序,启动后,串口就会打印: Led Status Run..

如果想要控制 LED_RED呢?

osal_set_event(MyLed_TaskID,MY_LED_RED_ON); //灯亮

osal_set_event(MyLed_TaskID,MY_LED_RED_OFF);//灯灭

套路就是这些,剩下的就根据硬件设计,该怎么打就怎么打了。

OSAL 添加一个LED任务相关推荐

  1. CC2540 OSAL 学习其中原理,以及 给任务 添加 一个事件(定时发送串口消息)

    参考学习大神博客: http://blog.csdn.net/feilusia/article/details/51083953 : http://blog.csdn.net/xiaoleiacmer ...

  2. 如何删除选择框的所有选项,然后添加一个选项并使用jQuery选择它?

    本文翻译自:How do you remove all the options of a select box and then add one option and select it with j ...

  3. 从零点亮一个led灯

    Stm32学习笔记一:stm32cubemx和keil5从零开始点亮一个LED灯 一.软件材料准备:stm32cubemx和keil5软件(下载方式可自行上网搜,这里不再详细叙述) 二.硬件材料准备: ...

  4. 【蓝桥杯嵌入式主板G4】第三章 点亮一个LED

    第一节 硬件解读 任何一个实验都是从点亮一个LED开始的,本次将教大家如何用stm32cubeMX+MDK在蓝桥杯嵌入式主板上面点亮一个LED. 先看蓝桥杯嵌入式主板的原理图:从图中可以看出一共有8个 ...

  5. 51单片机入门教程(1)——点亮一个LED灯

    51单片机入门教程(1)--点亮一个LED灯 一.什么是单片机 单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU.随机存储器 ...

  6. 【STC8学习笔记】STC8A8K64S4A12 程序烧录及使一个LED闪烁

    将STC8芯片型号添加到keil中 新建keil工程选择对应的芯片 我这里已我的STC8A8K64S4A12芯片为例 编写程序一个LED闪烁的程序 #include <STC8.h>sbi ...

  7. linux添加一个nand设备,[教程]使用buildroot完全自定义自己的embedded linux系统(nand)...

    编译环境: ubuntu 12.04(x86_64) 目标环境: 1) linux-3.4内核 2) buildroot 2013-02 3)系统运行在nand上 固件制作步骤说明: 步骤一:创建自己 ...

  8. HT合泰单片机入门教程(第二章 点亮第一个LED灯)

    文章目录 系列文章目录 前言 一.新建工程 1.启动HT-IDE3000 2.建立工程 二.点亮LED灯 1.了解I/O 2.LED代码 总结 系列文章目录 第一章 HT单片机环境搭建 第二章 点亮第 ...

  9. PIC18F47Q10 Curiosity Nano Kit 点亮第一个 LED

    文章目录 1. 前言 2. 准备开发环境 2.1. 下载安装 MPLAB X IDE 2.2. 下载安装 MPLAB XC Compiler 2.3. 设置 MPLAB X IDE(添加编译工具) 2 ...

  10. 3.基础实验-实验01-点亮一个LED灯

    目录 3.1 实验01-点亮一个LED灯 3.1.1 STM32CubeMX软件配置 ​3.1.2 代码编写 3.1.3 编译与下载程序 3.1.4 查看实验结果 3.1 实验01-点亮一个LED灯 ...

最新文章

  1. AI,被“横扫记录”反噬?
  2. ubuntu安装virtualbox
  3. 框架:Hibernate和Mybatis的区别
  4. MySQL查看表占用空间大小
  5. 向量表示,投影,协方差矩阵,PCA
  6. 20120321java
  7. [2018.10.31 T3] 玩
  8. 【单片机原理及应用】第一篇——单片机概述
  9. redis和sqlserver数据同步_数据库和redis同步数据
  10. puppeteer实现网页截图
  11. 动手学深度学习day-two
  12. 最新 | Windows和信创终端都能顺滑使用宁盾802.1X账密认证了
  13. python win10 捕获 弹出窗口_[python爬虫] Selenium高级篇之窗口移动、弹出对话框自登录...
  14. iOS app 的开发要准备哪些图标图片?
  15. git常用操作以及码云Gitee连接git
  16. 在redhat8中安装ansible
  17. 【机器学习】--机器学习之朴素贝叶斯从初始到应用
  18. MySQL多表查询练习
  19. 计算机科学论文写作2-搜寻、阅读和引用文献
  20. 异常积累(SQLException)

热门文章

  1. 禁忌搜索算法-关键操作与原则
  2. K2高恪智能流控效果实测
  3. SM2算法和RSA算法简介
  4. 文本聚类算法 python_文本聚类算法之K-means算法的python实现
  5. UG NX 12 取消选择对象
  6. 如何使用Apple Watch控制Apple TV
  7. MySQL练习题 (练习表+题目+答案)
  8. socket编程之addrinfo结构体和getaddrinfo()
  9. 初识STM32F103
  10. 宋宝华: 文件读写(BIO)波澜壮阔的一生