是不是只要有rw段,那么就应该在ro段代码中,自己写代码将rw段拷贝到rw base然后调用执行?
请大侠拨云见日!
共4条
1/1 1 跳转至页

这个不是一两句就能说明白的,你的理解可以说不对,对于ARM(各种MCU)程序都可以在ROM中执行,RW/RO是为了配合其内存管理而定义的处理方法,这样可以起到节省资源的作用,举个简单的例子,一段程序,如果中间需要使用大量的数组,而这个数组一开始是不需要初始值的,只是在程序运行中才用来存储数据,我们可以直接在ROM程序里面也给数组分配空间,运行时直接把程序从ROM中复制到RAM中,但如果我们不这么处理,而是将可执行代码放到ROM中的代码段,数组放到ROM中的数据段,这样数据可以存储为地址+长度的格式,占用ROM的空间就会大为减少。
这样处理也是因为ARM自身没有多少存储空间,需要动态的配置系统的存储空间,放在ROM中的程序一般是不能直接执行的。

3楼
首先表示感谢!!
这个不是一两句就能说明白的,你的理解可以说不对,对于ARM(各种MCU)程序都可以在ROM中执行,(---明白了)
RW/RO是为了配合其内存管理而定义的处理方法,这样可以起到节省资源的作用,(--很深刻,谢谢)
举个简单的例子,一段程序,如果中间需要使用大量的数组,而这个数组一开始是不需要初始值的,只是在程序运行中才用来存储数据,我们可以直接在ROM程序里面也给数组分配空间(声明为全局变量,是吧),运行时直接把程序从ROM中复制到RAM中(到链接定址的时候指定的地址。对吧),但如果我们不这么处理,而是将可执行代码放到 ROM中的代码段,数组放到ROM(是RAM吗)中的数据段,这样数据可以存储为地址+长度的格式,占用ROM的空间就会大为减少。
您例子的意思是不是,这个数组不需要初始化的话。那么在rom中就不需要生成rw段。那么相对于声明为全局变量。生成的镜像的大小就会小一些?
对定址器的问题请教您,ads工具链接的时候指定ro base, rw base后,生成的镜像反编译后是绝对定址的机器码。所以当需要执行这个镜像的时候,就需要按照定址器所设定的参数,通过引导程序将之(ro段,rw段)拷贝到定址的地址(ro base, rw base)
是这样吗? 谢谢!!
这个不是一两句就能说明白的,你的理解可以说不对,对于ARM(各种MCU)程序都可以在ROM中执行,(---明白了)
RW/RO是为了配合其内存管理而定义的处理方法,这样可以起到节省资源的作用,(--很深刻,谢谢)
举个简单的例子,一段程序,如果中间需要使用大量的数组,而这个数组一开始是不需要初始值的,只是在程序运行中才用来存储数据,我们可以直接在ROM程序里面也给数组分配空间(声明为全局变量,是吧),运行时直接把程序从ROM中复制到RAM中(到链接定址的时候指定的地址。对吧),但如果我们不这么处理,而是将可执行代码放到 ROM中的代码段,数组放到ROM(是RAM吗)中的数据段,这样数据可以存储为地址+长度的格式,占用ROM的空间就会大为减少。
您例子的意思是不是,这个数组不需要初始化的话。那么在rom中就不需要生成rw段。那么相对于声明为全局变量。生成的镜像的大小就会小一些?
对定址器的问题请教您,ads工具链接的时候指定ro base, rw base后,生成的镜像反编译后是绝对定址的机器码。所以当需要执行这个镜像的时候,就需要按照定址器所设定的参数,通过引导程序将之(ro段,rw段)拷贝到定址的地址(ro base, rw base)
是这样吗? 谢谢!!

