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条回答
zhangmangui
1楼-- · 2019-07-21 12:26
枢机主教 发表于 2016-9-19 22:05
CCS5.5编译器把一个函数给优化没了。

优化等级设置了?
枢机主教
2楼-- · 2019-07-21 18:07
zhangmangui 发表于 2016-9-19 22:57
优化等级设置了?

没有,用的不是官方的烧写方法,所以搬运程序的C语言的函数没有被其他函数调用,所以被优化了。在一个汇编文件中调用了一次。

请问官方的烧写flash的方法是什么?
zhangmangui
3楼-- · 2019-07-21 23:16
 精彩回答 2  元偷偷看……
枢机主教
4楼-- · 2019-07-22 02:04
zhangmangui 发表于 2016-9-20 22:25
直接debug就烧写进去了

啊?debug烧写进去需要什么设置吗?我每次debug都是到内部ram或者外扩的ram调试的。
zhangmangui
5楼-- · 2019-07-22 06:24
枢机主教 发表于 2016-9-20 23:16
啊?debug烧写进去需要什么设置吗?我每次debug都是到内部ram或者外扩的ram调试的。 ...

那说明你的cmd是ram的   默认就可以  如果要设置  需要在工程属性下设置相关擦除等操作

一周热门 更多>