使用IAR时出现严重问题

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
9个员额/ 0个新员额
最后发表
kevinchen_sz
离线
最后看到:2周2天前
加入:2017-12-06 09:24
使用IAR时出现严重问题

你好,

我正在使用IAR(8.11.1)进行开发。

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

最后我找到了破坏RAM的代码:

void arch_rom_init(void) {#if define (__DA14531__) && (!USE_CHACHA20_RAND) //存储_rand_state的值stdlib/rand.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;#if define (__DA14531__) && (USE_TRNG) //给定DA14531辅助引导加载程序和flash程序员// (UART版本)保持不变的内存区域之间的RAM_UNINIT_START_ADDRESS和RAM_UNINIT_END_ADDRESS地址,//这个内存区域可以用来为TRNG缓冲区提供真实的随机数据(RAM块上电后的随机值)。// TRNG缓冲区的最大大小是RAM_UNINIT_END_ADDRESS和RAM_UNINIT_START_ADDRESS之间的差异。注意:如果应用程序使用Free Area区域,则应该重新计算最大TRNG缓冲区大小(检查// scatter文件)。 In any case, if the used TRNG buffer size is // small enough, the TRNG algorithm will operate with true random // data independently to the maximum size used in the following // memory copy. 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。

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

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

然后从开始的数据全部被覆盖,然后导致崩溃。

/** **************************************************************************************** * * @ 文件boot.h * * @brief这个文件包含引导相关变量的声明。* *版权所有(C) 2019-2020yabo国际娱乐*此计算机程序包括Dialog Semiconductor的机密、专有信息*。yabo国际娱乐保留所有权利。* **************************************************************************************** */ # 如果未定义_BOOT_H_ # define _BOOT_H_ # include < stdint.h >走读生const uint32_t __ER_IROM3_BASE__ [];#define CODE_AREA_BASE ((uint32_t)__ER_IROM3_BASE__) extern const uint32_t __ER_IROM3_LENGTH__[];#define CODE_AREA_LENGTH ((uint32_t)__ER_IROM3_LENGTH__) #pragma section = "。retention_mem_area_uninit" #define RET_MEM_BASE (*(uint32_t*)(__section_begin(".retention_mem_area_uninit"))) #pragma section = "。#define 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 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_ . php . php . php . php . php . php . php . php . php . php . php . php . php . php . php . php . php . php . php . php . php . php

进一步,

即使地址是对的

如何保证section[heap_db_area]大于(RAM_UNINIT_END_ADDRESS - RAM_UNINIT_START_ADDRESS)?

如果编译器将一些初始化的变量放在secton[heap_db_area]之后,仍然存在风险。

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

嗨kevinchen_sz,

抱歉回复晚了,新年快乐。请问您是否正在使用SDK中的prox_reporter IAR项目来复制这个问题?我指的是位于projects\target_apps\ble_examples\prox_reporter\IAR SDK路径中的项目。

谢谢,PM_Dialog

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

是的。这是prox_reporter \ IAR。

但我认为这与应用程序代码无关。

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

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

嗨kevinchen_sz,

是否使用SDK提供的项目?prox_reporter\IAR应该是开箱即用的,并且由SDK提供。请尝试使用一个清晰的SDK目录。

>>最后我找到了破坏RAM的代码:

你的意思是你带着附加的调试器跑进去,然后项目崩溃了吗?

如果你能提供一些关于这个问题的额外信息/截图,将非常有帮助。

谢谢,PM_Dialog

kevinchen_sz
离线
最后看到:2周2天前
加入:2017-12-06 09:24
我已经附上了我的截图

我附上了我最后发现的截图。

这个问题的根本原因是:"boot.h"中的__section_begin()和__section_end()没有返回正确的地址,而是0。

见附件中的截图。

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

1.arch_rom.c,当定义CFG_TRNG时

这导致崩溃

2.arch_main.c,当启用睡眠时

睡眠代码用于计算哪个RAM块需要保留。

以上问题只在IAR IDE中发现。

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

嗨kevinchen_sz,

谢谢你的截图。还有一个问题,我将在内部升级以复制它:您是否使用SDK提供的项目,或者您做过任何修改?

谢谢,PM_Dialog

kevinchen_sz
离线
最后看到:2周2天前
加入:2017-12-06 09:24
两者都有。

两者都有。

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

所有人都有同样的问题。

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

嗨kevinchen_sz,

我会在内部升级,查清楚后再给你答复。

谢谢,PM_Dialog

PM_Dialog
离线
最后看到:20小时5分钟前
工作人员
加入:2018-02-08 11:03
你好,简恩,非常感谢

你好,janosN,非常感谢您的意见和宝贵的反馈!我们将审查你所有的意见/解决方案。

Hi sfuentes-digi,感谢你证实这一点!

如果您对无代码有任何其他问题或反馈,请提出一个新的论坛门票!

谢谢,PM_Dialog