使用IAR时严重的问题

了解更多常见问题教程

10个职位/ 0
最后发表
kevinchen_sz
离线
最后看到:3天23小时前
加入:2017-12-06 09:24
使用IAR时严重的问题

你好,

我使用IAR开发(8.11.1)。

我发现一个严重的问题,一些价值观引导时总是被改变。

最后我找到打破RAM的代码:

空白arch_rom_init(空白){#如果定义(__DA14531__) & & (! USE_CHACHA20_RAND) / /存储的价值_rand_state stdlib /兰德。c RW变量uint32_t rand_temp = _rand_state_ROM_DATA;# endif test1 = DB_HEAP_BASE;test2 = RAM_UNINIT_START_ADDRESS;test3 = RAM_UNINIT_END_ADDRESS - RAM_UNINIT_START_ADDRESS;test4 = (__section_begin (“.heap_db_area”);test5 = RET_MEM_BASE;#如果定义(__DA14531__) & & (USE_TRNG) / /鉴于DA14531二级引导装载程序和flash程序员/ / (UART版)叶子没有/ / RAM_UNINIT_START_ADDRESS和RAM_UNINIT_END_ADDRESS地址之间的内存区域,/ /这个内存区域可以用来喂养TRNG缓冲/ /真正的随机数据(内存块上电后随机值)。/ / TRNG缓冲区的最大大小/ / RAM_UNINIT_END_ADDRESS和RAM_UNINIT_START_ADDRESS之间的区别。/ / / /注意:最大TRNG缓冲区大小应该重新计算/ /如果应用程序使用免费区区域(检查/ /散射文件)。在任何情况下,如果使用TRNG缓冲区大小/ /足够小,TRNG算法将与真正的独立随机/ /数据操作中使用的最大大小/ /内存复制。 For further details check the SDK6 documentation. if (trng_state_val != 0x12348765) { memcpy((uint8_t *) DB_HEAP_BASE, (uint8_t *) RAM_UNINIT_START_ADDRESS, RAM_UNINIT_END_ADDRESS - RAM_UNINIT_START_ADDRESS); } #endif

第一次启动时,启用TRNG DB_HEAP_BASE这里会复制。

但是我发现在引导。h,所有的定义都是编译为0。(在我们的项目中,它包含正确的地址)

在地址0,它包含< heap_mem_area_not_ret >的地址。(重新映射在0 ?)

然后从< heap_mem_area_not_ret >开始的数据都被覆盖,然后导致崩溃。

/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * @file引导。h * * @brief这个文件包含引导相关变量的声明。* * (C) 2019 - 2020版权对话框半导体。yabo国际娱乐*本计算机程序包括保密、专有信息*半导体的对话框。yabo国际娱乐保留所有权利。* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /的ifndef _BOOT_H_ # define _BOOT_H_ # include < stdint。h >走读生const uint32_t __ER_IROM3_BASE__ [];#定义CODE_AREA_BASE ((uint32_t) __ER_IROM3_BASE__)走读生const uint32_t __ER_IROM3_LENGTH__ [];#定义CODE_AREA_LENGTH ((uint32_t) __ER_IROM3_LENGTH__) = " # pragma部分。retention_mem_area_uninit“#定义RET_MEM_BASE (* (uint32_t *) (__section_begin (“.retention_mem_area_uninit”))) = " # pragma部分。heap_mem_area_not_ret“#定义NON_RET_HEAP_BASE (* (uint32_t *) (__section_begin (“.heap_mem_area_not_ret”))) # define NON_RET_HEAP_END (* (uint32_t *) (__section_end (“.heap_mem_area_not_ret”))) # define NON_RET_HEAP_LENGTH (NON_RET_HEAP_END - NON_RET_HEAP_BASE) # pragma节= "。heap_db_area“#定义DB_HEAP_BASE (* (uint32_t *) (__section_begin (“.heap_db_area”))) # define DB_HEAP_END (* (uint32_t *) (__section_end (“.heap_db_area”))) # define DB_HEAP_LENGTH (DB_HEAP_END - DB_HEAP_BASE) # endif / / _BOOT_H_

进一步,

即使地址是正确的,

怎么能保证部分(heap_db_area)比(RAM_UNINIT_END_ADDRESS - RAM_UNINIT_START_ADDRESS) ?

这仍然是一个风险如果编译器把一些字母变量后secton [heap_db_area]。

设备:
PM_Dialog
离线
最后看到:10小时53分钟前
工作人员
加入:2018-02-08 11:03
嗨kevinchen_sz,

嗨kevinchen_sz,

道歉,反应后期,新年快乐。你能请注明如果使用prox_reporter IAR项目从SDK复制这个问题?我的意思是项目,项目位于\ target_apps \ ble_examples \ prox_reporter \ IAR SDK的道路。

谢谢,PM_Dialog

kevinchen_sz
离线
最后看到:3天23小时前
加入:2017-12-06 09:24
是的。这是prox_reporter \ IAR。

是的。这是prox_reporter \ IAR。

但是我认为它与应用程序无关的代码。

编译器的代码使用这些定义位于系统初始化或睡眠处理程序函数。

PM_Dialog
离线
最后看到:10小时53分钟前
工作人员
加入:2018-02-08 11:03
嗨kevinchen_sz,

嗨kevinchen_sz,

你是使用SDK提供的项目?prox_reporter \ IAR应该的工作和提供的SDK。请尝试用清晰的SDK目录。

> >我终于找到打破RAM的代码:

你的意思是,你在附有调试器和项目有撞吗?

如果你能提供一些额外的信息/截图在这个问题上,这将是非常有用的。

谢谢,PM_Dialog

kevinchen_sz
离线
最后看到:3天23小时前
加入:2017-12-06 09:24
我附上了我的截图

我附上截图我终于找到的东西。

这个问题的根源是:__section_begin()和__section_end ()”。h”不返回正确的地址但是零。

看到atthached截图文件。

两部分在“boot.h”:使用宏

1. arch_rom。c当CFG_TRNG定义

这导致崩溃

2. arch_main。c,启用睡眠时

睡眠代码使用计算内存块需要保留。

以上问题只存在于IAR IDE。

附件:
PM_Dialog
离线
最后看到:10小时53分钟前
工作人员
加入:2018-02-08 11:03
嗨kevinchen_sz,

嗨kevinchen_sz,

谢谢你的截图。一个问题,我就升级内部复制它:你使用SDK提供的项目,或者你做了什么修改吗?

谢谢,PM_Dialog

kevinchen_sz
离线
最后看到:3天23小时前
加入:2017-12-06 09:24
两者都有。

两者都有。

我也尝试过不同版本的IAR。

都有同样的问题。

PM_Dialog
离线
最后看到:10小时53分钟前
工作人员
加入:2018-02-08 11:03
嗨kevinchen_sz,

嗨kevinchen_sz,

我将升级这个内部检查出来并将送还给你。

谢谢,PM_Dialog

Bogisich
离线
最后看到:20小时前2周
加入:2021-01-13 09:08
谢谢你的更新和

谢谢你的更新和快速回复。我一定会留意这个线程。寻找同样的问题。撞到你的线程。

myfordbenefits

PM_Dialog
离线
最后看到:10小时53分钟前
工作人员
加入:2018-02-08 11:03
嗨janosN,非常感谢

嗨janosN,感谢你宝贵的反馈意见和!我们将回顾你的评论/解决方案。

嗨sfuentes-digi,谢谢验证!

如果你有任何其他问题或反馈无代码,请增加一个新的论坛门票!

谢谢,PM_Dialog