另类BootLoader实现思路:

[复制链接]
 楼主| 457878 发表于 2012-5-9 15:24 | 显示全部楼层 |阅读模式
本帖最后由 457878 于 2012-5-9 15:27 编辑

按这个思路,芯片不用复位,即可实现BootLoader下载,欢迎砸砖:

  1. /***********************************************************
  2. 芯片:PIC16F721
  3. 0010 main()
  4. 0100 DoUpdate()
  5. 0800 DoApp()
  6. 只要 “应用工程” 的Main函数指定在0x0800,即可实现BootLoader下载。
  7. ***********************************************************/
  8. #include <pic.h>
  9. typedef bit BOOL;
  10. __CONFIG(0x3FB4); //normal configuration
  11. __CONFIG(0x3FFD); //boot code protection
  12. //__IDLOC(1234);

  13. BOOL bUpdate = 0;
  14. BOOL DoUpdate(void) @ 0x0100;
  15. void DoApp(void) @ 0x0800;
  16. void main(void) @ 0x0010
  17. {
  18. RESET:
  19. NOP();
  20. NOP();
  21. if(!bUpdate)
  22. { goto NORMAL;
  23. }
  24. while(1)
  25. { if(DoUpdate() ==1)
  26.   { bUpdate = 0;
  27.    break;
  28.   }
  29. }
  30. NORMAL:
  31. while(1)
  32. { NOP();
  33.   DoApp();
  34.   if(bUpdate)
  35.   { NOP();
  36.    goto RESET;
  37.   }
  38. }
  39. }
  40. //++++++++++++++++++++++++++++++++++++++++++++++++++++ bootloader
  41. BOOL DoUpdate(void) @ 0x0100
  42. { return(1);
  43. }
  44. //++++++++++++++++++++++++++++++++++++++++++++++++++++ application
  45. void DoApp(void) @ 0x0800
  46. { //Dosomething..
  47. bUpdate = 1;
  48. }




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的判断?
 楼主| 457878 发表于 2012-5-10 09:09 | 显示全部楼层
4# yewuyi

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

2、出错的几率显然是不一样的,按照DFMA的思想去分析就知道了。
    头一次接触DFMA的概念,搜了下,发现以前一直就是这么做的,设计之前,连工位都帮他们安排好了...
    但我不不知道这个怎么用来分析出错几率?
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,你就那么做就是了,尝试尝试也没啥坏事。
 楼主| 457878 发表于 2012-5-10 10:13 | 显示全部楼层
wode112233 发表于 2014-4-18 10:19 | 显示全部楼层
学习了!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

270

主题

885

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部

270

主题

885

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部