FreeRTOS学习(2)

文章介绍了如何将FreeRTOS移植到现有项目中,重点关注了FreeRTOSConfig.h配置文件、必要的源文件(如task.c和list.c),以及关键数据类型和函数命名约定。讨论了堆栈内存管理,包括栈和堆的增长方向、效率和生命周期。提到了在FreeRTOS中,由于线程安全问题,直接使用malloc和free可能不安全,推荐使用pvPortMalloc和vPortFree。
摘要由CSDN通过智能技术生成
将移植FreeRTOS到已有的项目中
  • FreeRTOSConfig.h

  • 包含了配置大量初始化数据的头文件,是

  • source files

  • 主要存放在Source文件夹中,主要包含

用于实现一系列RTOS功能的函数文件

数量繁杂的文件与代码对于启动与运行FreeRTOS程序而言并不是必要的,在官方所给出的示例中,运行程序所必须的文件有

FreeRTOSConfig.h+task.c+list.c

而其关键的代码块为

int main(void){//官方示例
    prvSetupHardware();
    vTaskStartScheduler();
    for(;;);
    return 0;
}
关键数据类型和名称解释
  • 数据类型

/*主要用来定义因系统tick中断产生的计数*/
TickType_t
/*处理器位数的基础型,不应使用无规定int*/
BaseType_t
  • prefixed名解释

/***********Variable Names
'c' for char(int8_t)
's' for int16_t
'l' for int32_t
'x' for BaseType_t and any other non-standard types
*/
/***********Functions Names
*Functions are prefixed with both the type they return,and the file they are defined within
*而文件内部函数将由prv进行修饰
*/
  • 宏名解释

/************
*portXXX in portable.h or portmacro.h
*taskXXX in task.h
*pdXXX in projdefs.h(project_define)
*configXXX in FreeRTOSConfig.h
*errXXX in projdefs.h
*/
堆内存管理说明
前置知识说明
堆栈内存
来源 CS255

教程中涉及到的一段代码如下

Cube *CreateCube(){
    Cube c(20);
    return &c;
}
int main(){
    Cube *c = CreateCube();
    /*当在main中运行到这个位置时,在CreateCube中申请
    的c的空间被*c直接覆盖掉了
*/
    double r = c->getVolume();
    double v = c->getSurfaceArea();
    return 0;
}

原文中有一句:

A common mistake is to return a pointer to a stack variable in a helper function

含义实际上是,系统会在函数返回之后回收内存,那么如果函数返回的是指向内部某一变量的指针,随着这段内存被清理,该值同样也无法保留下来

用于FreeRTOS中,堆栈比较关键的知识如下

  • 栈自高地址向下增长,堆自低地址向上增长

  • 栈由于需要多次快速访问,通常大小较堆而言更小,栈操作的效率是更高的

  • 栈内存在任务执行后会被自行优化,堆内存则不会

malloc()与free()
来源博主 Healtheon

需要注意的只有malloc与free都是对堆中的空间进行操作。这样可以将static这一关键字也进行一定程度的说明了

/*
static修饰的成员类型应该在程序一开始时就存在,
不能在函数内部初始化或者分配,这是由静态数据成员是存储在
程序的静态存储区而非栈上空间所决定的
*/

值得注意的是,malloc()与free()在FreeRTOS中的使用并不广泛,这是因为在多线程任务中,对堆内存的分配并不能够保证其中的数据访问在多任务中安全合法

是reentrancy和thread-safe的问题

故在FreeRTOS中,堆内存的申请使用

/*
malloc() -> pvPortMalloc()
free() -> vPortFree
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值