FreeRTOS学习笔记2

FreeRTOS函数原型解析:

portBASE_TYPE xTaskCreate(

              pdTASK_CODE pvTaskCode,

           const signed portCHAR * const pcName,

                        unsigned portSHORT usStackDepth,

                       void *pvParameters,

                       unsigned portBASE_TYPE uxPriority,、

                        xTaskHandle *pxCreatedTask );

参数名:pvTaskCode 实现函数的指针,无实际意义,和函数名类似。

参数名:pcName  调试时描述任务的别名,系统不会调用, 通过定义常量 config_MAX_TASK_NAME_LEN 来定义任务名的最大长度。

参数名:usStackDepth 在任务创建时所分配的空间,需注意这个值是表示 字(WORD)而不是字节(byte),如果是32位的栈空间,

传入的值为100。那么分配的 空间为400字节(100*4byte)。栈深度乘以栈宽度的结果千万不能超过一个size_t 类型变量所能表达的最大值。

应用程序通过定义常量configMINIMAL_STACK_SIZE 来决定空闲 任务任用的栈空间大小。这个值一般是所有任务的最小建议值。

参数名:pvParameters

参数名:uxPriority 指定任务执行的优先级。优先级的取值范围可以从最低优先级0 到 最高优先级(configMAX_PRIORITIES – 1)。 configMAX_PRIORITIES 由用户定义的常量。一般设置为最大任务数量即可。过大会产生内存浪费

参数名:pxCreatedTask 用于传出任务的句柄。这个句柄将在API 调用中对 该创建出来的任务进行引用,比如改变任务优先级,或者删除任务。 如果应用程序中不会用到这个任务的句柄,则pxCreatedTask 可以 被设为NULL。

返回值:任务有两个可能的返回值 pdTRUE 用于表明任务创建成功 errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY 由于内存堆空间不足,无法分配足够的空间保存任务结构数据和任务栈, 无法创建任务。

一个典型的任务函数:

void vTask1( void *pvParameters )

{

  const char *pcTaskName = "Task 1 is running\r\n";   volatile unsigned long ul;

  /* 和大多数任务一样,该任务处于一个死循环中。 */

  for( ;; )

  {

     /* Print out the name of this task. */

    vPrintString( pcTaskName );

    /* 延迟,以产生一个周期 */

    for( ul = 0; ul < mainDELAY_LOOP_COUNT; ul++ )

      {

        /* 这个空循环是最原始的延迟实现方式。在循环中不做任何事情。后面的示例程序将采用      delay/sleep函数代替这个原始空循环。 */

      }

    }

}

时间: 2024-08-07 21:18:51

FreeRTOS学习笔记2的相关文章

FreeRTOS学习笔记——二值型信号量

1.前言 在嵌入式操作系统中二值型信号量是任务间.任务与中断间同步的重要手段.FreeRTOS的二值型信号量简单易用,下面结合一个具体例子说明FreeRTOS中的二值型信号量如何使用. [相关博文] [FreeRTOS STM32移植笔记] [FreeRTOS学习笔记--任务间使用队列同步数据] [如何在FreeRTOS下实现低功耗--MSP430F5438平台] [代码链接]--示例代码存于百度网盘 2.特别说明         二值型信号量的使用方法见图1所示,二值型信号量可以理解为任务与中

FreeRTOS学习笔记4

FreeRTOS配置管理: 网上移植教程较多,也可以使用官方提供的各种Demo工程进行移植,不在详细介绍.本文主要介绍FreeRTOS移植成功后进行的配置方式.使其成为自己最匹配最精简,最适用的系统. FreeRTOSConfig.h几乎包含了所有需要的配置.下文讲述主要的几项配置: 包含INCLUDE_...的宏定义.所有这些宏都是条件编译所需的.可以根据自身需要进行定义.例如INCLUDE_xTaskAbortDelay是需要使用函数 xTaskAbortDelay()时定义为1.这样做的好

FreeRTOS学习笔记7-FreeRTOS 队列相关

在实际的应用中,常会遇到一个任务或者断服需要和另外进 在实际的应用中,常会遇到一个任务或者断服需要和另外进 行"沟通交流", 行"沟通交流", 行"沟通交流", 这个"沟通交流"的过程其实就是消息传递 这个"沟通交流"的过程其实就是消息传递 这个"沟通交流"的过程其实就是消息传递 这个"沟通交流"的过程其实就是消息传递 的过程.在 的过程.在 没有操作系统的时候两个应

FreeRTOS学习笔记5-静态方式创建任务函数

配置完成后的进行任务创建,使用静态方式创建任务时需要使将宏 configSUPPORT_STATIC_ALLOCATION设置为 1,即使用静态内存.还需要将函数 vApplicationGetIdleTaskMemory()和 ApplicationGetTimerTaskMemory()进行实现.通过这两个函数来给空闲任务 和定时器服的任务堆 栈和任务控制块分配内存.在maiinc.c中进行定义.定义静态的任务堆栈和任务控制块内存,然后将这些内存传递给函数参数.最后创建空闲任务和定时器任务的

FreeRTOS 学习笔记 1

之所以要学习 FreeRTOS,不是因为它多么出众,仅仅是因为公司要做的项目使用的芯片上有它,而我是后参与进来的,之前就听到前面的人说这部分比较难,所以就来学一下,免得做项目的时候抓瞎,所以我现在也不知道他到底难不难,完全没 Feel . Ps:对于前人的指教还是比较信任的...反正总不会害我... 这一次也要开始使用 Keil,以前一直用的是 IAR,熟悉一下应该也没有问题... 本人英语不是很好,幸好 Zou Changjun 前辈翻译了中文版,感谢 Zou Changjun 前辈... 桌

FreeRTOS 学习笔记 5 —— 调度算法.简述

优先级抢占式调度: 1. 每个任务都赋予了一个优先级. 2. 每个任务都可以存在于一个或多个状态. 3. 在任何时候都只有一个任务可以处于运行状态. 4. 调度器总是在所有处于就绪态的任务中选择具有最高优先级的任务来执行. 这种类型的调度方案被称为"固定优先级抢占式调度".所谓"固定优先级"是指每个任务都被赋予了一个优先级,这个优先级不能被内核本身改变(只能被任务修改)."抢占式"是指当任务进入就绪态或是优先级被改变时,如果处于运行态的任务优先级

LwIP学习笔记——STM32 ENC28J60移植与入门

0.前言 去年(2013年)的整理了LwIP相关代码,并在STM32上"裸奔"成功.一直没有时间深入整理,在这里借博文整理总结.LwIP的移植过程细节很多,博文也不可能一一详解个别部分只能点到为止. [本文要点] [1]不带操作系统的LwIP移植,LwIP版本为1.4.1. [2]MCU为STM32F103VE,网卡为ENC28J60. [3]移植过程重点描述ethernetif.c和LwIP宏配置等. [4]一个简单的TCP echo例子. [5]力求简单,没有DHCP功能,甚至没有

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu