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灯的更多相关文章

  1. BLE 安卓APP控制LED灯的实现(转)

    源:BLE 安卓APP控制LED灯的实现 //注:参考AmoMcu源代码修改. 打开APP,检查蓝牙是否打开 BluetoothAdapter mBluetoothAdapter; final Blu ...

  2. 嵌入式Linux学习入门:控制LED灯

    记录自己linux学习过程,让自己能够一直坚持下去 1.原理图分析: nLED_1, nLED_2, nLED_4, 给低电平则对应LED灯亮,高电平则对应LED灯灭, S3C2440芯片GPF4-G ...

  3. arduino 红外遥控器控制LED灯

    /* 日期:2016.9.1 功能:红外遥控器控制LED灯 开,关,闪烁,呼吸 元件: 跳线公公头 * 5 led 220欧电阻 红外接收管,红外遥控 接线: 红外灯面向自己从左到右分别接 IO3 , ...

  4. arduino入门学习实现语音控制LED灯

    需要的准备的硬件arduino+PC+麦克风实现语音命令控制LED灯的亮灭. 首先需要将写好的arduino程序烧录到arduino uno主板中,下面是代码如下: int val;//定义变量val ...

  5. C#与Arduino通过串口通信来控制LED灯的状态

    一.引言 最近摆弄了一段时间的Arduino,发现Arduino做一些电子类项目.监控.机器人.电子玩具比较容易,并且Arduino与.NET程序集成也不难.接下来介绍一个简单的小程序,C#做的一个W ...

  6. enc28J60 网页控制LED灯

    软件IDE:Arduino 1.6.3 1.库的安装: 从https://github.com/jcw/ethercard 下载源码包,解压,复制ethercard-master文件夹到Arduino ...

  7. 云中树莓派(4):利用声音传感器控制Led灯

    云中树莓派(1):环境准备 云中树莓派(2):将传感器数据上传到AWS IoT 并利用Kibana进行展示 云中树莓派(3):通过 AWS IoT 控制树莓派上的Led 云中树莓派(4):利用声音传感 ...

  8. 树莓派开机运行Python脚本 控制LED灯闪烁

    一.新建一个开机运行文件 在 /home/pi/.config 下创建一个文件夹,名称为 autostart,并在该文件夹下创建一个led.desktop文件(文件名以.desktop结尾) 编辑le ...

  9. Arduino控制LED灯(开关控制)

    问题:当使用"digitalRead(BUT) == 1"控制LED灯时会出现"digitalWrite(LED, ledState);"的值出现跳动. 原因: ...

随机推荐

  1. 虚拟机创建流程中neutron代码分析(一)

    前言: 在openstack的学习当中有一说法就是网络占学习时间的百分之七十.这个说法或许有夸大的成分,但不可否认的是openstack中的 网络是及其重要的部分,并且难度也是相当大.试图通过nova ...

  2. WPF后台写ControlTemplate总结

    这段时间写ControlTemplate的时候发现绑定的时候有些问题需要总结: 实例ControlTemplate如下: <UserControl x:Class="ArcGISWpf ...

  3. 进程间通信 ipcs

    在linux系统上借助ipcs命令可以方便地查看进程间通信状态 操作系统:centos7.3 x86_64 应用软件: oracle12c

  4. python 中一些关键字的区别

    一.raw_input 和input input和raw_input都可以读取控制台的输入,但是input和raw_input在处理数字时是有区别的 1.当输入为纯数字时 input返回的是数值类型, ...

  5. VMware_ubuntu设置共享文件夹

    1. 点击安装VMware tools 2.将/media/vmtool的压缩包复制到/home/pc/vm_tool下,应为原路径在root权限下竟然也是只读的,并且无法更改. 3.进入/home/ ...

  6. 如何将外部的obj模型导入OpenGL

    1.关于obj的说明. obj中存放的是顶点坐标信息(v),面的信息(f),法线(vn),纹理坐标(vt),以及材质(这个放在mtl)中 我使用CINEMA 4D导出用VS查看后的信息: CINEMA ...

  7. JavaScript的DOM编程--02--获取元素节点

    如何来获取元素节点: 1) .document.getElementById: 根据 id 属性获取对应的单个节点 2) .document.getElementsByTagName: 根据标签名获取 ...

  8. ES6(三)数组的扩展

    1.Array.form ES6中,Array.from = function(items,mapfn,thisArg) {  }   Array.from 用于将 类数组 和 可遍历对象(实现了It ...

  9. Effective Java 第三版——15. 使类和成员的可访问性最小化

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  10. android inline hook

    最近终于沉下心来对着书把hook跟注入方面的代码敲了一遍,打算写几个博客把它们记录下来. 第一次介绍一下我感觉难度最大的inline hook,实现代码参考了腾讯GAD的游戏安全入门. inline ...