主题中讨论的其他器件:HALCOGEN、 TLK111、 DP83640
工具与软件:
您好!
我目前正在使用位于0x00000000的引导加载程序。 引导加载程序代码由 halcogen 生成、只需使用函数指针从其主函数调用0x00200000处的函数。 在0x00200000处、我手动放置闪烁二进制文件、其作用类似于应用代码。 闪烁代码按照以下链接器脚本进行编译、因此闪烁代码的异常向量位于0x00200000。
这里的想法是、当处理器从0x00000000开始时、它完成了初始化、在引导加载程序的 main 函数中、它跳转到0x00200000处的闪烁代码的复位矢量。 然后、0x00200000处的分支指令分支到 blinky 的_c_int00、再次重新初始化一切、然后执行它的 main。
我能够使其从引导加载程序跳转到闪烁的复位处理程序、然后开始初始化。 然而、代码在 blinky 的_TI_auto_init ()函数(具体在 run_cinit 中)中时、会进入预取中止。 如果我在这里丢失了什么东西、有人会告诉我。 TI_auto_init (或 run_cinit)函数与位置无关吗?
Blinky 代码链接器脚本如下:
/*------------------ */
/*链接器设置*/
--retain="*(.intvecs)"
/*用户代码 begin (1)*/
/*用户代码结束*/
/*------------------ */
/*内存映射*/
小程序
{
/*用户代码 begin (2)*/
/*用户代码结束*/
VECTORS (X):origin=0x00000000 length=0x00000020
FLASH0 (RX):origin=0x00000020 length=0x001FFFE0
FLASH1 (RX):origin=0x00200000 length=0x00200000
堆栈(RW):origin=0x08000000 length=0x00001500
RAM (RW):origin=0x08001500 length=0x0007EB00
/*用户代码 begin (3)*/
/*用户代码结束*/
}
/*用户代码 begin (4)*/
/*用户代码结束*/
/*------------------ */
/*段配置*/
部分中)
{
/*用户代码 begin (5)*/
/*用户代码结束*/
.intvecs :{}>向量
.text align (32):{}> FLASH0 | FLASH1.
.const align (32):{}> FLASH0 | FLASH1.
.cinit align (32):{}> FLASH0 | FLASH1
.pinit align (32):{}> FLASH0 | FLASH1.
.bss :{}>RAM.
.data :{}>RAM.
.sysmem :{}> RAM.
/*用户代码 begin (6)*/
/*用户代码结束*/
}
/*用户代码 begin (7)*/
/*用户代码结束*/
/*------------------ */
/*其他*/
/*用户代码 begin (8)*/
/*用户代码结束*/
/*------------------ */






