本帖最后由 枢机主教 于 2016-9-18 11:52 编辑
大家好,我有个问题向大家求助。问题如下:
为了实现DM642的自启动,需要将代码拷贝的挂在DM642的CE1空间的NorFlash中,且电路配置为从外部ROM启动,上电后外部1k数据自动拷贝到到内部SRAM,程序从0地址开始执行。
我是用了两个工程,一个是要实现主要功能的工程,同时里面包含了一个boot.c文件中,里面只有一个函数boot(),这个函数的功能是被搬运到内部ram后把外部flash中剩下的程序拷贝到内部ram,然后触发中断,控制交给被这个函数考到内部ram的剩下的程序。其他的文件都是实现主要功能的。 另外一个工程就是将被下载到内部ram的另外一个工程的输出文件拷贝到外部rom,这个工程的输出文件不进入外部flash,只要在内部ram执行以下。
上面说的可能不是很清楚,但是做过的人对于这个过程应该还是很清楚的。
之前在CCS3.3上操作是没有问题的。后来我把实现主要功能的工程移植到了CCS5.5下面,大家应该知道,为了让boot那段程序占用正好1k,是需要将boot()函数映射到一个自定义的代码段上的,这个代码段再放在一个CMD文件分配的1K的空间上的。也就是在boot.c文件中需要有一句:#pragma CODE_SECTION(boot,"bootload"); 然后在CMD文件中MEMORY里面分配一段1k的空间,名字就叫BOOT吧,在SECTIONS里面将 .bootload 这个自定义的段放到 BOOT这个1K的空间里。
在CCS3.3下面操作的时候没有问题,生成的.map文件种显示有 .bootload 段,并且可以看到 BOOT这段空间被使用了一部分,同样的东西移动到CCS5.5下面之后,编译通过,但是最终.map文件中没有显示有 .bootload 这个段,而且BOOT空间显示没有被使用。也就是 #pragma CODE_SECTION(boot,"bootload"); 这句话并没有产生应该有的作用。
有人碰到过这种问题吗?后面一些工作肯定是要在5.0以上版本完成的,因为可能会用到C6678。所以换回低版本并不能彻底解决问题。希望有人能解答一下这个问题。谢谢。
问题给搞定了,但是我好像没有分数来结贴。这个怎么办?
|