| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> liteos连接器脚本(二) -> 正文阅读 |
|
[嵌入式]liteos连接器脚本(二) |
上一节我们概述了连接器脚本的作用,并且结合data段,bss段和text段的各一个例子解释了和程序中的对应关系,那么这一节,我们结合具体的stm32l431来看看系统的boot阶段。在讲解之前这里要讲一个上一届遗留的问题,上一届我们提到了一个图是最终可执行程序的布局,这个里面有bss段,实际上的可执行文件里面的bss段是不占用磁盘空间的,大家想一下为什么,因为bss段里面本来就是脏数据,没有有效数据,所以如果留出来空间就是对磁盘空间的浪费,可执行文件只需要记录bss段的区间大小就行。不过当程序到内存中之后,却是需要根据这个相对地址留出来一段内存用作bss段的,因为bss段里面定义的变量是在程序执行的过程中实实在在需要使用的变量。 并且同时我们知道连接器脚本决定了程序布局,并且连接器脚本里面可以定义程序中使用的变量,这一点很重要,程序执行初始化的时候就是通过这些变量辅助的找到段,或者也有可能其他的辅助的变量。这个和我们通常变量的定义在源代码中会感觉到有一点诧异。大家记住这一点 上一节我们概述了连接器脚本的作用,并且结合data段,bss段和text段的各一个例子解释了和程序中的对应关系,那么这一节,我们结合具体的stm32l431来看看系统的boot阶段。在讲解之前这里要讲一个上一届遗留的问题,上一届我们提到了一个图是最终可执行程序的布局,这个里面有bss段,实际上的可执行文件里面的bss段是不占用磁盘空间的,大家想一下为什么,因为bss段里面本来就是脏数据,没有有效数据,所以如果留出来空间就是对磁盘空间的浪费,可执行文件只需要记录bss段的区间大小就行。不过当程序到内存中之后,却是需要根据这个相对地址留出来一段内存用作bss段的,因为bss段里面定义的变量是在程序执行的过程中实实在在需要使用的变量。 并且同时我们知道连接器脚本决定了程序布局,并且连接器脚本里面可以定义程序中使用的变量,这一点很重要,程序执行初始化的时候就是通过这些变量辅助的找到段,或者也有可能其他的辅助的变量。这个和我们通常变量的定义在源代码中会感觉到有一点诧异。大家记住这一点
我们形象的画一下最终data段拷贝之后,bss段拷贝之后的memory图如下
,接着根据bss的大小记录在内存中分配一块作为bss段清零。ram最后的0x4000(_Min_Stack_Size)预留给系统栈(注意不是任务的栈,实际上任务的栈在heap里面),中间剩余的一部分用于heap,也就是我们内存管理单元管理这部分内存,我们malloc和free操作的就在这里。 接着我们看一下编译生成的Huawei_LiteOS.map文件,该map文件描述的就是最终在内存中的布局结构,当然也是对可执行文件的一个描述。我们只要看开始部分和data等的地址,验证前面的分布说法 接下来我们看data段的在map里面的描述 所以我们这里的例子讲解的系统的运行代码段实际在nor flash里面并不是在内存里面,然后我们的data段等其他和数据(非rodata)相关的段都会在内存里面。也就是代码并没有拷贝进内存,当然速度没有ram快,当然也可以拷贝进内存,不过这里的连接器脚本会更复杂,需要重新规划整个存储。然后这里的ram只有64k也比较小。也可以外扩展ram 至此我们对于STM32L431RCTx_FLASH.ld描述的系统存储分布有了一个清晰的认识,下一节我们开始讲解系统启动部分,然后开始分析在liteos里面这段分布图的heap是如何管理的。大家务必记住这里最终的memory图,这个图像会贯穿整个liteos包括后面的任务调度管理,内存分配,堆栈切换等等都和这幅图相关。 liteos属于单核心,并且不区分用户态和内核态,所以他的整个系统是比较简单的,可以帮助一些有一定开发经验并且喜欢操作系统的同学作为入门。希望到这里大家能清楚并理解前面的讲解,或者里面也许有错误,也可以指出来。都是个人理解 最后欢迎对操作系统原理感兴趣的朋友关注微信公众号deepcoder |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 22:32:17- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |