OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7828|回复: 43

LPC21XX的BootLoader的实现

[复制链接]

54

主题

1012

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
发表于 2014-8-24 20:19:11 | 显示全部楼层 |阅读模式

由于工作需要,用到ARM7的芯片LPC2132IAP,初次接触ARM7,历时2天时间,终于成功完成BootLoader的编写,下面和大家分享一下使用心得,方便大家的使用。

要完成BootLoader,首先得实现IAP

LPC21XXIAP使用比较简单,芯片手册上有具体介绍,我就不多说了。主要用到以下几个函数。

 

以下是一些定义:

#define IAP_ENTER_ADR   0x7FFFFFF1  // IAP入口地址定义

 

/*

 *  定义IAP命令字

 */

#define IAP_Prepare             50

#define IAP_RAMTOFLASH        51

#define IAP_ERASESECTOR        52                                                               

#define IAP_BLANKCHK          53

#define IAP_READPARTID        54

#define IAP_BOOTCODEID       55

#define IAP_COMPARE          56

/*

*  定义IAP返回状态字

 */

#define CMD_SUCCESS                                0

#define INVALID_COMMAND                            1

#define SRC_ADDR_ERROR                             2

#define DST_ADDR_ERROR                             3

#define SRC_ADDR_NOT_MAPPED                        4

#define DST_ADDR_NOT_MAPPED                        5

#define COUNT_ERROR                                6

#define INVALID_SECTOR                             7

#define SECTOR_NOT_BLANK                           8

#define SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION    9

#define COMPARE_ERROR                              10

#define BUSY                                       11

 

/*

 *  定义CCLK值大小,单位为KHz

 */

#define IAP_FCCLK            (60000)  /* 此频率值必须同主频相同 */

#define EEPROM_STARTSEC            4

#define EEPROM_ENDSEC              8

 

#define EE_SUUCEESS                0

#define IAP_ERROR                  1

#define PARA_BANK_ERROR           2

#define PARA_SRCADDR_ERROR         3

#define PARA_OVERFLOW_ERROR       4

 

//IAP写入字节数

typedef enum

{

    MODE0 = 256,

    MODE1 = 512,

         MODE2 = 1024,

    MODE3 = 4096,

}IAPWRITEMODE;

 

//IAP擦除的扇区

typedef enum

{

    SECTOR0,

    SECTOR1,

         SECTOR2,

    SECTOR3,

         SECTOR4,

    SECTOR5,

         SECTOR6,

    SECTOR7,

         SECTOR8,

}IAPCHANNEL;

 

IAP函数实现:

/*

 *  定义函数指针 

 */

void (*IAP_Entry) (unsigned long ulParam_tab[], unsigned long ulPesult_tab[]) = (void(*)())IAP_ENTER_ADR;

 

unsigned long   GulParamin[8]; /* IAP入口参数缓冲区 */

unsigned long   GulParamout[8];

 

/*  IAP出口参数缓冲区 */

/*********************************************************************************************************

** Function name:       sectorPrepare

** Descriptions:        IAP操作扇区选择,命令代码50

** input parameters:    ucSec1:           起始扇区

**                      ucSec2:           终止扇区

** output parameters:   GulParamout[0]:   IAP操作状态码,IAP返回值

** Returned value:      GulParamout[0]:   IAP操作状态码,IAP返回值

*********************************************************************************************************/

unsigned long  sectorPrepare (unsigned char  ucSec1, unsigned char  ucSec2)

{ 

    GulParamin[0] = IAP_Prepare; /* 设置命令字 */

    GulParamin[1] = ucSec1; /* 设置参数 */

    GulParamin[2] = ucSec2;

    (*IAP_Entry)(GulParamin, GulParamout); /* 调用IAP服务程序 */

  

    return (GulParamout[0]); /* 返回状态码 */

}

 

/*********************************************************************************************************

** Function name:       ramCopy

** Descriptions:        复制RAM的数据到FLASH,命令代码51

** input parameters:    ulDst:             目标地址,即FLASH起始地址。以512字节为分界

**                      ulSrc:             源地址,即RAM地址。地址必须字对齐

**                      ulNo:              复制字节个数,为512/1024/4096/8192

** output parameters:   GulParamout[0]:    IAP操作状态码,IAP返回值

** Returned value:      GulParamout[0]:    IAP操作状态码,IAP返回值

*********************************************************************************************************/

unsigned long  ramCopy (unsigned long  ulDst, unsigned long  ulSrc, unsigned long  ulNo)

{ 

    GulParamin[0] = IAP_RAMTOFLASH; /* 设置命令字 */

    GulParamin[1] = ulDst; /* 设置参数 */

    GulParamin[2] = ulSrc;

    GulParamin[3] = ulNo;

    GulParamin[4] = IAP_FCCLK;

    (*IAP_Entry)(GulParamin, GulParamout); /* 调用IAP服务程序 */

   

    return (GulParamout[0]); /* 返回状态码 */

}

 

/*********************************************************************************************************

** Function name:       sectorErase

** Descriptions:        扇区擦除,命令代码52

** input parameters:    ucSec1             起始扇区

**                      ucSec2             终止扇区92

** output parameters:   GulParamout[0]:    IAP操作状态码,IAP返回值

** Returned value:      GulParamout[0]:    IAP操作状态码,IAP返回值

*********************************************************************************************************/

unsigned long  sectorErase (unsigned char ucSec1, unsigned char  ucSec2)

{ 

    GulParamin[0] = IAP_ERASESECTOR; /* 设置命令字 */

    GulParamin[1] = ucSec1; /* 设置参数 */

    GulParamin[2] = ucSec2;

    GulParamin[3] = IAP_FCCLK;

    (*IAP_Entry)(GulParamin, GulParamout); /* 调用IAP服务程序 */

 

    return (GulParamout[0]); /* 返回状态码 */

}

 

/*********************************************************************************************************

** Function name:       blankChk

** Descriptions:        扇区查空,命令代码53

** input parameters:    ucSec1:              起始扇区

**                      ucSec2:              终止扇区92

** output parameters:   GulParamout[0]:    IAP操作状态码,IAP返回值

** Returned value:      GulParamout[0]:    IAP操作状态码,IAP返回值

*********************************************************************************************************/

unsigned long  blankChk (unsigned char  ucSec1, unsigned char  ucSec2)

{ 

    GulParamin[0] = IAP_BLANKCHK; /* 设置命令字 */

    GulParamin[1] = ucSec1; /* 设置参数 */

    GulParamin[2] = ucSec2;

    (*IAP_Entry)(GulParamin, GulParamout); /* 调用IAP服务程序 */

 

    return (GulParamout[0]); /* 返回状态码 */

}

 

/*********************************************************************************************************

** Function name:       parIdRead

** Descriptions:        读器件标识号,命令代码54

** input parameters:   

** output parameters:   GulParamout[0]:    IAP操作状态码,IAP返回值

** Returned value:      GulParamout[0]:    IAP操作状态码,IAP返回值

*********************************************************************************************************/

unsigned long  parIdRead (void)

{

    GulParamin[0] = IAP_READPARTID; /* 设置命令字 */

    (*IAP_Entry)(GulParamin, GulParamout); /* 调用IAP服务程序 */

 

    return (GulParamout[0]); /* 返回状态码 */

}

 

/*********************************************************************************************************

** Function name:       codeIdBoot

** Descriptions:        Boot代码版本号,命令代码55

** input parameters:   

** output parameters:   GulParamout[0]:    IAP操作状态码,IAP返回值

** Returned value:      GulParamout[0]:    IAP操作状态码,IAP返回值

*********************************************************************************************************/

unsigned long  codeIdBoot (void)

{

    GulParamin[0] = IAP_BOOTCODEID; /* 设置命令字 */

    (*IAP_Entry)(GulParamin, GulParamout); /* 调用IAP服务程序 */

 

    return (GulParamout[0]); /* 返回状态码 */

}

 

/*********************************************************************************************************

** Function name:       dataCompare

** Descriptions:        校验数据,命令代码56

** input parameters:    ulDst:             目标地址,即RAM/FLASH起始地址。地址必须字对齐

**                      ulSrc:             源地址,即FLASH/RAM地址。地址必须字对齐

**                      ulNo:              待比较的字节数。计数值应当为4的倍数字

** output parameters:   GulParamout[0]:    IAP操作状态码,IAP返回值

** Returned value:      GulParamout[0]:    IAP操作状态码,IAP返回值

*********************************************************************************************************/

unsigned long  dataCompare (unsigned long  ulDst, unsigned long  ulSrc, unsigned long  ulNo)

