//NC1020闪存分配表
NC1020有512K闪存,闪存以 4K 为 1 族
我个人认为,NC1020以 4K 为 1 族 是不科学的,因为总计才 512K 的闪存,每 族就 4K,显然闪存的利用率是很低的
我举个例子,一个 才 200 字节 的文本,下载到 NC1020上,也要占据 4K 的字节,也就是说,不管你的文件有多小,最小
也要占据 4K 的闪存.
下面我再说说 系统占据闪存的情况:
内核: 总计占据 16 + 16 + 96 + 8 = 136K
00 页码的 8000-BFFF 16K
01-03 页码的 4000-BFFF 3 * 32 = 96K
C000-DFFF 8K
0F 页码的 8000-BFFF 16K
资料存储: 最小占据 4 + 20 + 4 + 4 + 4 = 36K
名片: 4K 闪存
行程: 20K 闪存
重要事项: 4K 闪存
记事: 4K 闪存
笔记便笺: 4K 闪存
下面总计: 4 * 8 = 32K
闪存分配表: 4K
各种文件目录列表: 4K
BIN文件列表: 4K
BAS文件列表: 4K
SKI文件列表: 4K
TXT文件列表: 4K
有声读物列表: 4K
字典数据列表: 4K
所以经过我的计算
NC1020 实际可利用闪存大小 = 512 - 136 - 36 - 32/2(因为有时候用户并没有下载全部类型文件) = 324K (左右)
下面我们说说NC1020闪存分配表,这个名字是我自己取的,也不管对还是错,反正可以大概描述就可以了,闪存分配表如下所示:
注意,闪存分配表的位置不是固定的,下面只是我机子上某时刻闪存分配表的位置.
为了方便系统管理 闪存,知道闪存的利用情况,方便系统分配闪存,NC1020的闪存里有一个表,从这个表就可以知道NC1020
全部闪存的分配情况,比如 哪个页码已经被利用了,是什么文件等,下面我们就来分析一下:
首先大家看到的是这样的数据:
7000: 57 51 58 46 6C 61 73 68
7008: 53 58 AA FF 80 00 FF FF
这些数据在每个表都是一样的,可能 是 标志,大家可以不管.
但是我们一般就是通过查找这16个字节来定位该表的位置,因为该表的位置是经常变的,所以我们要找到这张表
目前只能通过查找的方法,但是,实际上系统不是通过查找方法找到该表的,具体什么方法,目前我也不明确.
然后就是这样的数据:
7010: FF 5F FF 01 FF 5F FF 01
7018: FF 5F FF 01 FF 5F FF 01
...
7088:FF 5F FF 01 FF 5F FF 01
...
这里系统是以 4K为 1族,那么在闪存分配表中,是以 4 个字节代表 1族的,即是这样的:
7010-7013: FF 5F FF 01 表示00 页码 4000-4FFF
7014-7017: FF 5F FF 01 表示00 页码 5000-5FFF
....
7090-7093: ?? ?? ?? ?? 表示 04 页码 4000-4FFF
....
7208-720B: FF 5F FF 01 表示0F 页码 A000-AFFF
720C-720F: FF 5F FF 01 表示 0F 页码 B000-BFFF
在分配表里,这四个字节的内容是有意义的,具体如下:
FF 5F FF 01: 表示该 4K 闪存位置被 内核 占用
FF 5F FF 03: 表示该 4K 闪存位置被 闪存分配表 占用
FF FF FF FF: 表示该 4K 闪存位置 没有被占用,即是空闲 的闪存
00 5E 00 06: 表示该 4K 闪存位置被 根目录表 占用
XX 5E 00 04: 表示该 4K 闪存位置被 子目录表 占用
XX 5E YY C2: 表示 该 4N K (N=1,2,3,...)闪存被一般文件占用,包括 BIN文件,BAS,SKI等
XX 5E YY 18: 表示 该 4N K (N=1,2,3,...)闪存被 重要事项 占用
XX 5E YY 0C: 表示 该 4N K (N=1,2,3,...)闪存被 记事 占用
XX 5E YY 10: 表示 该 4N K (N=1,2,3,...)闪存被 笔记便笺 占用
XX 5E YY 0A: 表示 该 4N K (N=1,2,3,...)闪存被 行程 占用
XX 5E YY 08: 表示 该 4N K (N=1,2,3,...)闪存被 名片 占用
这里 参数 YY 表示文件的分块数,每块是4K,因为若文件为 16K,那么需要 16个字节来标志,但由于文件在 闪存中的
存储不一定是线形的,所以需要 YY 来标志,YY从 00 开始,然后是 01,02,03,04等,我们看下图:
这里我知道 XX 5E YY 0A,表示 被 行程 占用,我们通过 资料管理 得知,行程 占 5%,所以是 5 * 4 = 20K,那么这里就需要YY
了,我们看 最开始 06 5E 00 0A,代表文件最开始的 4K,然后就是 06 5E 01 0A,代表下一个 4K,依次类推.
这里有还有个参数XX,作用我们先不说,我们还是先分析下 根目录表 的结构,如图:
根目录表一般是在04 页码的 地址 5000开始,从偏移#$20开始就是正式的内容
根目录下有子目录,例如 应用程序,个人文档等,通过根目录,我们可以找到 子目录在闪存中的位置,子目录的信息等
我们就以上图的总目录表来举例:
5020: C0 说明子目录有效, 00 说明该子目录已经无效
5021: FF 说明该子目录有效 F7 说明该子目录为系统目录,不可以删除,比如 个人文档 目录
5022-5031: 子目录名字 在上图中,子目录名 为 "个人文档",最大子目录名 为8个汉字,如果少于8个汉字,后面补 20
5032: 子目录建立的 年 79: 2002年 7A: 2003年 ,依次类推
5033: 子目录建立的 月 00: 1月 01: 2月 ....
5034: 子目录建立的 日 00: 1日 01: 2日 ....
5035-5037: FF FF FF 没有发现有什么作用,可能是扩展功能用的
5038-503A: 一共 3个字节, 是标志子目录的大小的,一般就是 00 10 00,如果是8K,就是 00 20 00
503B: 这里就是最重要的了,就是 上面的参数 XX
这里我重点讲下 这里的 XX,通过XX,我们就能通过 闪存分配表 找到该子目录在 闪存中的位置
由于 :
XX 5E 00 04: 表示该 4K 闪存位置被 子目录表 占用
在上图中,XX= 01 那么我们就只要在 闪存分配表里 找 01 5E 00 04 就可以了,如下图:
我们在地址 7090 发现了,计算一下,就知道是在 04页码的地址 4000-4FFF
我们再来分析下 子目录表的 结构,如下图:
这里我们以 应用程序 这个子目录来分析,通过 这个子目录,我们可以知道如下信息:
1.BIN 文件的大小
2.文件建立 年月日
3.文件在闪存中的 位置
4.文件名字
B020-B021: C8 DF 代表该BIN文件有效 08 DF 代表该 BIN文件已经无效
B022-B031: BIN文件名,最大支持 6个汉字,后面一定要加 .bin
B032: BIN文件建立 年份 79: 2002, 7A: 2003, 7B: 2004.....
B033: BIN文件建立 月 00: 1月 01: 2月......
B034: BIN文件建立 日 00: 1日 01: 2日.......
B035-B037: FF FF FF 不知道有什么用
B038-B03A: BIN文件大小,这里注意的是 这里不是 BIN实际大小,而是 4K 的整数倍
00 10: 4K
00 20: 8K
但是如果是 01 20,系统就认为是 12K哦
B03B: XX 的值,这里是 04,那么我们只要在闪存分配表里 找 04 5E 00 C2,就能找到 该 BIN文件在闪存中位置
我们计算一下,就知道该 BIN的位置了,大家还要注意这时的 YY 的值,是不是 00 01 02 03 04 05
那么说明该 BIN 有 6* 4K= 24K