CCS5.5中 #pragma CODE_SECTION()自定义代码段实现

2019-07-20 17:04发布

本帖最后由 枢机主教 于 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。所以换回低版本并不能彻底解决问题。希望有人能解答一下这个问题。谢谢。



问题给搞定了,但是我好像没有分数来结贴。这个怎么办?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
枢机主教
1楼-- · 2019-07-20 17:59
等等,貌似我已经搞定了
comeon201208
2楼-- · 2019-07-20 21:50
#program的用法确定没有用错的?
枢机主教
3楼-- · 2019-07-21 01:37
 精彩回答 2  元偷偷看……
gygp
4楼-- · 2019-07-21 03:13
 精彩回答 2  元偷偷看……
gygp
5楼-- · 2019-07-21 08:03
枢机主教 发表于 2016-9-18 11:44
#pragma没有用错,还在main函数上试了,可以最终生成自定义的段。

是因为boot.c中的boot()函数没有被调 ...

以前都是碰上不兼容问题。
枢机主教
6楼-- · 2019-07-21 12:04
gygp 发表于 2016-9-18 22:43
楼主是什么问题?

CCS5.5编译器把一个函数给优化没了。

一周热门 更多>