是不是只要有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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动——B站互动赢积分】活动开启啦! | |
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |