使用IAR时的严重问题

了解更多常见问题解答教程

10个帖子/ 0新
最后一篇
kevinchen_sz.
离线
最后一次露面:1周23小时前
加入:2017-12-06 09:24
使用IAR时的严重问题

嗨,

我正在使用IAR(8.11.1)发展。

我发现了一个严重的问题,即启动时始终会更改某些值。

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

void arch_rom_init(void){#if定义(__da14531__)&&(!use_chacha20_rand)// store值_rand_state stdlib / rand.cr warssum puint32_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;#f定义(__da14531__)&&(use_trng)//给定DA14531次级引导加载程序和Flash程序员//(UART版本)叶未被驱动为// raminit_start_address和ram_uninit_end_address地址的内存区域,//该存储区域可用于源Trng缓冲区具有//真实随机数据(RAM块电源后的随机值)。// trng缓冲区的最大大小是// raminit_end_address和ram_uninit_start_address之间的区别。// //注意:如果应用程序使用空闲区域区域(检查// scatter文件),则应重新计算最大TRNG缓冲区大小//。 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?)

然后数据从覆盖,然后导致崩溃。

/ ** **************************************************************************************** * * @file boot.h * * @brief This file contains the declarations of the boot related variables. * * Copyright (C) 2019-2020 Dialog Semiconductor. * This computer program includes Confidential, Proprietary Information * of Dialog Semiconductor. All Rights Reserved. * **************************************************************************************** */ #ifndef _BOOT_H_ #define _BOOT_H_ #include  extern 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 = ".heap_mem_area_not_ret" #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 NON_RET_HEAP_LENGTH (NON_RET_HEAP_END - NON_RET_HEAP_BASE) #pragma section = ".heap_db_area" #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_

更多,

即使地址是对的,

如何承诺[heap_db_area]介绍大于(ram_uninit_end_address - ram_uninit_start_address)的部分?

如果编译器在Secton [HeaP_DB_AREA]之后将一些初始变量放置一些初始变量,它仍然是一种风险。

设备:
PM_DIALOG.
离线
最后一次露面:12小时32分钟前
员工
加入: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.
离线
最后一次露面:1周23小时前
加入:2017-12-06 09:24
是。它是prox_reporter \ IAR。

是。它是prox_reporter \ IAR。

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

使用来自编译器的这些Defement的代码位于System Init或Sleep Handler函数中。

PM_DIALOG.
离线
最后一次露面:12小时32分钟前
员工
加入:2018-02-08 11:03
嗨kevinchen_sz,

嗨kevinchen_sz,

您是否使用SDK提供的项目?Prox_Reporter \ IAR应该开箱即用,并由SDK提供。请使用清除的SDK目录尝试。

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

你的意思是你用它附着的调试器跑了里,这个项目崩溃了?

如果您可以在此问题上提供一些额外的信息/屏幕截图,那将是非常有帮助的。

谢谢,PM_DIALOG.

kevinchen_sz.
离线
最后一次露面:1周23小时前
加入:2017-12-06 09:24
我附上了我的截图

我附上了我的屏幕截图我终于找到了什么。

此问题的根本原因是:__section_begin()和__section_end()在“boot.h”中,不要返回正确的地址但零。

请参阅截留文件中的屏幕截图。

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

1.arch_rom.c,当定义CFG_TRNG时

这导致崩溃

2.ARCH_MAIN.c,启用睡眠时

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

在IAR IDE中只发现的上述问题。

附件:
PM_DIALOG.
离线
最后一次露面:12小时32分钟前
员工
加入:2018-02-08 11:03
嗨kevinchen_sz,

嗨kevinchen_sz,

谢谢你的屏幕截图。还有一个问题,我会在内部升级它来复制它:您是否使用SDK提供的项目,或者您是否完成了任何修改?

谢谢,PM_DIALOG.

kevinchen_sz.
离线
最后一次露面:1周23小时前
加入:2017-12-06 09:24
都。

都。

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

都有同样的问题。

PM_DIALOG.
离线
最后一次露面:12小时32分钟前
员工
加入:2018-02-08 11:03
嗨kevinchen_sz,

嗨kevinchen_sz,

我将在内部升级这个来检查这一点,并会回复你。

谢谢,PM_DIALOG.

bogisich.
离线
最后一次露面:2周4天前
加入:2021-01-13 09:08
感谢您的更新和

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

myfordbenefits.

PM_DIALOG.
离线
最后一次露面:12小时32分钟前
员工
加入:2018-02-08 11:03
嗨Janosn,非常感谢

嗨Janosn,非常感谢您的评论和宝贵的反馈!我们将审核您的所有评论/解决方案。

嗨Sfuentes-Digi,谢谢你验证这个!

如果您对无附件有任何其他问题或反馈,请培养新的论坛票!

谢谢,PM_DIALOG.