{ 

    GulParamin[0] = IAP_COMPARE; /* 设置命令字 */

    GulParamin[1] = ulDst; /* 设置参数 */

    GulParamin[2] = ulSrc;

    GulParamin[3] = ulNo;

    (*IAP_Entry)(GulParamin, GulParamout); /* 调用IAP服务程序 */

 

    return (GulParamout[0]); /* 返回状态码 */

}

以下为用户区代码:

写扇区,mode一共四种,而且只能使用这四种写入方式:2565121024或者4096字节

uint8 eepromWrite(uint32 WriteAddr, uint8 *pBuffer, IAPWRITEMODE mode)

{

    uint8 ucErr = 0;

        

         __disable_irq();

 

    if (WriteAddr >  64 * 1024)

    {

                  __enable_irq();

        return PARA_BANK_ERROR;

    } 

   

    if ((((unsigned long)pBuffer) % 4) != 0 )

    {

                   __enable_irq();

       return PARA_SRCADDR_ERROR; 

    }

        

         ucErr = sectorPrepare(EEPROM_STARTSEC, EEPROM_ENDSEC);

         ucErr = ramCopy(WriteAddr, (unsigned long)pBuffer, mode);

         ucErr = dataCompare(WriteAddr, (unsigned long)pBuffer, mode);                  

          

         if (ucErr != CMD_SUCCESS)

         {                       /*  IAP函数调用出错 */

                   __enable_irq(); 

                   return IAP_ERROR;

    }

        

         __enable_irq();

    return EE_SUUCEESS;

}

擦除扇区,一次至少擦除一个扇区,在写之前必须擦除。

uint8 eepromErase(IAPCHANNEL StartSec, IAPCHANNEL EndSec)

{

    uint8 ucErr = 0;

        

         __disable_irq();

 

         ucErr = sectorPrepare(StartSec, EndSec);

         ucErr = sectorErase(StartSec, EndSec);

         ucErr = blankChk(StartSec, EndSec);

          

         if(ucErr != CMD_SUCCESS)

         {                       /*  IAP函数调用出错 */

                   __enable_irq(); 

                   return IAP_ERROR;

    }

        

         __enable_irq();

    return EE_SUUCEESS;

}

读扇区,读取相应地址处的数据

void eepromRead(uint32 ReadAddr, uint8 *pBuffer, uint16 NumToRead)

{

    uint16 i;

 

    for (i = 0; i < NumToRead; i++)

    {   

        pBuffer = *(uint8 * )ReadAddr;

        ReadAddr += 1;

    }

}

 

在成功实现IAP功能后,就是BootLoader的编写了,BootLoader实现比较简单,里面完成APP的写入即可,APP的写入大家可以按需要实现,用串口等方式进行数据的传输。在APP写完后将PC指针跳转到指定位置即可。PC指针的跳转相信大家都不陌生,使用以下方法实现:

//定义一个函数类型的参数

typedef  void (*iapfun)(void);

iapfun jump2app;

 

jump2app = (iapfun)0x4000;//APPROM地址

 (*jump2app)();      

 

BootLoader的编写需要注意RAM的设置。

由于IAP使用到RAM顶部的32个字节,因此KEIL中设置RAM大小时要用总大小减去0X20。我使用的单片机RAM总大小为16K,因此SIZE设置为0X3FE0。如图:


 

完成BootLoader的编写,下面就是APP的实现了。

在编写APP之前,我们先看一下ARM7的中断向量表:


这是ARM7中断向量表的存放位置,由于BootLoader中用到了这部分中断,因此APP中无法继续使用这个向量表,因此必须实现中断向量表的重映射,回头查看芯片手册,发现支持中断向量表的RAM映射。

首先看一下BootLoaderAPP的具体存放位置:


ROM中底部存放BootLoader,接着存放APP

RAM中底部64个字节存放32字节中断向量表以及额外的32个字节。接着留给APP的使用,最顶部32字节给IAP使用。

下面是KEIL工程的具体设置:

 

工程设置好后:就是中断向量表的COPY和重映射的实现。

这部分工作要在复位的时候设置好,打开启动文件,完成以下修改:

这部分在KEIL自带的启动文件中有,因此只要打开宏开关即可,如果使用的启动文件没有的话,可以自己添加,打开宏的方法:

 

