CC2640R2F&TI-RTOS 创建 一个任务 和 使用 信号量 超时来闪烁 LED灯

/*
 * data_process.c
 *
 *  Created on: 2018年7月5日
 *      Author: admin
 */

#include <ti/sysbios/knl/Task.h>
#include <ti/sysbios/knl/Clock.h>
#include <ti/sysbios/knl/Event.h>
#include <ti/sysbios/knl/Queue.h>
#include <ti/sysbios/knl/Semaphore.h>

#include "board_led.h"
#include "board_uart.h"

#include <ti/drivers/dpl/SemaphoreP.h>

#include "data_process.h"

// Task configuration
#define LF_TASK_PRIORITY      1
#define LF_TASK_STACK_SIZE   256

// Task configuration
Task_Struct lfTask;
Char lfTaskStack[LF_TASK_STACK_SIZE];

Semaphore_Handle semLedFicker;

/*********************************************************************
 * @fn      LedFicker_createTask
 *
 * @brief   Task creation function for the led ficker.
 *
 * @param   None.
 *
 * @return  None.
 */
void LedFicker_createTask(void)
{
  Task_Params taskParams;

  // Configure task
  Task_Params_init(&taskParams);
  taskParams.stack = lfTaskStack;
  taskParams.stackSize = LF_TASK_STACK_SIZE;
  taskParams.priority  = LF_TASK_PRIORITY;

  Task_construct(&lfTask, LedFicker_taskFxn, &taskParams, NULL);
}

/*********************************************************************
 * @fn      LedFicker_taskFxn
 *
 * @brief   Application task entry point for the Led Ficker.
 *
 * @param   a0, a1 - not used.
 *
 * @return  None.
 */
static void LedFicker_taskFxn(UArg a0, UArg a1)
{
    Semaphore_Params semLedFickerParams;

    uint32_t timeoutInTicks = 1000 * (1000/Clock_tickPeriod);

    Semaphore_Params_init(&semLedFickerParams);
    semLedFicker = Semaphore_create(0, &semLedFickerParams, NULL); /* Memory allocated in here */

    if (semLedFicker == NULL) /* Check if the handle is valid */
    {
        bspDebugPrintf( true,"semLedFicker could not be created.\r\n");
    }
    else
    {

        bspDebugPrintf( true,"semLedFicker be created.\r\n");
    }

    // Application main loop
    for (;;)
    {

        Semaphore_pend(semLedFicker, timeoutInTicks);

        //翻转LED灯
        ledBoardToggle( ledBlueBoard );
        ledBoardToggle( ledRedBoard );
    }
}
/*
 * data_process.h
 *
 *  Created on: 2018年7月5日
 *      Author: admin
 */

#ifndef APPLICATION_DATA_PROCESS_H_
#define APPLICATION_DATA_PROCESS_H_

void LedFicker_createTask(void);

static void LedFicker_taskFxn(UArg a0, UArg a1);

#endif /* APPLICATION_DATA_PROCESS_H_ */

 需要 吐槽的 是 我居然 没有 找到  系统 延时函数 ,所以采用  信号量超时 来 作为  LED 延时!

官方教程链接

原文地址:https://www.cnblogs.com/suozhang/p/9268449.html

时间: 2024-10-11 22:42:09

CC2640R2F&TI-RTOS 创建 一个任务 和 使用 信号量 超时来闪烁 LED灯的相关文章

分析Linux内核创建一个新进程的过程【转】

转自:http://www.cnblogs.com/MarkWoo/p/4420588.html 前言说明 本篇为网易云课堂Linux内核分析课程的第六周作业,本次作业我们将具体来分析fork系统调用,来分析Linux内核创建新进程的过程 关键词:fork, 系统调用,进程 *运行环境:** Ubuntu 14.04 LTS x64 gcc 4.9.2 gdb 7.8 vim 7.4 with vundle 分析 分析方法说明 PCB包含了一个进程的重要运行信息,所以我们将围绕在创建一个新进程时

第六周分析Linux内核创建一个新进程的过程

潘恒 原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 task_struct结构: struct task_struct {   volatile long state;进程状态  void *stack; 堆栈  pid_t pid; 进程标识符  unsigned int rt_priority;实时优先级  unsigned int policy;调度策略  struct files

Linux内核创建一个新进程的过程

进程在创建它的时刻开始存活.在Linux系统中,这通常是fork()系统的结果,该系统调用通过复制一个现有的进程来创建一个全新的进程.只有在创建init进程时,是通过代码实现数据结构的填充.调用fork()的进程称为父进程,新生的进程称为子进程.在系统调用结束时,在返回点这个相同位置上,父进程恢复执行,子进程开始执行.fork()系统调用从内核两次返回:一次回到父进程,另一次回到创建的新的子进程. 进程的描述符--task_struct (下面是中英文大体注释) volatile long st

实验六———分析Linux内核创建一个新进程的过程

分析Linux内核创建一个新进程的过程 攥写人:李鹏举  学号:20132201 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ) 本周要求: 阅读理解task_struct数据结构http://codelab.shiyanlou.com/xref/linux-3.18.6/include/linux/sched.h#1235: 分析fork函数对应的内核处理过

lab6:分析Linux内核创建一个新进程的过程

李俊锋 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验原理 1.进程的定义 进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就创建了一个进程,在这个过程中,伴随着资源的分配和释放.可以认为进程是一个程序的一次执行过程. 2.进程与程序的区别 程序时静态的,它是一些保存 在磁盘上得指令的有序集合,没有任何执行的概念. 进程是一个动态的概念,它是程序执行的过程

《Linux内核分析》 第六节 分析Linux内核创建一个新进程的过程

范闻泽 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验过程 1.删除原来的menu,并clone新的menu,用test_fork.c覆盖test.c 2. make rootfs之后新的内核启动,测试fork功能 3.使用-s -S冷冻内核,准备调试 4.设置断点 5.根据断点,进行跟踪,得到结果 1.以下是执行指令 cd LinuxKernel rm menu -r

实验六分析Linux内核创建一个新进程的过程

王康 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1,进程的描述 操作系统三大功能:进程管理(核心),内存管理,文件系统 1,进程控制块PCB--task_struct 也叫进程描述符,为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. struct task_struct数据结构很庞大:可以看到state进程状态,stack内核堆栈,

「六」创建一个带 weblogic 服务的基础镜像

Weblogic Weblogic 简介以及其在 Docker 环境下的特殊应用 WebLogic是美国Oracle公司出品的一个application server确切的说是一个基于JAVAEE架构的中间件,BEA WebLogic是用于开发.集成.部署和管理大型分布式Web应用.网络应用和数据库应用的Java应用服务器.是商业市场上主要的Java(J2EE)应用服务器软件(application server)之一,是世界上第一个成功商业化的J2EE应用服务器.目前weblogic在世界ap

Linux内核分析-分析Linux内核创建一个新进程的过程

作者:江军 ID:fuchen1994 实验题目:分析Linux内核创建一个新进程的过程 阅读理解task_struct数据结构http://codelab.shiyanlou.com/xref/linux-3.18.6/include/linux/sched.h#1235: 分析fork函数对应的内核处理过程sys_clone,理解创建一个新进程如何创建和修改task_struct数据结构: 使用gdb跟踪分析一个fork系统调用内核处理函数sys_clone ,验证您对Linux系统创建一个