主题中讨论的其他部件:SimpliciTI
您好,
不久前,我创建了一个主题,要求帮助在章节的闪存中将变量放在特定地址。
我无法使它正常工作。
我试图在原来的主题中继续讨论,但似乎被锁定了。 以下是原始内容:
有人能帮忙吗?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,
不久前,我创建了一个主题,要求帮助在章节的闪存中将变量放在特定地址。
我无法使它正常工作。
我试图在原来的主题中继续讨论,但似乎被锁定了。 以下是原始内容:
有人能帮忙吗?
您好,
每个工具链对链接程序脚本使用不同的语法。 您尚未编写,但我假设您正在使用TI工具链。 请参阅 TI CGT工具链手册。 它出奇的好。
对于TI CGT和IAR,还可以使用pragma。 我们的主板文件展示了如何执行此操作:
#define NVS_REGINESS_BASE 0x1B000 #define SECTORSIZE 0x1000 #定义REGIZE (SECCTORSIZE * 4) #define VERIFYBUFSIZE 64 static uint8_t verifyBuf[VERIFYBUFSIZE]; /* 通过将未初始化的字节 *数组置于所需的闪存地址,为NVS驱动程序保留闪存扇区。 */ #if defined(__TI_Compiler_version__) /* *将未初始化的数组置于NVS_REGions_base */ #pragma location (flashBuf,NVS_REGions_base); #IZma NOINIT (flashBuf); static char flashBuf[REGISE]; #Elif defined(___REIAR_SYSTEMS _REGRIP_AR_NO_ARSE_ GRIP_RE_ARZSE_@ RE_REALIARIAR_REG_REALIARIZ_RE_REG_ #Elif defined(__GnUI__) /* 将闪存缓冲区放在在gcc链接程序文件中创建的.NVS部分。 *.NVS部分强制对齐扇区边界,但可 *放置在闪存中的任何位置。 如果需要,可以通过 更改gcc链接程序文件中的以下内容将.NVS部分设置*为固定地址: * .NVS (fixed_flash_ADDR)(NoLoad): at (fixed_flash_ADDR){* *(.NVS) *}> region_text */ __attribute__((section (".NVS"))) 静态字符闪存按钮[REGIZE]; #endif
这更简单,但在整个工具链中不是很容易移植。
您没有告诉我们您正在使用哪个工具链,但从 这个问题 来看,我假设您正在使用TI工具链。
*.NVS (fixed_flash_adDR)(NoLoad):at (fixed_flash_adDR){
**(.NVS)
*}> region_text
至:
.boot_info_section (0x8000)(NoLoad):at (0x8000){
*(.boot_info_section)
}>闪存[/QUOT]
这特定于 GNU LD。 它不能与TI链接器一起使用。 您是否正在使用GCC工具链?
您好,
我需要此功能才能在应用程序和bootloader程序之间共享信息。
所以,我复制你的例子,在应用程序中写了这个:
#define boot_data_adDR 0x8000
#define boot_data_size 10.
#pragma location_boot_data, boot_data_addr);
#pragma NOINIT (boot_data);
static char boot_data[boot_data_size];
为了在bootloader程序中访问此文件,我编写了以下内容:
#define boot_data_adDR 0x8000
static char * boot_data = boot_data_addr;
这是否正确?
我正在编辑上一篇文章以更改我的问题,您在我完成编辑之前回答了问题。
请看一下新问题吗?
[引述]
28 KiB听起来像是一个巨大的引导程序
[/引述]
我同意。 它只是使用SPI驱动程序的主函数。
我认为这是因为TI-RTOS。
我希望我可以在不使用引导加载程序中的TI-RTOS的情况下执行此操作。
[引述]
另请注意,您不应在最后一个Flash页中更新CCFG数据
[/引述]
我知道这一点。
[引述]
因此,您可以考虑将bootloader分成两个部分,然后重新使用最后一个Flash页的剩余部分。
[/引述]
我不理解这个部分。
[报价用户="Mad River"]
那么,在应用程序中,我是否可以直接写入boot_data? 如下所示:
对于(i=0;i<boot_data_size;i++)
{
boot_data[i]= i;
}
还是需要使用闪存驱动程序?
[/引述]
否,您需要使用闪存驱动程序。 我感觉您希望了解我们的OAD解决方案,而不是自己重新实施所有内容。 至少,您应该仔细研究我们的OAD实施。 请看一下
请仔细研究。 这将比在E2E上提出大量问题更有效。
[报价用户="Mad River"]
因此,您可以考虑将bootloader分成两个部分,然后重新使用最后一个Flash页的剩余部分
我不理解这个部分。
[/引述]
可以将应用程序分为两个区域。 由于CCFG是引导加载程序的一部分,在现场部署设备后不应更改,因此最后一个Flash页面中还留有大量空间。 这也可用于引导加载程序代码。
[引述]
请看一下
[/引述]
谢谢你。