This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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



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

  • 问题1、你可以修改.xcl文件来配置存储程序的flash或者fram起始位置

    问题2、没用过汇编,这个帮不了你了

    问题3、正常情况是,在调用一个函数的时候,通用寄存器和一些环境变量会被压入栈内,执行完该函数,这些数据会出栈重新赋值给对应的寄存器等。这样才能恢复到调用该函数前的状态。

    问题4、你的想法是可行的。不过需要修改ccs默认的优化等级。ccs默认的优化等级会把这类函数给优化掉。