我的第一款自己的serial bootloader是为Microchip PIC16单片机写的UART bootloader,我命其名为HyperBootloader_PIC16. 为什么取这个姓名,下面会讲。许多朋友可能会问为什么要自己写bootloader, 百度上一搜,有不少下载下来直接就能够用。比方ds30_Loader 就很不错,免费,还支撑Microchip许多系列的单片机。是没错,可是网上搜到的bootloader用C言语写的少得不幸,或许不能用,或许不是用XC8编译的(Microchip 的C编译器)。它们绝大多数都是用汇编写的,包含ds30_Loader。关于不怎么用汇编的我感觉很头疼,这些bootloader也不太好修正,比方增加个自己需求的功用都比较困难。所以我决议自己用C言语写PIC16 serial bootloader。说干就干,原本以为是小菜一碟,没想到写一个安稳好用又节约空间的bootloader也不简单,这是后话。在讲怎么完成自己的PIC16 serial bootloader之前,我先讲下serial bootloader的基础知识。假如不需求了解的,请越过这部分。
Serial bootloader之ABC
Serial bootloader是一种十分便利运用而且低成本的程序烧写的办法。一般状况,每次烧写Microchip单片机咱们都需求将烧录器PICKit3或ICD3接上方针板,然后在电脑上运用Microchip IPE或MPLAB X就能够直接烧写Hex文件到方针板中。运用serial bootloader 就能够不需求插拔烧录器,对开发工程师来讲十分的便利。Serial bootloader需求用到单片机的串口,所以单片机端需求如下硬件电路,其间DB9串口是和电脑的串口相连。
Serial bootloader 和应用程序相同也是烧录到程序存储器中,serial bootloader 和应用程序在程序存储器中需求分隔放置。所以serial bootloader一般有两种放置方法,一种是放置在程序存储器头部,另一种是放置在程序存储器底部,如下图所示。
Serial bootloader 能够运用烧录器PICkit3或ICD3烧到方针板上,之后更新应用程序就不需求烧录器了。方针板和电脑经过串口相连,电脑上运转一个串口通讯程序,将应用程序的Hex文件经过串口传给serial bootloader, serial bootloader 再将接收到的Hex数据烧录到程序存储器的正确的方位上。接下来便是讲今日的主角HyperBootloader_PIC16——我自己写的第一款PIC16单片机C言语 serial bootloader。
HyperBootloader_PIC16
HyperBootloader_PIC16我是仿照HI-TECH的PICC bootloader,因为我是用XC8的编译器的,所以有许多改动。上面有说到bootloader在程序存储器中要么是在头部要么是在底部,而HyperBootloader_PIC16 是在程序存储器的底部。与它通讯的电脑端的串口通讯程序是超级终端——HyperTerminal. 这也是它命名的由来。
首要代码段
HyerBootloader_PIC16是一款用C言语写的只占很少空间的serial bootloader。不到0x200程序字空间。 完成逻辑也很简单,首要代码段如下。
/*receiveahexfileviatheserialportandwriteittoprogrammemory*/for(;;)//loopunTIlendoffile{typedefunion{unsignedintword