实际上,您编写的任何代码都会比这更大,除非它是单一用途的芯片。有没有办法从外部存储或其他东西加载更多的程序内存?我只是好奇,我不明白这怎么会很有用......但它必须是。
谁能使用只有 384 字节程序存储器的微控制器?
孩子们,离开我的草坪!
384 字节的空间足以在汇编程序中创建相当复杂的东西。
如果您回顾历史,回到计算机只有一个房间那么大的时代,您会发现在 <1k 内完成了一些真正令人惊叹的艺术壮举。
例如,阅读经典的梅尔故事 - 真正的程序员。诚然,这些家伙有 4096 字的记忆可玩,颓废的异教徒。
还可以查看一些旧的演示场景比赛,其中的挑战是将“介绍”放入软盘的引导块中,典型的目标是 4k 或 40k,并且通常设法包括音乐和动画。
编辑添加:事实证明,您可以用 320 个字实现世界上第一个 100 美元的科学计算器。
为年轻人编辑:
- 软盘 = 软盘。
- Bootblock = 启动时读取的软盘的第一个扇区。
- Demoscene = 黑客团体之间的编程竞赛。
- 汇编器 = 如果您太软而无法使用 8 个拨动开关和“存储”按钮,则可以用奇特的方式对设备进行编程。
微控制器足够便宜,以至于它们经常被用来做非常简单的事情,而在过去几年里,这些事情更有可能用离散逻辑来完成。真的很简单的事情。例如,可能希望设备每 5 秒打开输出一秒,这比 555 定时器能够做到的更精确。
movwf OSCCON
mainLp:
; Set output low
clrf GPIO
movlw 0xFE
movwf TRIS
clrwdt
call Wait1Sec
clrwdt
call Wait1Sec
clrwdt
call Wait1Sec
clrwdt
call Wait1Sec
; Set output high
bsf GPIO,0
clrwdt
call Wait1Sec
goto mainLp
Wait1Sec:
movlw 6
movwf count2
movlw 23
movwf count1
movlw 17
movwf count0
waitLp:
decfsz count0
goto waitLp
decfsz count1
goto waitLp
decfsz count2
goto waitLp
retlw 0
这将是一个真实的、可用的应用程序,代码空间不到 32 个字(48 个字节)。人们可以很容易地添加一些选项来让一些 I/O 引脚控制时序选项,并且仍然有很多空间可供使用,但即使所有芯片所做的正是上面显示的内容,它仍然可能比使用离散的任何替代方案更便宜、更容易逻辑。顺便说一句,clrwdt
指令可以移动到子程序中,但这样做会使事情变得不那么健壮。如前所述,即使故障导致返回地址堆栈损坏,在执行返回到主循环之前,看门狗也不会得到馈送。如果这从未发生过,看门狗将在几秒钟后重置芯片。
“仅”384 字节?
回到过去,我的工作是(自己)为一台服务于船舶、管道和炼油厂管理行业的专用计算机编写整个操作系统。该公司的第一个此类产品是基于 6800 的,并且正在升级到 6809,他们希望新的操作系统能够与 6809 一起使用,这样他们就可以消除原始操作系统的许可成本。他们还将引导 rom 的大小从 32 字节增加到 64 字节。如果我没记错的话——那是大约 33 年前的事了!- 我说服工程师给我 128 字节,这样我就可以将整个操作系统的设备驱动程序放在 rom 上,从而使整个设备更加可靠和通用。这包括:
- 带按键去抖动的键盘驱动程序
- 视频驱动程序
- 磁盘驱动程序和基本文件系统(摩托罗拉“abloader 格式”,IIRC),具有将“存储”内存视为真正快速磁盘空间的内置能力。
- 调制解调器驱动程序(他们倒退了 FSK,所以这些调制解调器只相互通信)
是的,所有这些都是最简单的,并且经过手工优化以消除每个无关的循环,但完全可用且可靠。是的,我把所有这些都塞进了可用的字节中——哦,它还设置了中断处理、各种堆栈,并初始化了实时/多任务操作系统,提示用户启动选项,然后启动系统。
几年前,我的一位仍隶属于该公司(其继任者)的朋友告诉我,我的代码仍在使用中!
你可以用 384 字节做很多事情......
您可以将其用于非常小的应用程序(例如延迟 PSU 启动、555 定时器更换、基于 TRIAC 的控制、LED 闪烁等),其占用空间比您使用逻辑门或 555 定时器所需的要小。