首先表示感谢!!
这个不是一两句就能说明白的,你的理解可以说不对,对于ARM(各种MCU)程序都可以在ROM中执行,(---明白了)
RW/RO是为了配合其内存管理而定义的处理方法,这样可以起到节省资源的作用,(--很深刻,谢谢)
举个简单的例子,一段程序,如果中间需要使用大量的数组,而这个数组一开始是不需要初始值的,只是在程序运行中才用来存储数据,我们可以直接在ROM程序里面也给数组分配空间(声明为全局变量,是吧),<对,全局变量如果需要初始值,在BIN文件中每个字节就需要分配一个字节的空间,如果不需要初始值,就不用占用空间,只要分配指定地址>运行时直接把程序从ROM中复制到RAM中(到链接定址的时候指定的地址。对吧),<正确,就是链接地址,程序执行时是以此地址为准,并不是在BIN文件中的偏移量>但如果我们不这么处理,而是将可执行代码放到 ROM中的代码段,数组放到ROM(是RAM吗)<这里我说的不太准确,实际上是只由编译器处理处几个地址,不需要给初始值的全局变量并不会占用ROM空间,也就是BIN文件空间,启动时最好由bootloader根据这些地址将编译器指定地址空间清零>中的数据段,这样数据可以存储为地址+长度的格式,占用ROM的空间就会大为减少。
您例子的意思是不是,这个数组不需要初始化的话。那么在rom中就不需要生成rw段。那么相对于声明为全局变量。生成的镜像的大小就会小一些?
<对>
对定址器的问题请教您,ads工具链接的时候指定ro base, rw base后,生成的镜像反编译后是绝对定址的机器码。所以当需要执行这个镜像的时候,就需要按照定址器所设定的参数,通过引导程序将之(ro段,rw段)拷贝到定址的地址(ro base, rw base)
是这样吗? 谢谢!!
<对,完全正确,只有复制过去后程序才能运行,BIN文件通常是不能直接执行的>
这个不是一两句就能说明白的,你的理解可以说不对,对于ARM(各种MCU)程序都可以在ROM中执行,(---明白了)
RW/RO是为了配合其内存管理而定义的处理方法,这样可以起到节省资源的作用,(--很深刻,谢谢)
举个简单的例子,一段程序,如果中间需要使用大量的数组,而这个数组一开始是不需要初始值的,只是在程序运行中才用来存储数据,我们可以直接在ROM程序里面也给数组分配空间(声明为全局变量,是吧),<对,全局变量如果需要初始值,在BIN文件中每个字节就需要分配一个字节的空间,如果不需要初始值,就不用占用空间,只要分配指定地址>运行时直接把程序从ROM中复制到RAM中(到链接定址的时候指定的地址。对吧),<正确,就是链接地址,程序执行时是以此地址为准,并不是在BIN文件中的偏移量>但如果我们不这么处理,而是将可执行代码放到 ROM中的代码段,数组放到ROM(是RAM吗)<这里我说的不太准确,实际上是只由编译器处理处几个地址,不需要给初始值的全局变量并不会占用ROM空间,也就是BIN文件空间,启动时最好由bootloader根据这些地址将编译器指定地址空间清零>中的数据段,这样数据可以存储为地址+长度的格式,占用ROM的空间就会大为减少。
您例子的意思是不是,这个数组不需要初始化的话。那么在rom中就不需要生成rw段。那么相对于声明为全局变量。生成的镜像的大小就会小一些?
<对>
对定址器的问题请教您,ads工具链接的时候指定ro base, rw base后,生成的镜像反编译后是绝对定址的机器码。所以当需要执行这个镜像的时候,就需要按照定址器所设定的参数,通过引导程序将之(ro段,rw段)拷贝到定址的地址(ro base, rw base)
是这样吗? 谢谢!!
<对,完全正确,只有复制过去后程序才能运行,BIN文件通常是不能直接执行的>
共4条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
分享开发笔记,赚取电动螺丝刀(便携轻巧与无刷电机两款可选) | |
看《关键跃升》,聊聊工作心法、动力、能力、沟通与协作,从五个方面深入交流你的工作心得 | |
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
我要给自己挣一部逻辑分析仪 | |
用知识换取送给亲朋的礼物,做个浪漫的开发者 | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 |
打赏帖 | |
---|---|
Buck电路工作在CCM模式下电感电流的计算公式是什么?被打赏5分 | |
buck电路工作原理被打赏5分 | |
基于MSPM0L1306的MODBUS-RTU协议通讯实验被打赏100分 | |
我想要一部加热台+多合一调试工具被打赏18分 | |
每周了解几个硬件知识+485硬件知识分享被打赏10分 | |
【换取手持数字示波器】树莓派PICO调试器官方固件本地化部署实践被打赏24分 | |
【换取手持数字示波器】分享一个KEIL无法识别CMSIS-DAP调试器的解决办法被打赏20分 | |
【换取手持数字示波器】分享一个自制的ArduinoNano扩展板底板被打赏23分 | |
【换取手持示波器】树莓派PICOW网页烟花被打赏18分 | |
【换取手持示波器】树莓派PICO逻辑分析仪被打赏16分 |