打印

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

[复制链接]
3110|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
枢机主教|  楼主 | 2016-9-14 22:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 枢机主教 于 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。所以换回低版本并不能彻底解决问题。希望有人能解答一下这个问题。谢谢。



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

相关帖子

沙发
枢机主教|  楼主 | 2016-9-14 23:26 | 只看该作者
等等,貌似我已经搞定了

使用特权

评论回复
板凳
comeon201208| | 2016-9-16 13:34 | 只看该作者
#program的用法确定没有用错的?

使用特权

评论回复
地板
枢机主教|  楼主 | 2016-9-18 11:44 | 只看该作者
comeon201208 发表于 2016-9-16 13:34
#program的用法确定没有用错的?

#pragma没有用错,还在main函数上试了,可以最终生成自定义的段。

是因为boot.c中的boot()函数没有被调用。在CCS3.3中没有被优化掉,在CCS5.5中编译器给优化掉了,最后的输出文件中彻底没了,所以.map文件中就没显示出有自定义的段。所以用一个汇编文件调用一下boot()函数,然后就完美解决了。


不是我搞定的,发现师兄给的工程中有个汇编文件,加到自己的里面就好了,问了一下师兄为什么,师兄给解释的。师兄腻害

使用特权

评论回复
5
gygp| | 2016-9-18 22:43 | 只看该作者
楼主是什么问题?

使用特权

评论回复
6
gygp| | 2016-9-18 22:47 | 只看该作者
枢机主教 发表于 2016-9-18 11:44
#pragma没有用错,还在main函数上试了,可以最终生成自定义的段。

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

以前都是碰上不兼容问题。

使用特权

评论回复
7
枢机主教|  楼主 | 2016-9-19 22:05 | 只看该作者
gygp 发表于 2016-9-18 22:43
楼主是什么问题?

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

使用特权

评论回复
8
zhangmangui| | 2016-9-19 22:57 | 只看该作者
枢机主教 发表于 2016-9-19 22:05
CCS5.5编译器把一个函数给优化没了。

优化等级设置了?

使用特权

评论回复
9
枢机主教|  楼主 | 2016-9-19 23:17 | 只看该作者
zhangmangui 发表于 2016-9-19 22:57
优化等级设置了?

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

请问官方的烧写flash的方法是什么?

使用特权

评论回复
10
zhangmangui| | 2016-9-20 22:25 | 只看该作者
枢机主教 发表于 2016-9-19 23:17
没有,用的不是官方的烧写方法,所以搬运程序的C语言的函数没有被其他函数调用,所以被优化了。在一个汇 ...

直接debug就烧写进去了

使用特权

评论回复
11
枢机主教|  楼主 | 2016-9-20 23:16 | 只看该作者
zhangmangui 发表于 2016-9-20 22:25
直接debug就烧写进去了

啊?debug烧写进去需要什么设置吗?我每次debug都是到内部ram或者外扩的ram调试的。

使用特权

评论回复
12
zhangmangui| | 2016-9-21 22:24 | 只看该作者
枢机主教 发表于 2016-9-20 23:16
啊?debug烧写进去需要什么设置吗?我每次debug都是到内部ram或者外扩的ram调试的。 ...

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

使用特权

评论回复
13
GraceSun| | 2020-7-21 17:10 | 只看该作者
枢机主教 发表于 2016-9-18 11:44
#pragma没有用错,还在main函数上试了,可以最终生成自定义的段。

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

您好,不知道是否还能联系上,看到你的一个帖子,从CCS3到CCS5,把boot优化掉了,我也遇到了这个问题,请问如何写汇编文件解决,谢谢~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:I'm so lost in you, so what do I do?

5

主题

55

帖子

4

粉丝