TI-RTOS 控制LED灯
TI将FreeRtos放在自家芯片上,于是得到了TI-RTOS,两者的区别我还不太清楚,近日因为项目需要,开始试用TI-RTOS,先来一个点灯的实验吧,算是 hello world.
这次手上的板子是 CC1310 LaunchPad Rev 1.3, 上面有两个灯,两个按键,照常理先调灯的驱动会更简单些。打算做成一个灯亮,一个灯1秒闪一次。
这样的功能一般是和定时器,IO打交道,不过在os上,定时可以暂时用task_sleep来代替,好在TI-RTOS默认启用这个模块的,用起来相当方便。
IO的驱动是写好的,找到API名称就能用了。代码如下:
/**************************************************************************************************
Filename: ledTask.c
Editor: Tome @ newbit
Revised: $Date: 2016-8-10 11:20:02 +0800 $
Revision: $Revision: 00001 $
Description: 了解 TI-RTOS的使用之,GPIO控制, 任务休眠
History:
Notes: 要了解到这部分的接口,可阅读TI文档
1. TI-RTOS 2.20 User's Guide.pdf
2. Bios User Guide.pdf
硬件平台 CC1130_LAUNCHPAD Rev1.3
**************************************************************************************************/
/**************************************************************************************************
// INCLUDES
**************************************************************************************************/
/* XDCtools Header files */
#include <xdc/std.h>
#include <xdc/runtime/System.h>
/* BIOS Header files */
#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/knl/Task.h>
/* TI-RTOS Header files */
#include <ti/drivers/PIN.h>
#include "Board.h"
/**************************************************************************************************
// TYPEDEF
**************************************************************************************************/
/**************************************************************************************************
// CONSTANTS
**************************************************************************************************/
#define TASKSTACKSIZE 768
/**************************************************************************************************
// LOCAL VERIABLE
**************************************************************************************************/
Task_Struct ledTaskStruct;
Char ledTaskStack[TASKSTACKSIZE]; // 本任务的栈空间,静态分配
/* Global memory storage for a PIN_Config table */
static PIN_State ledPinState;
/*
* Application LED pin configuration table:
* - All LEDs board LEDs are off.
*/
PIN_Config ledPinTable[] = {
Board_LED1 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
Board_LED2 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
PIN_TERMINATE
};
/**************************************************************************************************
// FUNCTIONS DECLERATION
**************************************************************************************************/
Void ledFxn(UArg arg0, UArg arg1);
/**************************************************************************************************
// FUNCTIONS
**************************************************************************************************/
/**************************************************************************************************
* @fn ledTaskAdd
*
* @brief
*
* @param void
*
* @return void
**************************************************************************************************/
void ledTaskAdd(void)
{
Task_Params taskParams;
/* Construct BIOS objects */
Task_Params_init(&taskParams); // 创建任务所要的参数,都设置为默认值
taskParams.stackSize = TASKSTACKSIZE; // 栈空间
taskParams.stack = &ledTaskStack; // 栈地址
// 向bios 传递参数,建立控制灯的任务
Task_construct(&ledTaskStruct, (Task_FuncPtr)ledFxn, &taskParams, NULL);
}
/*
* ======== ledFxn ========
* Task for this function is created statically. See ledTaskADD().
*/
Void ledFxn(UArg arg0, UArg arg1)
{
PIN_Handle ledPinHandle;
uint_t ledState;
// 这里不是为了初始化,而是为了拿到操作的句柄 (handle)
// 函数说明:Allocate one or more pins for a driver or an application.
ledPinHandle = PIN_open(&ledPinState, ledPinTable);
if(!ledPinHandle) {
System_abort("Error initializing board LED pins\n");
}
// 点亮第一个LED灯
PIN_setOutputValue(ledPinHandle, Board_LED1, 1);
while(1)
{
// 读LED 灯的状态,再设置为相反的状态
ledState = PIN_getOutputValue(Board_LED2);
ledState = !ledState;
// 设置的操作需要 handle
PIN_setOutputValue(ledPinHandle, Board_LED2, ledState);
// 任务休眠 1 秒, 1000000us, 下面函数的单位是10us
Task_sleep(100000);
}
}
/**************************************************************************************************
Copyright 2016 Newbit Studio. All rights reserved.
**************************************************************************************************/
TI-RTOS 控制LED灯的更多相关文章
- BLE 安卓APP控制LED灯的实现(转)
源:BLE 安卓APP控制LED灯的实现 //注:参考AmoMcu源代码修改. 打开APP,检查蓝牙是否打开 BluetoothAdapter mBluetoothAdapter; final Blu ...
- 嵌入式Linux学习入门:控制LED灯
记录自己linux学习过程,让自己能够一直坚持下去 1.原理图分析: nLED_1, nLED_2, nLED_4, 给低电平则对应LED灯亮,高电平则对应LED灯灭, S3C2440芯片GPF4-G ...
- arduino 红外遥控器控制LED灯
/* 日期:2016.9.1 功能:红外遥控器控制LED灯 开,关,闪烁,呼吸 元件: 跳线公公头 * 5 led 220欧电阻 红外接收管,红外遥控 接线: 红外灯面向自己从左到右分别接 IO3 , ...
- arduino入门学习实现语音控制LED灯
需要的准备的硬件arduino+PC+麦克风实现语音命令控制LED灯的亮灭. 首先需要将写好的arduino程序烧录到arduino uno主板中,下面是代码如下: int val;//定义变量val ...
- C#与Arduino通过串口通信来控制LED灯的状态
一.引言 最近摆弄了一段时间的Arduino,发现Arduino做一些电子类项目.监控.机器人.电子玩具比较容易,并且Arduino与.NET程序集成也不难.接下来介绍一个简单的小程序,C#做的一个W ...
- enc28J60 网页控制LED灯
软件IDE:Arduino 1.6.3 1.库的安装: 从https://github.com/jcw/ethercard 下载源码包,解压,复制ethercard-master文件夹到Arduino ...
- 云中树莓派(4):利用声音传感器控制Led灯
云中树莓派(1):环境准备 云中树莓派(2):将传感器数据上传到AWS IoT 并利用Kibana进行展示 云中树莓派(3):通过 AWS IoT 控制树莓派上的Led 云中树莓派(4):利用声音传感 ...
- 树莓派开机运行Python脚本 控制LED灯闪烁
一.新建一个开机运行文件 在 /home/pi/.config 下创建一个文件夹,名称为 autostart,并在该文件夹下创建一个led.desktop文件(文件名以.desktop结尾) 编辑le ...
- Arduino控制LED灯(开关控制)
问题:当使用"digitalRead(BUT) == 1"控制LED灯时会出现"digitalWrite(LED, ledState);"的值出现跳动. 原因: ...
随机推荐
- ArcGIS 网络分析[8.2] 资料2 使用IDatasetContainer2接口的CreateDataset方法创建网络数据集
上节提及如何使用IDatasetContainer2接口访问到网络数据集,上例可以封装为一个方法. 这节就使用IDatasetContainer2接口(Geodatabase类库)的CreateDat ...
- lesson - 9 课程笔记
一. yum 作用: yum 命令是在Fedora 和RedHat 以及SUSE 中基于rpm 的软件包管理器,它可以使系统管理人员交互和自动 ...
- Nginx (二) Nginx的反向代理负载均衡以及日志切割
Nginx是一个高并发,高性能的服务器,可以进行反向代理以及网站的负载均衡.这些功能的运用都在配置文件中,也就是Nginx安装目录下的conf/nginx.conf. nginx.conf 1. 先来 ...
- CKEditor 集成CKFinder集成
lCKEditor原名FckEditor,著名的HTML编辑器,可以在线编辑HTML内容,演示一下.打开.自己人用CKEditor,网友用UBBEditor. l配置参考文档,主要将ckeditor中 ...
- 10 Easy Steps to a Complete Understanding of SQL
原文出处:http://tech.pro/tutorial/1555/10-easy-steps-to-a-complete-understanding-of-sql(已经失效,现在收集如下) Too ...
- 编译TensorFlow源码
编译TensorFlow源码 参考: https://www.tensorflow.org/install/install_sources https://github.com/tensorflo ...
- Webpack 2 视频教程 016 - Webpack 2 中生成 SourceMaps
原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...
- LindDotNetCore~入门基础
回到目录 LindDotNetCore基础介绍 运行环境 配置文件 服务的注册 配置文件的注册 服务的使用 配置文件的使用 运行环境 vs2017+.netcore2.0,vs需要升级到最新包 配置文 ...
- jQuery 文档操作方法 (四)
方法 描述 addClass() 向匹配的元素添加指定的类名. after() 在匹配的元素之后插入内容. append() 向匹配元素集合中的每个元素结尾插入由参数指定的内容. appendTo() ...
- 七行代码开始flask
前言: 对于现有的企业接口服务实现方式来说,Java比较适用于大型的并发式的业务场景:而对一些低IO的且功能简单的数据接口来说,Python似乎更合适.近几年流行的Flask可以说是专为接口式开发而生 ...