各位大神:
背景:6678的工程。自己汇编编写bootload的函数,从emif启动,裸工程跑时能够从flash正常启动并运行。
bootload函数用.sect".bootload"语句限定段分配空间,且在cmd文件中放在section中的最前面:
SECTIONS
{
.bootload > L2SRAM
…
}
用hex6x.exe将.out文件转换为.hex文件,bootload函数所在段也位于.hex文件中的第一块数据段。
编写烧写工程,将第一段(即bootload函数所在段)烧写进flash芯片的0x00地址中,即可成功启动dsp。
问题:
1、建立带sysbios的工程,在.cfg文件中分配section:
Program.sectMap[".bootload"] = "L2SRAM";
Program.sectMap[".cinit"] = "L2SRAM";
Program.sectMap[".const"] = "L2SRAM";
Program.sectMap[".switch"] = "L2SRAM";
…
但是和裸工程跑不一样的是,经过编译后,在.out文件中,.bootload段始终位于.cinit、.const、.switch、.text段之后(调整Program.sectMap顺序也不行;另外建立cmd文件,像裸工程跑一样建立SECTIONS也无法将.bootload段放置在这些段之前)。
请问有什么办法将.bootload段放置在这些段之前?
2、在bootload函数的最后,转跳入_c_int00()函数执行c runtime,请问有什么办法将_c_int00()函数入口地址固定在某个内存空间么?
万分感谢!
Thomas Yang1:
1 把bootload 单独定义1个memory,然后对它单独指定1个空间 位于其他段前面,你看行不行
2 可以在compiler中使用–entry_point= global_symbol,或者对c_int00所在的boot.c(如前所述,是您自己的代码,所以可以modify),进行code section的重定位