主题中讨论的其他器件:HALCOGEN
工具/软件:TI C/C++编译器
尝试从我在中找到的引导加载程序中生成有用的内容:
这将为引导加载程序分配2 MB、这将使其无用。
我计划最初分配48KB、使用闪存0的前3 x 16KB 扇区。
我无法对闪存进行编程并从同一闪存执行代码、因为计划是从闪存开始
并使用 ramfuncs。
我声明要从 RAM 执行的许多函数。:
设置编译器以添加开关"--ramfunc=on"
在链接器命令文件中、我设置:
内存{
(笑声)
RAMFUNC (rwx):origin=0x08070000 length=0x00010000
(笑声)
}
部分{
(笑声)
binit align (32):{} > FLASH0
.status align (32):{__APP_STATUS_ADDRESS =.;}> STATUS
.app align (32):{__APP_START_ADDRESS =.;}> APP0 | APP1
.TI.ramfunc align (32):{}load=FLASH0,run=RAMFUNC,table (BINIT)
(笑声)
}
在映射文件中、我会得到.TI.ramfunc 段
* 0 00000040 00006470 运行 ADDR = 08070000
00000040 00000af0 hL_sci.obj (.TI.ramfunc)
(笑声)
我还会得到一个包含复制表的.binit 段
binit 0 00007c40 00000010
00007c40 00000010 (.binit)
链接器生成的复制表
_TI_cinit_table @ 00007c30记录:2、大小/记录:8、表大小:16
.data:load addr=00007c00、load size=00000015字节、run addr=08001500、run size=00000431字节、compression=lzss
.bss:load addr=00007c28、load size=00000008字节、run addr=08001940、run size=000000c8字节、compression=zero_init
binit @ 00007c40记录:1、大小/记录:12、表大小:16
.TI.ramfunc:load addr=00000040、load size=00006470、run addr=08070000、run size=00006470、compression=none
我可以看到 ramfunc 符号是在 RAM 中定义的
08070000 sciInit
080701d4 sciSetFunctional
080701f4 sciSetBudrate
08070290 sciIsTxReady
有几个问题:
- 从闪存将 ramfuncs 复制到 SRAM 的什么位置?
- 我是否需要在应用程序中进行复制?
- 编译器能否生成调用 F021_API_CortexR4*.lib 的代码?
- 如果是、我如何确保所有这些 F021代码都从 SRAM 运行?
- 引导加载程序使用 RTI、但 RTI 代码和所有其他 HALCoGen 生成的代码不应从闪存运行。
- 应该可以在 HALCoGen 中指定中断处理程序是 RAMFUNC
- 是否有一个示例、可以在其中替换 VIM 中的中断处理程序?