FreeRTOS 学习记录1

    技术2022-07-10  47

    1 内存分布

    一个程序包含两个部分:

    1.只读区(代码区),代码区里有代码和只读数据。(代码区就是程序编译后生成的二进制文件,存在你的硬盘里)

    2.读写区(变量区),变量区有全局变量,堆,栈。栈(stack):是由进程分配的临时变量的区域;堆(heap):是自己开辟出来的空间,C语言里有calloc ,malloc函数来开辟空间,由free释放。java由new开辟,有自动回收机制。

    内存分区:可以分为5个区

                                                                    

    说到内存分区,内存即指的是RAM。

    栈区(stack): 这个一般由编译器操作,或者说是系统管理,会存一些局部变量,函数跳转跳转时现场保护(寄存器值保存于恢复),这些系统都会帮我们自动实现,无需我们干预。 所以大量的局部变量,深递归,函数循环调用都可能耗尽栈内存而造成程序崩溃

    堆区(heap): 一般由程序员管理,比如alloc申请内存,free释放内存。我们创建的对象也都放在这里

    全局区(静态区 static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放。注意:在嵌入式系统中全局区又可分为未初始化全局区:.bss段和初始化全局区:data段。举例:int a;未初始化的。int a = 10;已初始化的。

    常量区:常量字符串就是放在这里的,还有const常量

    代码区:存放代码,app程序会拷贝到这里,程序不是在ROM里面存储吗?看下面的举例

     

    2 前后台代码结构

                                                                       

    前后台代码结构:一般是在中断(前台)中打标志位,再到大循环(后台)里轮询具体执行对应的代码。进入中断程序执行时间尽可能的少,做到快进快出,中断程序中不要有延时函数,保证程序效率更高。前后台代码难以保证实时性,代码结构复杂,

    所有的操作系统入口都是中断。

    3 RTOS通用组件

                                        

    资源的访问控制:像内存,外设,硬件都可以称为资源,资源是有限且只有一份,但多个任务都想访问,通过信号量、互斥锁、临界区进行资源的访问控制。

    消息通信:通过消息队列、事件标志来通信。

    内存管理:存储块.   嵌入式系统玩的就是内存

    4 RTOS特点

    1 更好的事件实时处理机制

    2 更高效利用CPU资源

    3通用的任务管理框架

    5FreeRTOS源码结构

                                     

     

     

     

     

     

     

     

     

     

     

     

     

    Processed: 0.012, SQL: 8