本帖最后由 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文件根本没有为这个函数分配任何的地址空间。 |