搜索

GD32E230 no_init段问题

[复制链接]
1495|16
 楼主 | 2020-9-23 10:26 | 显示全部楼层 |阅读模式
大家好,请问一下在E230中使用no_init段的时候,并没有达到预期要求,在进行软件复位后,RAM中的被初始化了,没找到原因。
配置如下:
QQ截图20200923102210.png
QQ截图20200923102255.png
QQ截图20200923102327.png

使用特权

评论回复
| 2020-9-23 10:48 | 显示全部楼层
你编译的时候,应该会有警告吧?在ARMCC6编译器下,绝对地址定位的语法有变化,你那条语句应该没有生效,你可以查查map文件,看看那个变量在不在0x20001FE0地址。
ARMCC6下的语法:
__attribute__((section(".ARM.__at_0x20001FE0")))
你试试这样写

使用特权

评论回复

评论

17776993770 2020-9-23 11:13 回复TA
您好,我改了绝对地址的定义,map文件里,该变量的地址确实是在这个0x20001fe0,图片我更新了,但是我进行软复位时,0x20001fe0里面的变量依然会改变 
 楼主 | 2020-9-23 11:14 | 显示全部楼层
QQ截图20200923110958.png
QQ截图20200923111403.png

使用特权

评论回复
| 2020-9-23 11:33 | 显示全部楼层
你把IRAM2前面那个default对勾取消试试?

使用特权

评论回复

评论

17776993770 2020-9-23 14:39 回复TA
您好,取消勾选了之后也是一样的,看门狗复位,ram还是会被清零,还有就是取消勾选之后,变量的LOAD Addr怎么也是0x20001fe0好奇怪哦。 
 楼主 | 2020-9-23 14:40 | 显示全部楼层
图片
QQ截图20200923143944.png

使用特权

评论回复
 楼主 | 2020-9-23 15:48 | 显示全部楼层
还有就是我试了一下,该操作在GD32F103上是可以的,但是到了GD32E230上就不行了

使用特权

评论回复
| 2020-9-23 16:02 | 显示全部楼层
你再试一下这个吧:
__attribute__((section(".bss.ARM.__at_0x20001FE0")))
把default和NoInit都勾上看看,如果还不行,那我也没办法了,期待高手出现

使用特权

评论回复

评论

17776993770 2020-9-23 16:26 回复TA
大佬你好,就是我把第二段RAM的地址往前移了几个字节(改成了0x20001FD0)就可以了,目前原因我还不知道,难道E230RAM的最后一个字节他们会字节写东西? 
 楼主 | 2020-9-23 17:03 | 显示全部楼层
从0x20001FE0到0x20001FFF的RAM就算加入noinit段,该段软复位时也会被初始化。
QQ截图20200923170041.png

使用特权

评论回复
| 2020-9-23 22:04 | 显示全部楼层
大神现场授课

使用特权

评论回复
| 2020-9-23 22:06 | 显示全部楼层
就算加入noinit段,该段软复位时也会被初始化。这个很容易忽略啊/,。,,

使用特权

评论回复
| 2020-9-23 22:07 | 显示全部楼层
把第二段RAM的地址往前移了几个字节(改成了0x20001FD0)

使用特权

评论回复
| 2020-10-3 20:40 | 显示全部楼层
应该这样定义变量:
boot_ram_flag_t reset_flag   __attribute__((section("NO_INIT"),zero_init));

使用特权

评论回复
| 2020-10-3 20:44 | 显示全部楼层
本帖最后由 hamstar 于 2020-10-3 21:16 编辑

参考这样定义:
只修改sct文件,界面的option选项不要勾选

1.sct文件内容
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x08000000 0x00001000  {    ; load region size_region
  ER_IROM1 0x08000000 0x000001000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }

  RW_IRAM1 0x20000000 0x00001F9C  {  ; RW data
   .ANY (+RW +ZI)
  }
  NO_NEED_INIT_DATA 0x20001F9C UNINIT 0x00000064 {;非初始化变量,100Byte
   .ANY (NO_INIT)        

  }
}
;2KByte(0x08000fff~0x080017ff)保留作为EEPROM
LR_IROM2 0x08001800 0x0000e800  {    ; load region size_region
  ER_IROM2 0x08001800 0x0000e800  {  ; load address = execution address
   .ANY (+RO)
  }
}

2.变量定义
unsigned char NO_INIT_DATA[100] __attribute__((section("NO_INIT"),zero_init));
无标题.png

使用特权

评论回复
| 2020-10-5 19:13 | 显示全部楼层
感觉IDE界面设置无效问题

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表