|
相关连接:天梯 之 从零开始玩PIC 系列文章
--------------------------------------------------------------------
天梯 之 从零开始玩PIC——11.关于FLASH操作的讨论
--------------------------------------------------------------------
程序匠人 发表于 2008-2-14 09:26 PIC 单片机 ←返回版面  |
146楼: 关于PIC的IAP功能,如何实现? |
看资料上说,可以通过串口方式,修改内部FLASH程序区域,实现在线升级。问题是,如何实现程序定位?望此中高手出来亮招
| |
yewuyi 发表于 2008-2-14 11:11 PIC 单片机 ←返回版面  |
147楼: 怎么弄上那个了? |
稍微看了一点,感觉和别的MCU的IAP基本一样,都需要一个引导程序,引导程序接受例如你的UART过来的数据并根据协议判断是数据还是地址,你的‘程序定位’是否就是说的代码地址?那是需要你的BOOTLOAD来确定的。
| |
hotpower 发表于 2008-2-14 12:24 PIC 单片机 ←返回版面  |
149楼: 87X好象没有自带固化的BOOTLOAD |
程序匠人 发表于 2008-2-14 12:30 PIC 单片机 ←返回版面  |
150楼: 严格意义上来说,匠人不是想做IAP |
而是想通过串口来修改程序空间里的表格内容。由于这些表格也是放在FLASH中,因此,匠人想原理应该和IAP差不多吧。
只是,C编译器里,如何确定表格的地址呢?
| |
yewuyi 发表于 2008-2-15 08:51 PIC 单片机 ←返回版面  |
155楼: |
87X没有固化的BOOTLOAD,需要自己写。
‘表格的地址怎么确定’好象不是什么大问题把?
不能取得地址的话,你定的表格怎么查啊?!
如果你只是想修改一下表格的话,其实很好办啊,不需要什么BOOTLOAD: 1:程序中定义一个数组,用它存你的表格,这个数组可以在EE/FLASH/RAM中 估计你的表格不能放在RAM中,那只能是EE和FLASH了 2:UART接受表格数据和表格地址,并把接受到的数据按照接受到的表格地址 写入EE或FLASH中 3:写EE和FLASH的代码你自己已经在上面整出来了 4:程序中一定要防止写FLASH越界,否则把CHIP中代码冲掉了可和我没关系,呵呵,俺建议你还是放EE中把~~
| |
程序匠人 发表于 2008-2-15 10:16 PIC 单片机 ←返回版面  |
157楼: 回yewuyi |
说明几点: 1、表格内容是显示点阵图片(每一帧需要180个字节)。匠人目前还有空余空间约6k,想全部用来做点阵图片。并且希望这些图片可通过串口来修改。eeprom中只有256个单元。因此,必须放在flash中。
2、PICC是自动分配程序的地址空间的,而我们读写FLASH时必须有明确的地址。这就是匠人的困扰所在。也就是说,默认的图片内容存放地址与程序运行时读写该图片存放地址如何统一?
| |
martin 发表于 2008-2-15 12:50 PIC 单片机 ←返回版面  |
158楼: 匠人不要困扰,不能绝对定位,但可以绝对避开 |
PICC是不可以对程序或数据绝对定位的,但是编译器有命令行选项来让编译器绝对避开某些区域。 避开的方法是,在Build options窗口中的PICC Compiler和PICC Linker的命令行选项中加入: --ROM=0-XXX 例如,要避开16F877程序末尾的512个字,可以 --ROM=0-1E00 当然,还可以避开程序中间的某个区域,具体请参看PICC Maunal里的--ROM命令行说明。
避开了某个区域,这个区域的地址范围是绝对的。 Flash的读,写,擦除都是可以绝对地址定位的。 那么,程序就可以对这个避开区域的地址范围进行Flash数据读写擦除操作了。
但是,有一个问题,就是这个区域的数据不能在芯片烧录时就写进初始化数据(因为编译器产生的HEX已经完全避开了这个FLash数据区)。不过匠人已经写了串口下载程序,那么就等芯片烧录好了之后,用串口接收然后写进这个区域就好了。
注:--ROM命令行本人在PICC 9.60上测试过,不确定低版本的PICC是否可行。
| |
程序匠人 发表于 2008-2-15 12:54 PIC 单片机 ←返回版面  |
159楼: 送martin一条裤子先 |
回头去试试看。不过正如你所说的,问题似乎没有圆满解决。
“但是,有一个问题,就是这个区域的数据不能在芯片烧录时就写进初始化数据(因为编译器产生的HEX已经完全避开了这个FLash数据区)。”
| |
|