热度 38
2014-7-14 16:48
3171 次阅读|
9 个评论
观察 uController 的视角 我们几乎无法回到 ARMv4 之前的年代, 因为 Architecture Reference Manaul 已经不建议我们这样做. 这种回溯可能毫无意义. 因为今天我们探讨 26-bit 的 instruction 显然是过时的(尽管 ARM 声称这种奇怪长度的 instruction 编码仍然被"保留"给将来的拓展). 当我们注意观察 ARMv4 ~ v6 时, 我们检查一颗 uController 的视角是被我们熟知的, 看啦, 首先是指令集, 甚至某种角度上说, 任何 mcu 的设计初衷, 都是围绕指令集完成的. 它必须致力于设计好的运算与控制器, 在读取了助记符和操作码后, 一丝不苟在指定 cycles 中完成 instruction 的定义. 好的, 除了 instruction set, 我们当然要晓得 exception, 甚至连 reset 都是 exception 中的一种, 从 uController 启动之初, 就应当得到我们的关注. exception 细节有很多, 一般包括优先级, 抢占, chains of exception, tail chain, 出于了解 uController 的视角所在, 从 uController 主动执行 sequence entry 到 return, 从它 push 必要的 context, 到 return 时的 pop, 我们从必要文档比如架构参考手册中, 可以了解得通通透透. 另外要提及的必须是 register. 无论是参与 instruction 执行的 core register(它们是 RISC, 也几乎可以说是 load/store 结构的必然), 因为我们总是无法在 memory 中直接执行指令. 另外的 status register (有时也包括 control register 与其他) 也是需要学习的必然. (这里我们举例说明的都是 RICS 的 uController 比如说是 ARM). 其他要提到的 register 是 system register, 有趣的是, 与 core register/status register 不同的是, 他们都可以被 memory mapped 的, 它们具有 memory address. 比方说要控制上一个段落中提到的 exception 中的一种 interrupt 的控制器 (NVIC). 此外比方说 memory register 与 其他在 SCS 中存在的 debuger register 之类(比如说的 cortex -M0). 这里的 memory register 相关的可能包括 VMSA(based on MMU), 或者是 PMSA. 当然的, 建立一个合适的 memory architecture 也是如此的重要. 首先我们需要知道比如 code, sram, device 在整个 memory mapped 中所占的空间(对于 32-bit mcu, 这"整个"往往指 4G byte size). 其次, 我们需要知道 memory 属性. 值得大书特书的就是, ARMv6 开始, memory 属性, 由偏于物理physics 的概念(比方说 bufferable 与 cachable), 走向了偏于理论总结的概念, 比方说 normal, device, strongly-order momeory 的引入. 当我们讨论无论属于哪种 mcu architecture 的 instruction set 的时候, 我们都不可避免要引入对 (basic) data type 的定义, 当然她们是 byte halfword word, 比方说在 ARM 定义中. 让我们一起回顾刚刚说的一切. 啊, 木有错的, 在我们的学习手册中, 上述内容都有着一个专业的名称叫作"编程模型(programer's model)". 作为 embedded enigneer, 我们研究的对象, 不是 implement 与 integrate, 而是着重对于上述内容, 即所谓 program model 进行学习与 review. 最终的目的是在, assember 的帮助下, 学习 instruction set, 并转换成合适的二进制码, program 到 uController 中运行. 当然是在合理的 register 配置下, 以及 exception 的掌握下. 同时, 我们也暂时没有提到更高级的语言要使用的 compiler tool. 以及在调试过程中的 debuger tool. 好, 这就是观察(学习) uController 的视角(对于我们研习 embedded system 的工作者而言), 有什么问题吗? -- 是的, 存在需要进一步讨论的议题. , 因为: 以上只是 ARMv4 ~ v6 的视角. 大约在 2000年前后, v5 得到了定义(v4得到更早定义), 我们回忆, 大致在 2000年代初, 由于海量 mobiles 在全球范围的发布, 给予 ARM 成长的勃勃生机(基于 v4, v5 的 device 甚至可能高达数十亿部). 大约在 2004年, v6 定义发布. 这是的 VMSA(基于 MMU), 以及 cache 的广泛使用, 以及 coprocessor 的定义使用得到了推广, 这意味除了 ARM7 之外, 我们可以利用上 ARM9, ARM11 等, 在 embedded system 中跑所谓通用的 operate system, 无论是当年的 winCE 或者 Linux 或其他. 可以当作 v6 是对 memory architecture 的重大总结(normal, device, strongly-order momery 概念的提出). 也可以假设 v6 是"传统" ARM 架构的最后一个版本. 新的 ARMv7 版本, 比方说 ARMv7-M 在2006年最初诞生时(ARMv7-M 的成熟版本一直改到 2000年), 我们有了一个观察 uController 的新视角: 这就是所谓: Application level architecture 与 System level architecture. Application level architecture 毫无疑问的, instruction set 被放置到了 "应用级架构" 进行说明.(题外话, instruction set 往往是占据架构手册的最大章节). instrcution set 往往具有不同 variants 的稳定性的特点, 也就是 instruction 往往不会变化太多, 而向下兼容, 它是汇编器, 编译器, 连接器, 反汇编器设计的基础(不包括调试器). 围绕着 instruction, exception 被简单的提及与说明. 并包括有一个 application 级别的 momery model. 尽管没有明确说明, 我们几乎可以假设为, application level architecture 已经有助于我们在 embedded system 中设计出诸如前后台系统的简单架构. 或者说, 为后面的 system level architecture 提供了基础的应用代码基础. System level architecture 值得特别提及的, exception 被详细阐述. 毫无疑问的, system register 被逐条说明(意义, 以及read/write 的细节). 这甚至引入了新的概念, 一般指 memory architecture 的引入, 是虚拟空间体系架构(VMSA) -- 这往往引入了 cache 与 MMU. 还是仅仅只是保护空间体系架构(PMSA)呢? 这个疑问来得刚刚好, 因为以上区分(VSMA与PSMA), 几乎可以认为是 ARMv7-A 与 ARMv7-R 的最重要的区分点之一. 无论在系统级架构上, 要讨论的 MSA, 可能是 VMSA或者是 PMSA.还是说, 在 memory mapped 的 system register 将引入的 PENDSV 与 SYSTIMER, 都向我们解释了这样一个事实: 今天的 uController 的设计, 以及需要我们 embedded enigneer 观察的视角, 都必须上升到 sytem level. 哪怕甚至是对于预备与 8bit mcu 进行市场竞争的 ARMv7-M 与 v6-M. 它们在设计时, 已经注意了 memory architecture 与 priveleged 的拓展. 并通过 SVCall 与 PendSV 随时准备进入 system 调用(至少以 priveleged mode 访问 SCS与PPB). 并且通过 system timer (systick) interrput 的设计, 为任何一个 realtime operate system 作好准备. 更远意义上的, 我们观察 uController 的视角, 从过去单纯的统一的 programmer model. 到应用级架构与系统级架构的分离, 暗示我们, 随着 uController 工艺的发展, 资源的丰富, 在一个极低成本上的 uController 上, 过去往往仅限于 8bit mcu 世界的应用中, 将愈来愈多引入 realtime operate system, 并提供着比以往更丰富的互联互通 interface. 从观察 uController 的新视角出发, 我们得出了这样的结论, 我们怀疑可见的未来, uController 的愈小size, 愈大资源, realtime operate, 以及俞广泛的高速互连 interface, 将把我们未来世界带到一个更加互联(或者说更靠近"物联网"概念)的新世界. 从青年学生的学习角度推广一下: 80年代初第一台通用 computer 距离我们很遥远, 因为社会封闭的历史缘故, 导致了 uController 领域的专业人才涌现土壤的缺失. 而 ARM 在 2000年后, 从 v4 架构到今天的 v7, v8 架构, 从资源缺失的狭隘 microController 领域到MMU管理的多核 processors 应用下的高端服务器市场的冲击, 这个电子产业的进步, 发生正在进行时. 多份文档都暗示我们, 它们的编写历史甚至就在眼前, 举例基于 ARMv6-M 的 cortex m0+ 的初始 trm 文档甚至产生于 2012 年. 这意味着, 今天中国大陆的初中生, 高中生, 甚至大学在校生, 与 ARM 的历史大跃进发展没有任何时间滞后. 不存在当初"通用"CPU 发展的时代落后. 我觉得中国大陆的青年同学们, 比我们有更优越的时代基础, 更可能应抓住这一难得的历史机遇. 在与外界同步的工程土壤中, 未来或可诞生本土的 uController 设计, 应用, 创造的行业顶尖人才吧! Allen Zhan 作于 EETC 2014.7.13