在这之前要先完成中断向量表的COPY

;定义RAM基地址

RAM_BASE        EQU                 0x40000000

; Copy Exception Vectors to Internal RAM

                                     IF              EF:RAM_INTVEC

                                     ADR          R8, Vectors

                                     LDR           R9, =RAM_BASE

                                     LDMIA      R8!, {R0-R7}

                                     STMIA      R9!, {R0-R7}

                                     LDMIA      R8!, {R0-R7}

                                     STMIA      R9!, {R0-R7}

                                     ENDIF

为了更加通用,加一下宏开关,使用时工程中作相应设置:

完成以上所有工作即可实现BootLoader的使用,谢谢支持,四人行出品。

态度决定一切
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164883
金钱
164883
注册时间
2010-12-1
在线时间
2099 小时
发表于 2014-8-24 23:35:21 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

54

主题

1012

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
 楼主| 发表于 2014-8-25 09:02:32 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
恩,不客气撒。
态度决定一切
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2015-5-22
在线时间
0 小时
发表于 2015-5-22 15:24:17 | 显示全部楼层
回复【3楼】冰封嗜魔:
-------------------------------你好!最近在学习这块内容,经常出问题,能否提供下源程序学习下,谢谢!邮箱:huwengui2011@163.com
回复 支持 反对

使用道具 举报

54

主题

1012

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
 楼主| 发表于 2015-5-29 16:10:44 | 显示全部楼层
回复【4楼】huwengui2011:
---------------------------------
可以的,回去发给你。
态度决定一切
回复 支持 反对

使用道具 举报

72

主题

2719

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-5-29 20:14:19 | 显示全部楼层
厉害,没用过arm7,2天搞成IAP,真是高效率,
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

54

主题

1012

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
 楼主| 发表于 2015-5-30 10:51:36 | 显示全部楼层
回复【6楼】龙之谷:
---------------------------------
我之前也没用过,只能慢慢钻研啦。
态度决定一切
回复 支持 反对

使用道具 举报

29

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
351
金钱
351
注册时间
2013-12-17
在线时间
80 小时
发表于 2015-6-9 20:11:44 | 显示全部楼层
能不能把全部的startup.s发出来。
回复 支持 反对

使用道具 举报

54

主题

1012

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
 楼主| 发表于 2015-6-10 15:14:53 | 显示全部楼层
回复【8楼】liehanr:
---------------------------------
我想上传源码的,但是这个帖子不好编辑了。
态度决定一切
回复 支持 反对

使用道具 举报

29

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
351
金钱
351
注册时间
2013-12-17
在线时间
80 小时
发表于 2015-6-11 12:55:31 | 显示全部楼层
回复【9楼】冰封嗜魔:
---------------------------------
加个QQ行吗?我的Q号1061848257.或者这个QQ邮箱1061848257@qq.com
万分感谢。
回复 支持 反对

使用道具 举报

54

主题

1012

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
 楼主| 发表于 2015-6-11 16:06:26 | 显示全部楼层
回复【10楼】liehanr:
---------------------------------
源码发给你了
态度决定一切
回复 支持 反对

使用道具 举报

22

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-6-14
在线时间
0 小时
发表于 2015-7-1 16:14:45 | 显示全部楼层
回复【11楼】冰封嗜魔:
---------------------------------
发一个源码ok最近有个项目也要用到bootloader。邮箱:562630670@qq.com
越是自由的环境中越要自律
回复 支持 反对

使用道具 举报

54

主题

1012

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
 楼主| 发表于 2015-7-3 15:09:08 | 显示全部楼层
回复【12楼】bingge191:
---------------------------------
已发
态度决定一切
回复 支持 反对

使用道具 举报

22

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-6-14
在线时间
0 小时
发表于 2015-7-3 16:35:27 | 显示全部楼层
回复【13楼】冰封嗜魔:
---------------------------------
谢谢,已收到!
越是自由的环境中越要自律
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-1-9
在线时间
2 小时
发表于 2015-9-6 13:55:26 | 显示全部楼层
回复【3楼】冰封嗜魔:
---------------------------------
你好,可以将源码发给我参考下吗?谢谢~
我的邮箱:sandy-jor@126.com
谢谢!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2015-9-7
在线时间
0 小时
发表于 2015-9-7 13:21:21 | 显示全部楼层
回复【11楼】冰封嗜魔:
---------------------------------
楼主,可以把源码发给我下吗,最近案子有需要,非常感谢!
我的邮箱:8343216@qq.com
回复 支持 反对

