Other Parts Discussed in Thread:MSP430F2131, MSP430F5437
我查阅MSP430F2131的用户手册发现,该芯片复位后,目标CPU会从0xFFFE执行,这是一个复位中断,那么我该如何从这个中断恢复,开始执行我自己的main程序呢?
Susan Yang:
复位向量由C编译器使用函数c_int00()自动处理。该函数会处理各种事情,例如设置堆栈和堆,初始化全局变量和静态变量以及branch到main()。
您可以看一下论坛上我之前的分享
e2echina.ti.com/…/192689
,
user6372742:
我其实更加关心的是:
我想要通过MSP430F5437控制JTAG编程,向MSP430F2131里烧录程序,但是我烧完程序后需要让MSP430F2131运行一段时间。
根据《Programming a Flash-Based MSP430 Using the JTAG Interface》里的描述,调用release释放从芯片后,2131会进入复位矢量。我想知道如何从复位矢量进入main函数运行?
,
user6372742:
您的答案我没太看懂,是不是我不用在程序里额外处理,复位中断会自己跳转到Main?
,
Susan Yang:
或许您可以看一下
6.9 System Initialization
我这边没有2131的板子,所以我用G2553来说明一下
在debug设置不自动跳到main
然后debug就会跳到
然后就会跳到boot.c中的
/*------------------------------------------------------------------------*//* Allow for any application-specific low level initialization prior to*//* initializing the C/C++ environment (global variable initialization,*//* constructers).If _system_pre_init() returns 0, then bypass C/C++*//* initialization.NOTE: BYPASSING THE CALL TO THE C/C++ INITIALIZATION*//* ROUTINE MAY RESULT IN PROGRAM FAILURE.*//*------------------------------------------------------------------------*/if(_system_pre_init() != 0){if (NEEDS_INIT)_auto_init();}/*------------------------------------------------------------------------*//* Handle any argc/argv arguments if supported by an MSP430 loader.*//*------------------------------------------------------------------------*/if (NEEDS_ARGS)_args_main();elsemain(0);exit(1); }在上面的语句中就会跳到main
,
user6372742:
我使用的是IAR,从芯片是什么确实不重要。
我是希望能从0xFFFE中断跳转到main的,为什么要在debug设置不自动跳到main呢?
,
Susan Yang:
IAR的话也是相同的流程
“为什么要在debug设置不自动跳到main呢?”
这个就是为了让您看清从reset跳到main函数这个过程经历了什么……不然直接设置自动跳到main,不就看不到这个过程了吗
,
user6372742:
好吧,那就是如果产生复位矢量0xFFFE,那我就不用处理了?可以自动跳转到Main函数运行,而我不用写什么中断处理函数?
,
Susan Yang:
是的,可以这样理解的