FAT12_Loader:动态加载APP,干掉一切上位机软件!!!
思考这两个东西:FLASH里存储着上百个游戏程序,单片机能动态加载自由运行吗?
不用上位机软件,不用串口,能把Keil生成的HEX文件写进单片机吗?(就是往优盘里一拖就能用了这样的)
第一个问题好说。动态加载,那肯定IAP没别的,毕竟咱51的RAM里不能跑程序啊。可以写个BootLoader把外部FLASH里的APP程序丢进去运行运行,凭借STCAI内部FLASH的超长寿命,动态加载问题不大。
那文件怎么写进FLASH呢?哦对,STC8H有USBMSC!于是就可以把MSC的程序也当做APP扔进FLASH,用的时候加载一下,连电脑十六进制写盘不就完事,,,诶不对,你的十六进制查看器是哪来的?HEX转BIN程序又是哪来的?不是说不用上位机软件的吗。
很明显,跑MSC的单片机并不知道自己往FLASH里写的是什么。要想让它知道,就当上FAT了。没错,MSC-FAT强强联手!这个方案并不稀奇,论坛里许多大佬都实现了,但是用的普遍是完整的FAT32。且不说FLASH小于8M没法用的问题,对于bootloader来说,现流行的通用FAT(ZNFAT,FATFS之类)都显得冗杂了。如果用于BootLoader,我们的FAT不用支持写入,不要长名,不用支持目录,不用支持日期时间,不用支持通配,唯一要的,就是小小小,编译出来不要超过4K!那这样的骨折FAT,去哪找呢?好吧可能不太好找,反正本人没找到合适的。
那就自己写一个吧。。。因为是要读取电脑格式化过的FLASH。而不是像ZNFAT那样单片机格式化完给电脑读。
(这里得说一下,PC识别FAT类型其实并不是读DBR里的什么BS_FileSysType项,绝大多数情况它仅仅通过空间大小判断!!Microsoft要求8M以上被识别FAT32,所以并不是Znfat不支持小容量FLASH,而是因为太小了话电脑会不把他当FAT32看。。)
一通乱写之后,我们的只读FAT就写好啦。其实这个东西非常好写,原因是因为电脑格式化8M以下磁盘(8M以上的还没试)的过程全是套路!比如簇大小就是4096B,两个FAT表永远在物理1,2扇区,文件目录表永远在物理3~6簇,一个簇就正好是一个4096B扇区,文件簇的扇区号就等于簇链值+5,,,这些核心参数直接就知道了,所以你愿意了话连0的DBR都不用读,直接跳过就是任性!!
说了这么多,直接代码奉上吧。
诶,既然你的MCU都能自己加载APP了,那可不可以有一个标准化的硬件电路(比如咱们的实验箱),再加上一套标准化的软件程序(提供标准外设API,文件系统API之类的),让大家按这套标准编写的APP能在任何装有此BootLoader的标准硬件上运行?
说白了,就是STCAI小模块(做的好了话当手机使也不成问题了),里面的APP由大家开发。什么游戏啊,播放器啊,电子琴啊,闹钟啊,计算器啊,让固件APP能四处流通,并且加载到FLASH里随用随拿,从而构建起8051的特色生态!
这要靠大家一起努力了吧
可以直接拖拽加载海量AP,同时也不影响正常当优盘用
HEX文件也可直接加载,在Bootloader里带有HEX解码程序。
当然加载转码过的BIN会快很多。
八级优化编译出来11个K,九级优化加Favorsize能小于10K。其中文件系统编译出来应该占3K多 编写的应用程序时候要在Keil里设置三个地方
1:STARTUP.A51里CSEG改为0x3000
2:工程里代码起始地址改为0x3000
3: 中断向量偏移量改为0x3000
这样编译出来的HEX文件就可以直接拖进去用了,中断什么的都不用考虑正常用就行,bootloader里做过处理了 这是什么啊,听起来很牛逼的样子 soma 发表于 2024-4-20 21:15
这是什么啊,听起来很牛逼的样子
支持FAT12和HEX解码的BootLoader 不光能放蜂鸣,还能放wav(stc8h例程包里的) _NCY_ 发表于 2024-4-20 21:29
不光能放蜂鸣,还能放wav(stc8h例程包里的)
解码加载HEX会慢一倍
本帖最后由 tzz1983 于 2024-4-20 21:54 编辑
思路不错,之前我也想过这么玩.
就是把BIN文件用MSC往FLASH里扔,
然后就相当于装载代码了.
用户如果熟练还可以玩出很多新花样,
比如把常用的BIN都放在FALSH,相当于应用商店.
要用哪个就菜单上选一下就OK
在淘宝上已经有一些M3/M4的TFT, 已实现
用这种方式把多个型号的代码放在一起供用户选择
不过如果是官方做的话,
肯定是做个简版的来实现基本IAP功能,不会搞得花里胡诮
或许官方不会去做, 额外的ISP引导空间也是要钱的哈,
总不能把本来属于用户的空间占用了吧