主题: SysConfig 中讨论的其他器件
工具/软件:
您好的团队、
我的客户正在考虑为其应用代码设置一个特定区域。
假设他们希望放置从 0x0000001 到 0x00008000 闪存区域的代码、
他们应该如何更改 device_linker.cmd 段中的代码?
默认值:.text :palign(8){}> flash
此致、
Kenley
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.
工具/软件:
您好的团队、
我的客户正在考虑为其应用代码设置一个特定区域。
假设他们希望放置从 0x0000001 到 0x00008000 闪存区域的代码、
他们应该如何更改 device_linker.cmd 段中的代码?
默认值:.text :palign(8){}> flash
此致、
Kenley
尊敬的 Kenley:
很抱歉晚才回复。 让我澄清一下有关 MSPM0 的一些命令配置规则:
1. POR 后 MSPM0 将始终从 0x0000 地址开始。 启动程序应始终位于 0x0000 地址。
2.通常,我们会尝试使应用程序映像起始地址与 1 个闪存扇区(1024 字节)对齐。 因此、在这种情况下、起始地址 0x0000001 是不可接受的。
3.例如、如果客户希望放置来自 0x1800 的应用代码、则 cmd 可能是:闪存区域起始地址和.intvecs 地址应设置为所需的起始地址。 另一个引导程序应放置在 0x0000 地址处、跳转到应用程序。
此致、
Pengfei
嗨、Pengfei、
感谢您的支持。
以下内容是否 也可以接受?
'define _BOOTSIZE (0x0000_1800) MEMORY { BOOT (RX) : origin = 0x00000000, length = _BOOTSIZE FLASH (RX) : origin =_BOOTSIZE, length = 0x00020000 - _BOOTSIZE SRAM (RWX) : origin = 0x20200000, length = 0x00008000 BCR_CONFIG (R) : origin = 0x41C00000, length = 0x00000080 BSL_CONFIG (R) : origin = 0x41C00100, length = 0x00000080 } SECTIONS { .intvecs: > _BOOTSIZE .text : palign(8) {} > FLASH .const : palign(8) {} > FLASH .cinit : palign(8) {} > FLASH .pinit : palign(8) {} > FLASH .rodata : palign(8) {} > FLASH .ARM.exidx : palign(8) {} > FLASH .init_array : palign(8) {} > FLASH .binit : palign(8) {} > FLASH .TI.ramfunc : load = FLASH, palign(8), run=SRAM, table(BINIT) .vtable : > SRAM .args : > SRAM .data : > SRAM .bss : > SRAM .sysmem : > SRAM .stack : > SRAM (HIGH) .BCRConfig : {} > BCR_CONFIG .BSLConfig : {} > BSL_CONFIG }
此致、
Kenley
尊敬的 Kenley:
这是因为 cmd 文件默认由 SysConfig 生成。 您可以按照以下步骤修改 cmd 文件:
1.构建工程、并在 Debug 文件夹下生成 cmd 文件。
2.将 cmd 文件从 Debug 文件夹移到当前工程文件夹、如下所示:
3.打开 SysConfig 文件并禁用如下所示的 cmd 生成函数、然后客户可以修改 cmd 文件、而 SysConfig 不会再次生成该文件。
此致、
Pengfei
嗨、Pengfei、
客户是按照您的要求完成的、并将固件写入 MCU、但程序无法正常工作。
但是、当将它们重置为默认值时、程序会起作用。
您能看看他们的链接器文件吗?
e2e.ti.com/.../device_5F00_linker.txt
提前感谢您、
Kenley
尊敬的 Kenley:
您是指他们从 0x8000 地址开始下载此工程并直接运行程序吗?
实际上、我们的 MSPM0 在上电后始终从 0x0000 地址开始、因此有必要将引导项目推送到 0x0000 地址、并跳转到引导项目中的应用项目 0x8000。
附带一张简单的幻灯片、介绍如何从引导程序跳转到应用程序。
e2e.ti.com/.../Program-Jump-Guide.pptx
此致、
Pengfei
嗨、Pengfei、
抱歉、我的解释不清楚。
例如、客户想在.intvecs 和.text 之间的段中添加.parameter。
客户应该怎么做?
例如:
1. 如上所述编辑.cmd 文件,例如:
.parameter : palign(8){}> flash
2.在 CCS 项目中创建一个新的源文件.c ?
__attribute__((section(“.parameter")“))
const uint_8T parameter[256]={0x12、0x34、… };
3.在 main.c 文件中添加以下内容。
extern const uint8_t 参数[256];
此致、
Kenley
嗨、Pengfei
为了便于您参考、似乎存在类似的线程
MSPM0G3507:链接器命令文件 — 基于 Arm 的微控制器论坛 — 基于 Arm 的微控制器 — TI E2E 支持论坛
但本文并未说明如何通过在“存储器“中添加 userconfig 存储器来修改“段“。
此致、
Kenley
尊敬的 Kenley:
客户是否要将这些.parameter 段数据存储到闪存或 SRAM 中?
通常、代码将存储在闪存的.text 段中、程序中的变量将存储在 SRAM (.data、.bss、.stack) 中。
根据您的说明、我认为客户希望在 SRAM 中分配一个段来存储一些特定参数。
它们可以定义.parameter 扇区、如下所示:
如您所述、他们可以 在其源代码中使用__attribute__((section(“.parameter")“)) 来定义.parameter 扇区中的变量。
此致、
Pengfei