搜索
bottom↓
回复: 14

51比较难的问题:bootloader里面计算出的变量如何传递给APP(内部RAM传递)

[复制链接]

出0入25汤圆

发表于 2021-1-26 16:49:36 | 显示全部楼层 |阅读模式
本帖最后由 rei1984 于 2021-1-26 16:53 编辑


今天突然想到了一个比较难的问题,首先 51开发都是和大部分工程师一样的配置,keil c

然后,在一个项目中,我需要一个变量在bootload程序中计算出来。这个变量存于 51的内部ram中,等bootload 运行结束,pc就跳到 app 里面进行运行。  图片如下:




可能有人反驳我。为什么这个变量一定要在 bootload 里面计算出来。在app里面不能计算吗?    这个没办法 ,为了满足项目的需求。 请满足这个变态的需求。。

有了 这个变态的需求,我把问题分解一下。 在 keil + c语言的环境中:

1.  如何 指定一个特定的内存地址 产生一个变量A

2.  如何让这个变量 A ,在定义的时候, 只是占个坑, 而不改变这个坑里面原有的内容?? 《==我说的比较直白


看看论坛里有没有 51的高手能指点一二?

备注: 不能添加外部 eeprom 进行转存。 这样这个题目就毫无意义了。 就利用mcu 内部的一些编程技巧 应该是可以的。  从汇编去考虑这个问题,反而是简单的。  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2021-1-26 16:59:21 来自手机 | 显示全部楼层
定义变量的时候指定地址应该就行了

出0入42汤圆

发表于 2021-1-26 17:00:21 | 显示全部楼层
指针能解决这个问题吧

出0入4汤圆

发表于 2021-1-26 17:03:26 | 显示全部楼层
指定地址,不要初始化

出0入16汤圆

发表于 2021-1-26 17:05:45 | 显示全部楼层
在芯片尾部之类的地方画出一小部分RAM,在boot和app的工程里都不要包含这段地址,然后在boot和app里都通过指针访问这段地址,只要不断电,数据不会丢失

出0入8汤圆

发表于 2021-1-26 17:26:08 | 显示全部楼层
用 _at_ 指定地址。
启动代码(startup.a51)里面,不要去清零这个地址。

出0入25汤圆

 楼主| 发表于 2021-1-26 17:47:25 来自手机 | 显示全部楼层
security 发表于 2021-1-26 17:26
用 _at_ 指定地址。
启动代码(startup.a51)里面,不要去清零这个地址。

具体是怎么操作的?    语法和设置方法是什么

出0入162汤圆

发表于 2021-1-26 17:50:47 来自手机 | 显示全部楼层
security 发表于 2021-1-26 17:26
用 _at_ 指定地址。
启动代码(startup.a51)里面,不要去清零这个地址。

不要动启动代码!要在项目设置页里设置ram范围,至少STM32可以设置范围的。51不清楚,应该也可以,或者修改link链接文件修改ram范围

出0入50汤圆

发表于 2021-1-26 18:25:09 | 显示全部楼层
51的startup.a51初始化RAM只针对256字节的内部RAM,可以使用绝对定位,前面的网友已经说了_at_,把数据放在XRAM的最后部分,然后自己写XRAM的初始化,避开这个末端地址的几个字节就可以。
我的每个涉及保持到非易失性数据的工程,都用_at_绝对定位这些变量,并把它们放到连续的空间,这样无论保存还是读取,给它起始地址和字节数,就一次搞定了,特别适合把数据存放到flash做的伪EEPROM.

出90入4汤圆

发表于 2021-1-26 19:16:03 来自手机 | 显示全部楼层
6楼正解

出20入25汤圆

发表于 2021-1-26 22:02:14 来自手机 | 显示全部楼层
STC默认XRAM复位是0吗,还是不定。感觉都没有上电程序去清除

出0入442汤圆

发表于 2021-1-26 22:07:31 来自手机 | 显示全部楼层
chenchaoting 发表于 2021-1-26 22:02
STC默认XRAM复位是0吗,还是不定。感觉都没有上电程序去清除

估计不是0(ram没法全局clr,否则就不叫ram,而是reg了)。一般c语言定义变量a=0时根据平台不同大小不同会生成sbss或data或指令清零。

出0入8汤圆

发表于 2021-1-27 09:47:52 | 显示全部楼层
chenchaoting 发表于 2021-1-26 22:02
STC默认XRAM复位是0吗,还是不定。感觉都没有上电程序去清除

看启动代码,如果没有清零,那就是不定的。对于 51 来说,一般是这种处理机制。

出0入8汤圆

发表于 2021-1-27 10:09:07 | 显示全部楼层
rei1984 发表于 2021-1-26 17:47
具体是怎么操作的?    语法和设置方法是什么

去网上搜索,关键字 _at_、启动代码,应该有一堆中文资料的。
这里给你官网的资料:
「The _at_ Keyword」
「Startup Code」

至于修改「Startup Code」,可以直接编辑,一般情况下,也可以使用 Configuration Wizard 来图形化编辑。

出0入25汤圆

 楼主| 发表于 2021-1-27 17:38:41 | 显示全部楼层
security 发表于 2021-1-27 10:09
去网上搜索,关键字 _at_、启动代码,应该有一堆中文资料的。
这里给你官网的资料:
「The _at_ Keyword ...

感谢ls 回头我研究下。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-21 03:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表