主题:SysConfig 中讨论的其他器件
工具/软件:
您好:
问题:
- 该应用在调试模式下工作、但在释放模式下失败(将应用刻录到闪存时)。 开机时的执行错误如下:(在终端窗口上)
“映像加载完成、切换到应用程序…
错误:Bootloader rprcImageLoad: 317:应用程序映像在 SBL 保留内存范围内有一个加载地址 (0x70020000)!!“
问题在于何时需要超出 MSRAM (2MB) 容量的堆存储器。 所以
在“内存配置“部分中、在“常规“下、将堆大小增加为:
在“内存段“部分下、我 将 DDR 的内存拆分为以下两个部分:
我的应用程序是从 0x100000 到 0x280000 开始读取闪存区域中用户的数据、并根据“default_sbl_ospi.cfg"文件“文件将应用程序编程到 0x80000。 在我的应用程序中、我会将此用户的数据加载到指针变量(在堆存储器中)中。
借助此配置、我可以在应用程序中对指针变量进行 malloc 操作、这样就可以正常使用
调试模式。 但在打开应用程序电源时、将释放内容刻录到闪存时失败、如图所示。
- 解决闪存执行问题的方法是 以减少堆以适应 MSRAM 为了使应用能够使用闪存而不使用上述 DDR4 扩展、需要以块的形式传输用户的数据、并模拟“ospi_flash_io"示“示例的闪存读取。 以下是相关信息:
#define APP_OSPI_FLASH_BASE (0x100000)//用户数据的起始地址
#define heap_size (262144U)
#define APP_DATA_SIZE (1241804U) //这是闪存中的用户数据大小
uinit32_t 商、remainder、byteUsed;
uint8_t *prgmBuffer ___attribute__((aligned (32u)))=(unit8_t *) malloc (heap_size);
//所以指针的堆 *prgmBuffer 变得更小
……μ s
商 = app_data_size/heap_size;
remainder = APP_DATA_SIZE % heap_size;
//现在是从闪存中获取数据的循环、每个闪存为 256KB、而不是一个大堆
//大于 1.5MB
对于 (uint8_t loopcnt = 0;loopcnt <(商+1);coopcnt++)
{
byteUsed =(loopcnt ==商)? remainder : heap_zise.
OFFSET = APP_OSPI_FLASH_BASE +(loopcnt*heap_size);
Flash_offsetToBlkPage (gFlashHandle[CONFIG_FLASH0]、偏移、&blk、&page);
状态= FlashHandle[CONFIG_FLASH0]、偏移、prgmBuffer、byteUsed);
……μ s。
//应用程序代码继续
……μ s。
} //偏移量确实是页面对齐
问题在于循环运行第一个循环= 0、然后对于第二个循环运行 flash_read() 已挂起 (带断点验证)。 因此在 Flash_offsetToBlkPage () 之前添加了 Flash_Reset (gFlashHandle[CONFIG_FLASH0]) 以使其无效。
根据“ospi_flash_io"示“示例代码、第二个偏移量的闪存读取正常、不知道此处被打乱。
我需要有关如何解决此问题的帮助。
- 这是小而好奇。 的设置 存储器区域 SysConfig 中的闪存为:
起始地址:0x60100000
大小 :0x80000
它是什么 0x60100000 而不是的偶数边界 0x60000000 以及为什么仅使用尺寸 0x80000 (512K)、而不是 0x4000000 (64MB 或 512Mbit) 是多少?