使用道具 举报

54

主题

1012

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
 楼主| 发表于 2015-9-9 14:47:32 | 显示全部楼层
回复【16楼】yangbingb:
---------------------------------
好的
态度决定一切
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2016-1-20
在线时间
1 小时
发表于 2016-1-20 17:30:21 | 显示全部楼层
顶!
可以把源码发给我下吗,最近案子有需要,非常感谢!
我的邮箱:182419498@qq.com
回复 支持 反对

使用道具 举报

54

主题

1012

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
 楼主| 发表于 2016-1-21 17:48:59 | 显示全部楼层
lping1015 发表于 2016-1-20 17:30
顶!
可以把源码发给我下吗,最近案子有需要,非常感谢!
我的邮箱:182419498@qq.com

发了,注意查收一下。
态度决定一切
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2016-2-29
在线时间
0 小时
发表于 2016-2-29 16:19:46 | 显示全部楼层
楼主,可以把源码发给我吗?非常感谢!!!!信箱:314994940@qq.com
回复 支持 反对

使用道具 举报

54

主题

1012

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
 楼主| 发表于 2016-3-2 12:09:18 | 显示全部楼层
大龙猫 发表于 2016-2-29 16:19
楼主,可以把源码发给我吗?非常感谢!!!!信箱:

已发,查收。
态度决定一切
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2016-2-29
在线时间
0 小时
发表于 2016-3-2 13:24:37 | 显示全部楼层

收到了!!多谢楼主!!
回复 支持 反对

使用道具 举报

11

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
492
金钱
492
注册时间
2015-10-26
在线时间
123 小时
发表于 2016-3-22 17:14:54 | 显示全部楼层
麻烦楼主转发一份源码给我吧,学习学习,谢谢
role_2099@163.com
我想好好学习RTOS,不管哪一种,学会一种就行
回复 支持 反对

使用道具 举报

54

主题

1012

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
 楼主| 发表于 2016-3-23 09:46:28 | 显示全部楼层
role_2099 发表于 2016-3-22 17:14
麻烦楼主转发一份源码给我吧,学习学习,谢谢

已发,注意查收。
态度决定一切
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-6-4
在线时间
3 小时
发表于 2016-6-4 12:05:00 | 显示全部楼层
楼主你好,我最近在弄LPC1517的bootloader,其中串口读写,iap写flash这些都弄好了,不过跳转到APP的时候就飞了,不知道哪里出了问题。
楼主可以发份源码参考一下么?谢谢!! chris.deng@uurobot.cn
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-6-4
在线时间
3 小时
发表于 2016-6-4 12:18:35 | 显示全部楼层
楼主,是否用过LPCXpresso开发工具,我之前在几Keil中编写过STM32的bootloader,功能运行都正常。这次编写的Lpc1517bootloader基本流程都是一样的,跳转逻辑也是一样的,但是跳转后就会跑飞,因为对启动这方面不太熟悉,我在官方LPCXpresso的例程下做的修改,他的启动文件都是用c编写的,不知道有没有影响?
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-6-4
在线时间
3 小时
发表于 2016-6-6 16:22:52 | 显示全部楼层
楼主!还在不在?最近这个问题搞了好几天,一直没什么头绪,我修改了程序,程序自己跳转到自己(测试用),仿真观测跳转正常(中断寄存器、SP、PC指针都做了预期的修改)程序也可以跑到ResetISR(void) 后面继续执行SystemInit,但在SystemInit中会跑飞。搞不清楚到底是哪里出错了。
回复 支持 反对

使用道具 举报

54

主题

1012

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
 楼主| 发表于 2016-6-8 09:28:38 | 显示全部楼层
chris.deng@uuro 发表于 2016-6-6 16:22
楼主!还在不在?最近这个问题搞了好几天,一直没什么头绪,我修改了程序,程序自己跳转到自己(测试用), ...

你看看SystemInit里面做了什么,再单独屏蔽排除吧
态度决定一切
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2015-9-29
在线时间
1 小时
发表于 2016-6-19 15:58:57 | 显示全部楼层
实现的代码能否给我发一份,cnxijian@foxmail.com谢谢
回复 支持 反对

