子鱼 发表于 2014-4-13 23:17:27

lpc1768 iap遇到的问题

在做iap编程 遇到点问题

在0x10000放置的是用户代码 在iap中使用下面代码进行跳转
        UserProgram = (void (*)()) (0x00010004);
        (*UserProgram)() ;
       
单步调试F11可以进入到用户程序 但是使用F10及全速不能正常工作 不知道是哪里出现问题

看不见 发表于 2014-4-14 00:18:48

你这是函数指针的形式,直接这样不可以吧,
SCB->VTOR= APP_START_ADDR;      // 应用程序地址 重新定义向量表
在加载堆栈指针的位置和复位中断的入口地址
                /* Load main stack pointer with application stack pointer initial value,
                   stored at first location of application area */
                ldr r0, =APP_START_ADDR
                ldr r0,
                mov sp, r0

                /* Load program counter with application reset vector address, located at
                   second word of application area. */
                ldr r0, =APP_START_ADDR+4
                ldr r0,
      BXr0
                           

子鱼 发表于 2014-4-14 08:39:36

看不见 发表于 2014-4-14 00:18
你这是函数指针的形式,直接这样不可以吧,
SCB->VTOR= APP_START_ADDR;      // 应用程序地址 重新定 ...

仿真的时候使用F11 单步能够进入到用户程序的首地址 可是全速不行 F10也不行 所以我觉得KEIL在使用F11的时候会不会发送些特定的命令?

用户程序调试的时候是可以的

子鱼 发表于 2014-4-14 19:59:41

请大家帮忙呢

子鱼 发表于 2014-4-14 22:48:24

看不见 发表于 2014-4-14 00:18
你这是函数指针的形式,直接这样不可以吧,
SCB->VTOR= APP_START_ADDR;      // 应用程序地址 重新定 ...

你这个是用于用户程序的吧 我现在用户程序的没有问题 只是由bootloader跳转到用户程序时出错

nongxiaoming 发表于 2014-4-15 01:00:01

这样是可以的,我的bootloader是这样跳转的:
    void (*user_code_entry)(void);
    user_code_entry = (void (*)(void))(USER_START_SECTOR_ADDRESS | 0x00000001);
    user_code_entry();
和楼主不同的是我后面地址只+1,楼主地址+4。
我是按官方的例子做的,里面也是+1,就是开始是设置sp,pc指的是下一个地址。这里的void指针应该是占的4个字节。

看不见 发表于 2014-4-17 22:09:20

子鱼 发表于 2014-4-14 22:48
你这个是用于用户程序的吧 我现在用户程序的没有问题 只是由bootloader跳转到用户程序时出错 ...

你要在跳转之前,关闭外设,
页: [1]
查看完整版本: lpc1768 iap遇到的问题