rei1984 发表于 2021-1-26 16:49:36

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

本帖最后由 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 内部的一些编程技巧 应该是可以的。从汇编去考虑这个问题,反而是简单的。

advarx21ic 发表于 2021-1-26 16:59:21

定义变量的时候指定地址应该就行了

albert_w 发表于 2021-1-26 17:00:21

指针能解决这个问题吧

ztrx 发表于 2021-1-26 17:03:26

指定地址,不要初始化

Elex 发表于 2021-1-26 17:05:45

在芯片尾部之类的地方画出一小部分RAM,在boot和app的工程里都不要包含这段地址,然后在boot和app里都通过指针访问这段地址,只要不断电,数据不会丢失

security 发表于 2021-1-26 17:26:08

用 _at_ 指定地址。
启动代码(startup.a51)里面,不要去清零这个地址。

rei1984 发表于 2021-1-26 17:47:25

security 发表于 2021-1-26 17:26
用 _at_ 指定地址。
启动代码(startup.a51)里面,不要去清零这个地址。

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

AWEN2000 发表于 2021-1-26 17:50:47

security 发表于 2021-1-26 17:26
用 _at_ 指定地址。
启动代码(startup.a51)里面,不要去清零这个地址。

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

ilikemcu 发表于 2021-1-26 18:25:09

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

john78 发表于 2021-1-26 19:16:03

6楼正解

chenchaoting 发表于 2021-1-26 22:02:14

STC默认XRAM复位是0吗,还是不定。感觉都没有上电程序去清除

wye11083 发表于 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或指令清零。

security 发表于 2021-1-27 09:47:52

chenchaoting 发表于 2021-1-26 22:02
STC默认XRAM复位是0吗,还是不定。感觉都没有上电程序去清除

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

security 发表于 2021-1-27 10:09:07

rei1984 发表于 2021-1-26 17:47
具体是怎么操作的?    语法和设置方法是什么

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

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

rei1984 发表于 2021-1-27 17:38:41

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

感谢ls 回头我研究下。
页: [1]
查看完整版本: 51比较难的问题:bootloader里面计算出的变量如何传递给APP(内部RAM传递)