IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> FreeRTOS概述与体验 -> 正文阅读

[嵌入式]FreeRTOS概述与体验

1.1. FreeRTOS目录结构

以Keil工具下的STM32F103芯片为例子,它的FreeRTOS的目录如下:

主要涉及两个目录:

  • Demo
    • Demo目录下是工程文件,以芯片和编译器组合成一个名字
    • 比如:CORTEX_STM32F103Keil
  • Source
    • 根目录下是核心文件,这些文件是通用的
    • portable目录下是移植时需要实现的文件
      • 目录名:[complier] /[architecture]
      • 比如:RVDS/ARM_CM3,这表示cortexM3架构在RVDS工具上的移植文件

1.2. 核心文件

FreeRTOS的最核心的文件只有两个:

  • FreeRTOS/Source/task.c
  • FreeRTOS/Source/list.c

其他文件的作用如下:

FreeRTOS/Source/下的文件作用

task.c

list.c

queue.c

timer.c

event_group.c

croutine.c

必需,任务操作

必需,列表

基本必需,提供队列操作、信号量(semaphore)操作

可选,software timer

可选,提供event_group功能

可选,过时了

1.3. 移植时涉及的文件

移植FreeRTOS时涉及的文件放在

FreeRTOS/Source/portable/[compiler]/[architecture]目录下:

比如:RVDS/ARM_CM3,这表示cortexM3架构在RVDS或Keil工具上的移植文件。

里面有两个文件

port.c

portmacro.h

1.4.. 头文件相关

1.4.1 头文件相关

FreeRTOS需要3个头文件目录:

FreeRTOS本身的头文件:FreeRTOS/Source/include

移植时用到的头文件:FreeRTOS/Source/include/[compiler]/[architecture]

含有配置文件FreeRTOSConfig.h的目录

1.4.2 头文件

列表如下:

头文件作用

FreeRTOSConfig.h

FreeRTOS.h

FreeRTOS的配置文件,比如 选择调度算法,configUSE_PREEMPTION每个demo都必定含有FreeRTOSConfig.h,建议去修改demo中的FreeRTOSConfig.h,而不是从头去写一个

使用FreeRTOS API函数时,必须包含此文件。在FreeRTOS.h之后,再去包含其他头文件,比如:task.h、queue.h、semphr.h、event_group.h

1.5 内存管理

文件在FreeRTOS/Source/portable/MemMang下,它也是放在portable目录下,表示你自己可以提供自己的函数。

源码中默认提供了5个文件,对应内存管理的5种方法

文件优点缺点
heap_1.c分配简单,时间确定只分配,不回收
heap_2.c动态分配,最佳匹配碎片,时间不定
heap_3.c调用标准库函数速度慢、时间不定
heap_4.c相邻空闲内存可合并可解决碎片问题,时间不定
heap_5.c在heap_4.c基础上支持分隔的内存块可解决碎片问题,时间不定

1.6 数据类型和编程规范

1.6.1 数据类型

每个移植的版本都含有自己的portmacro.h头文件,里面定义了2个数据类型:

  • TickType_t:

    ?

    ?

    • FreeRTOS配置了一个周期性的时钟中断:Tick Interrupt
    • 每发生一次中断,中断次数累加,这被称为tick count
    • tick count这个变量的类型就是TickType_t
    • TickType_t可以是16位的,也可以是32位的
    • FreeRTOSConfig.h中定义configUSE_16_BIT_TICKS时,TickType_t就是uint16_t
    • 否则TickType_t就是uint32_t
    • 对于32位架构,建议把TickType_t配置为uint32_t
  • BaseType_t
    • 这是该架构中最高效的数据类型
    • 32位架构中,它就是uint32_t
    • 16位架构中,它就是uint16_t
    • 8位架构中,它就是uint8_t
    • BaseType_t通常用作简单的返回值类型,还有逻辑值:比如pdTRUE/pdFALSE

1.6.2 变量名

变量名有前缀

变量名前缀含义

c

s

l

x

u

p

uc

pc

char

int16_t, short

int32_t, long

BaseType_t,其他非标准的类型:结构体、task_handle、queue_handle等

unsigned

指针

uint8_t、unsigned char

char指针

1.6.3 函数名

函数名的前缀有两部分,返回值类型和在哪个文件定义

?通用的宏如下;

?注:逻辑分析仪只能观察全局变量

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:50:48  更:2022-10-17 12:54:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:18:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码