FreeRTOS 学习笔记 1

之所以要学习 FreeRTOS,不是因为它多么出众,仅仅是因为公司要做的项目使用的芯片上有它,而我是后参与进来的,之前就听到前面的人说这部分比较难,所以就来学一下,免得做项目的时候抓瞎,所以我现在也不知道他到底难不难,完全没 Feel 。

Ps:对于前人的指教还是比较信任的。。。反正总不会害我。。。

这一次也要开始使用 Keil,以前一直用的是 IAR,熟悉一下应该也没有问题。。。

本人英语不是很好,幸好 Zou Changjun 前辈翻译了中文版,感谢 Zou Changjun 前辈。。。

桌面电脑的输入处理可以归类为”软实时”。为了保证用户的最佳体验,计算机对每个输入的响应应当限定在一个恰当的时间范围——但是如果响应时间超出了限定范围,并不会让人觉得这台电脑无法使用。比如说,键盘操作必须在键按下后的某个时间内作出明显的提示。但如果按键提示超出了这个时间,会使得这个系统看起来响应太慢,而不致于说这台电脑不能使用。

硬实时功能必须在给定的时间限制之内完成——如果无法做到即意味着整个系统的绝对失败。汽车的安全气囊触发机制就是一个硬实时功能的例子。安全气囊在撞击发生后给定时间限制内必须弹出。如果响应时间超出了这个时间限制,会使得驾驶员受到伤害,而这原本是可以避免的。

大多数嵌入式系统不仅能满足硬实时要求,也能满足软实时要求。

Ps:第一次听说软实时和硬实时,以前真么接触过。。。以前连操作系统都没接触过,唯一接触过的是 CC2541 的 OSAL。。。

FreeRTOS 任务不允许以任何方式从实现函数中返回——它们绝不能有一条”return”语句,也不能执行到函数末尾。如果一个任务不再需要,可以显式地将其删除。这也在程序清单2 展现。

一个任务函数可以用来创建若干个任务——创建出的任务均是独立的执行实例,拥有属于自己的栈空间,以及属于自己的自动变量(栈变量),即任务函数本身定义的变量。

void ATaskFunction( void *pvParameters )
{
/* 可以像普通函数一样定义变量。用这个函数创建的每个任务实例都有一个属于自己的iVarialbleExample变量。但如果iVariableExample被定义为static,这一点则不成立 – 这种情况下只存在一个变量,所有的任务实例将会共享这个变量。 */
int iVariableExample = 0;
/* 任务通常实现在一个死循环中。 */
for( ;; )
{
/* 完成任务功能的代码将放在这里。 */
}
/* 如果任务的具体实现会跳出上面的死循环,则此任务必须在函数运行完之前删除。传入NULL参数表示删除的是当前任务 */
vTaskDelete( NULL );
}
                                                 <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">程序清单2 典型的任务函数结构</span>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-05 16:03:54

FreeRTOS 学习笔记 1的相关文章

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

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

FreeRTOS学习笔记2

FreeRTOS函数原型解析: portBASE_TYPE xTaskCreate( pdTASK_CODE pvTaskCode, const signed portCHAR * const pcName,              unsigned portSHORT usStackDepth,              void *pvParameters,              unsigned portBASE_TYPE uxPriority,.              xTas

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 学习笔记 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