使用道具 举报

54

主题

1012

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
 楼主| 发表于 2016-6-20 08:37:11 | 显示全部楼层
webjj 发表于 2016-6-19 15:58
实现的代码能否给我发一份,谢谢

已发,请查收。
态度决定一切
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2013-1-21
在线时间
1 小时
发表于 2016-6-24 16:52:33 | 显示全部楼层
好东西,正好卡在IAP跳转APP死机这个点了,能否把你的startup.s文件发一份参考下,我发现我建的工程里没有找到你说的中断向量表重映射相关的内容。谢谢286303127@qq.com
回复 支持 反对

使用道具 举报

54

主题

1012

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
 楼主| 发表于 2016-6-24 17:22:43 | 显示全部楼层
wywen1205 发表于 2016-6-24 16:52
好东西,正好卡在IAP跳转APP死机这个点了,能否把你的startup.s文件发一份参考下,我发现我建的工程里没有 ...

发给你了,我的启动文件带free-RTOS的,你主要看配置IAP的配置,给你作参考。
态度决定一切
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2013-1-21
在线时间
1 小时
发表于 2016-6-25 21:24:41 | 显示全部楼层
冰封嗜魔 发表于 2016-6-24 17:22
发给你了,我的启动文件带free-RTOS的,你主要看配置IAP的配置,给你作参考。

收到,再次感谢
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2016-8-21
在线时间
0 小时
发表于 2016-8-21 15:15:10 | 显示全部楼层
最近也在搞这个bootloader,没啥头绪,可以发一份源码参考一下吗?邮箱25949846@qq.com,谢谢
回复 支持 反对

使用道具 举报

54

主题

1012

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
 楼主| 发表于 2016-8-22 19:08:38 | 显示全部楼层
hellohanjx 发表于 2016-8-21 15:15
最近也在搞这个bootloader,没啥头绪,可以发一份源码参考一下吗?邮箱,谢谢

已发,请注意查收。
态度决定一切
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-8-25
在线时间
3 小时
发表于 2016-8-25 10:14:25 | 显示全部楼层
楼主求源码   286934137@qq.com,谢谢
回复 支持 反对

使用道具 举报

54

主题

1012

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
 楼主| 发表于 2016-8-25 10:39:09 | 显示全部楼层
guoyulong2016 发表于 2016-8-25 10:14
楼主求源码   ,谢谢

已发,请注意查收。
态度决定一切
回复 支持 反对

使用道具 举报

54

主题

1012

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
 楼主| 发表于 2016-8-25 10:42:55 | 显示全部楼层
已上传boot-loader源代码。

LPC_IAP.zip

274.26 KB, 下载次数: 508

boot-loader

态度决定一切
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2017-7-17
在线时间
0 小时
发表于 2017-7-17 10:19:55 | 显示全部楼层
你好,可以将源码发给我参考下吗?谢谢~
我的邮箱:wei62937125@126.com
谢谢!
回复 支持 反对

使用道具 举报

54

主题

1012

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
 楼主| 发表于 2017-7-17 15:07:41 | 显示全部楼层
Vigor 发表于 2017-7-17 10:19
你好,可以将源码发给我参考下吗?谢谢~
我的邮箱:
谢谢!

已发,请查收。
态度决定一切
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2017-8-8
在线时间
1 小时
发表于 2017-8-8 16:35:31 | 显示全部楼层
您好!可以发一份源码学习一下么?谢谢!邮箱:megzheng88@126.com
回复 支持 反对

使用道具 举报

54

主题

1012

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
 楼主| 发表于 2017-8-8 17:28:15 | 显示全部楼层
megzheng88 发表于 2017-8-8 16:35
您好!可以发一份源码学习一下么?谢谢!邮箱:

已发,请查收。
态度决定一切
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2017-8-27
在线时间
0 小时
发表于 2017-8-27 21:19:43 | 显示全部楼层
好东西,请求楼主实现的代码给我发一份,wf-wyt@163.com谢谢
回复 支持 反对

使用道具 举报

54

主题

1012

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
 楼主| 发表于 2017-9-4 09:18:47 | 显示全部楼层
sdwfdahai 发表于 2017-8-27 21:19
好东西,请求楼主实现的代码给我发一份,谢谢

已发送
态度决定一切
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-5-24 05:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表