找回密码
 立即注册
查看: 2817|回复: 40

FAT12_Loader:动态加载APP,干掉一切上位机软件!!!

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-04 22:11:37
已绑定手机

36

主题

287

回帖

824

积分

高级会员

积分
824
发表于 2024-4-20 20:33:57 来自手机 | 显示全部楼层 |阅读模式
思考这两个东西:
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的特色生态!
       这要靠大家一起努力了吧
      
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-04 22:11:37
已绑定手机

36

主题

287

回帖

824

积分

高级会员

积分
824
发表于 2024-4-20 21:05:07 来自手机 | 显示全部楼层
可以直接拖拽加载海量AP,同时也不影响正常当优盘用
HEX文件也可直接加载,在Bootloader里带有HEX解码程序。
当然加载转码过的BIN会快很多。

VID_20240420_210024.mp4

75.79 MB, 下载次数: 106

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-04 22:11:37
已绑定手机

36

主题

287

回帖

824

积分

高级会员

积分
824
发表于 2024-4-20 21:07:36 来自手机 | 显示全部楼层
八级优化编译出来11个K,九级优化加Favorsize能小于10K。其中文件系统编译出来应该占3K多
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-04 22:11:37
已绑定手机

36

主题

287

回帖

824

积分

高级会员

积分
824
发表于 2024-4-20 21:10:21 来自手机 | 显示全部楼层
编写的应用程序时候要在Keil里设置三个地方
1:STARTUP.A51里CSEG改为0x3000
2:工程里代码起始地址改为0x3000
3: 中断向量偏移量改为0x3000
这样编译出来的HEX文件就可以直接拖进去用了,中断什么的都不用考虑正常用就行,bootloader里做过处理了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:422
  • 最近打卡:2025-05-01 09:54:52
已绑定手机

19

主题

3190

回帖

4866

积分

论坛元老

积分
4866
发表于 2024-4-20 21:15:18 来自手机 | 显示全部楼层
这是什么啊,听起来很牛逼的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-04 22:11:37
已绑定手机

36

主题

287

回帖

824

积分

高级会员

积分
824
发表于 2024-4-20 21:22:54 来自手机 | 显示全部楼层
soma 发表于 2024-4-20 21:15
这是什么啊,听起来很牛逼的样子

支持FAT12和HEX解码的BootLoader
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-04 22:11:37
已绑定手机

36

主题

287

回帖

824

积分

高级会员

积分
824
发表于 2024-4-20 21:29:26 来自手机 | 显示全部楼层
不光能放蜂鸣,还能放wav(stc8h例程包里的)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-04 22:11:37
已绑定手机

36

主题

287

回帖

824

积分

高级会员

积分
824
发表于 2024-4-20 21:35:13 来自手机 | 显示全部楼层
_NCY_ 发表于 2024-4-20 21:29
不光能放蜂鸣,还能放wav(stc8h例程包里的)

解码加载HEX会慢一倍

VID_20240420_212602.mp4

65.35 MB, 下载次数: 100

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-04 22:11:37
已绑定手机

36

主题

287

回帖

824

积分

高级会员

积分
824
发表于 2024-4-20 21:39:55 | 显示全部楼层
FAT12_Loader.zip (249.42 KB, 下载次数: 124)



点评

虽然还没下载看, 但感觉不错, 给您奉上鲜花  发表于 2024-4-20 22:02
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-4-20 21:51:05 | 显示全部楼层
本帖最后由 tzz1983 于 2024-4-20 21:54 编辑

思路不错,之前我也想过这么玩.
就是把BIN文件用MSC往FLASH里扔,
然后就相当于装载代码了.
用户如果熟练还可以玩出很多新花样,
比如把常用的BIN都放在FALSH,相当于应用商店.
要用哪个就菜单上选一下就OK

在淘宝上已经有一些M3/M4的TFT, 已实现
用这种方式把多个型号的代码放在一起供用户选择

不过如果是官方做的话,
肯定是做个简版的来实现基本IAP功能,不会搞得花里胡诮
或许官方不会去做, 额外的ISP引导空间也是要钱的哈,
总不能把本来属于用户的空间占用了吧

回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:18 , Processed in 0.198220 second(s), 109 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表