各位专家、您好!
我正在尝试一个代码、我要在其中从一个位置跳转到另一个位置。 这是我的代码
#include
#include
#include
#include
#pragma LOCATION ="FLASHcode"//定义闪存段代码
void dummy_code ()@"FLASHcode"
{
int a=0、b=0;
(A=0;A<10;A++)
{
b=b+1;
//_NOP();
}
_NOP();
asm ("BR #0x4432");
}
unsigned char BSL_Flag = 0;
void TI_MSPBoot_JumpToBoot (void)
{
_disable_interrupt ();//禁用所有中断
伪代码();
}
静态空 clock_init (空)
{
CSCTL0_H = CSKKEY_H;
CSCTL1 = DCOFSEL_6;//设置 DCO = 8MHz
CSCTL2 = SELA_VLOCLK + SELM__DCOCLK + SELESS__DCOCLK;//设置 ACLK = VLO
// MCLK=SMCLK=DCO
CSCTL3 = DIVA__1 + DIVS_8 + DIVM_8;//除以 DCO/8
}
void test_jum_application()
{
int l;
for (l = 0;l<10;l++)
{
_NOP();
}
}
int main( void )
{
//停止看门狗计时器以防止超时复位
WDTCTL = WDTPW + WDTHOLD;
//初始化 MPU
//MPU_init();
clock_init();
TI_MSPBoot_JumpToBoot();
BSL_Flag = 0xED;
BSL_Flag = 0xE0;
test_jum_application();//地址位置0x4432
返回0;
}
问题是当它进入 dummy_code()时,它直接跳转到 test_jum_application,直到这个流程正常。 但是、在执行 test_jump 应用程序后、它将执行
BSL_Flag = 0xED;
BSL_Flag = 0xE0;
test_jum_application();
我想跳过上述三项陈述。
当我使用 asm ("BR #0x4432");语句时、为什么程序计数器正在执行上述语句。
是否有人能让我清楚地了解这一疑问?