打印

另类BootLoader实现思路:

[复制链接]
2311|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
457878|  楼主 | 2012-5-9 15:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 457878 于 2012-5-9 15:27 编辑

按这个思路,芯片不用复位,即可实现BootLoader下载,欢迎砸砖:
 
/***********************************************************
芯片:PIC16F721
0010 main()
0100 DoUpdate()
0800 DoApp()
只要 “应用工程” 的Main函数指定在0x0800,即可实现BootLoader下载。
***********************************************************/
#include <pic.h>
typedef bit BOOL;
__CONFIG(0x3FB4); //normal configuration
__CONFIG(0x3FFD); //boot code protection
//__IDLOC(1234);

BOOL bUpdate = 0;
BOOL DoUpdate(void) @ 0x0100;
void DoApp(void) @ 0x0800;
void main(void) @ 0x0010
{
RESET:
NOP();
NOP();
if(!bUpdate)
{ goto NORMAL;
}
while(1)
{ if(DoUpdate() ==1)
  { bUpdate = 0;
   break;
  }
}
NORMAL:
while(1)
{ NOP();
  DoApp();
  if(bUpdate)
  { NOP();
   goto RESET;
  }
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++ bootloader
BOOL DoUpdate(void) @ 0x0100
{ return(1);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++ application
void DoApp(void) @ 0x0800
{ //Dosomething..
bUpdate = 1;
}




沙发
yewuyi| | 2012-5-9 15:34 | 只看该作者
我理解的标准的BOOTLOAD是基本不会影响APP程序的资源占用的,如果BOOTLOAD始终占着很多资源不释放就不太合理了。

另外,重新RESET的好处就是不会导致程序随便被刷掉。

使用特权

评论回复
板凳
457878|  楼主 | 2012-5-9 17:06 | 只看该作者
2# yewuyi

哈哈,我觉得这两个都不是问题:

1. APP程序的资源占用,main中的两个While(1),保证资源占用为 0 ;

2. 随便被刷掉:除非程序出错,而这种出错的几率和正常BootLoader是一样的,如果这种出错会导致刷掉程序,那么在正常BootLoader中也会导致刷掉程序;
    (仅将:goto RESET; 改成 DoReset(); )

看来这个比常规BootLoader好用,"复位" 非常方便 :lol

使用特权

评论回复
地板
yewuyi| | 2012-5-9 17:19 | 只看该作者
2# yewuyi

哈哈,我觉得这两个都不是问题:

1. APP程序的资源占用,main中的两个While(1),保证资源占用为 0 ;

2. 随便被刷掉:除非程序出错,而这种出错的几率和正常BootLoader是一样的,如果这种出错会导致刷 ...
457878 发表于 2012-5-9 17:06


1、出错的几率显然是不一样的,按照DFMA的思想去分析就知道了。
2、资源尽量少占用可能,占用为0基本不可能,例如RAM的占用?例如进入APP的判断?

使用特权

评论回复
5
457878|  楼主 | 2012-5-10 09:09 | 只看该作者
4# yewuyi

1、资源尽量少占用可能,占用为0基本不可能,例如RAM的占用?例如进入APP的判断? ...
     a. RAM的占用: 在切换模式之前,已释放了所有RAM,因为我习惯不用全局变量,所以RAM占用为0
     b. 进入APP的判断: 与常规BootLoader 语句是一样的,占用时间更少,因为少了复位启动时间。

2、出错的几率显然是不一样的,按照DFMA的思想去分析就知道了。
    头一次接触DFMA的概念,搜了下,发现以前一直就是这么做的,设计之前,连工位都帮他们安排好了...
    但我不不知道这个怎么用来分析出错几率?

使用特权

评论回复
6
yewuyi| | 2012-5-10 09:54 | 只看该作者
4# yewuyi

1、资源尽量少占用可能,占用为0基本不可能,例如RAM的占用?例如进入APP的判断? ...
     a. RAM的占用: 在切换模式之前,已释放了所有RAM,因为我习惯不用全局变量,所以RAM占用为0
     b. 进入APP ...
457878 发表于 2012-5-10 09:09


;P ,你要认为都OK,你就那么做就是了,尝试尝试也没啥坏事。

使用特权

评论回复
7
457878|  楼主 | 2012-5-10 10:13 | 只看该作者
:L

使用特权

评论回复
8
wode112233| | 2014-4-18 10:19 | 只看该作者
学习了!!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

270

主题

885

帖子

3

粉丝