关于MSP430和CCS的几个难度比较大的问题!!!

[复制链接]
2823|6
 楼主| johdon23 发表于 2015-4-9 16:49 | 显示全部楼层 |阅读模式
本帖最后由 johdon23 于 2015-4-9 17:26 编辑

- 问题1:个人的理解,MSP430复位之后,根据复位中断向量首先会调用_c_int00_noexit()函数。
               我是通过断点监控预启动程序 _system_pre_init(),发现它是被位于$\ccsv6\tools\compiler\msp430_4.3.3\lib\src路径下的boot.c
               中的_c_int00_noexit()函数所调用,因而得出此结论。
               所以可以认为_c_int00_noexit()函数的首地址是整个程序的入口地址。
               这一点,在编译得到的map文件中也得到了印证。在map文件的最开始,有如下描述:
               ENTRY POINT SYMBOL: "_c_int00"  address: 0000e000                  这个地址与map文件中描述的_c_int00_noexit()函数的地址一致!
               我现在的问题是,_c_int00_noexit()函数的这个地址,是否可以按照需要进行指定??
               我尝试了修改boot.c文件中对_c_int00_noexit()函数的定位,但是不起作用!??

- 问题2:如何在汇编跳转指令中调用C语言中定义的地址变量。我有试过网上找到的几篇**介绍的方法,行不通。能否给出具体例程?

- 问题3:如何在汇编跳转之后,返回之前的程序地址。我测试发现,强行用汇编跳转到一个函数的首地址,函数执行完后,无法返回之前的地址,程序死了。

- 问题4:如果定义了某个函数,但它在程序中没有被调用,那么编译之后,CCS不会给这个函数分配相应的地址空间。
               但我只想为这个函数分配一个地址空间,而不想去调用它,可行吗?
               对于这个问题,大家如果有兴趣,又装了CCS的话,很容易就试出来了:
               定义一个函数,但程序里不去调用它,然后编译,通过查看map文件,可以发现map文件根本没有为这个函数分配任何的地址空间。
shenmu2012 发表于 2015-4-9 20:05 | 显示全部楼层
如何在汇编跳转指令中调用C语言中定义的地址变量?有点难度的。
dirtwillfly 发表于 2015-4-9 22:26 | 显示全部楼层
第一个问题需要查查资料才能回答
dirtwillfly 发表于 2015-4-9 22:29 | 显示全部楼层
第二个问题,建议固定这个变量的储存位置,这样比较容易处理和使用
dirtwillfly 发表于 2015-4-9 22:32 | 显示全部楼层
第三个问题,正常调用一个函数,除了开始进入函数的入口地址之外,最后还会返回到原来的进程或者地址。
使用汇编直接跳到一个函数的首地址,执行完毕,记得加上返回的汇编代码
dirtwillfly 发表于 2015-4-9 22:35 | 显示全部楼层
第四个问题,可以实现的。注意ccs的优化选项
cowboy2014 发表于 2015-4-30 11:35 来自手机 | 显示全部楼层
总结的挺好的,学到不少知识
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

71

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部