这个阶段课程渊源已久。上世纪90年代时单片机的大行其道是计算机单芯片化的开端。随着集成电路技术的发展,单芯片上集成的功能越来越强,终于在本世纪初发展出现了在单芯片上集成复杂计算机系统的技术(System-on-Chip SOC)。这使得原本需要独立运行在单独的计算机上的复杂的软件系统可以运行在(嵌入)小型的设备上。这就是“嵌入式系统”。这种系统的核心处理器被称为“嵌入式处理器”。
在讲授这部分课程时,讲师应当让学生同时接触到Intel架构以及ARM架构的指令。学生应当首先学习编写在操作系统环境下运行的汇编语言程序,然后在无操作系统环境下运行的裸板程序。归根结底,这个阶段课程教给学员分析和编写汇编语言程序的一般性方法,而非仅仅针对某个体系结构和汇编器。学员将学到超越某个具体指令集的汇编语言能力以及建立在此之上的自底向上的思考整个计算机体系的能力。
传统误区
完全地学习处理器体系结构需要具备大量的先修课程(主要是电路类课程),今天的学生不具备这些先修课程能力。传统的方式是首先讲解处理器体系结构,然后讲解指令集,再然后讲解汇编程序语法,再然后像C语言阶段一样写一些小程序,再然后...。但是很不幸,教学实践表明,由于无法安排足够的课时,这种方式的教学甚至无法让学员获得基本的分析和使用汇编代码的能力。同时由于处理器能力的增强导致嵌入式软件体系的复杂度大大提升的结果是芯片厂商包办了底层的诸如Bootloader之类的底层软件。同时大部分的嵌入式产品都通过运行某种操作系统环境提供应用层支持。直接在无操作系统环境下编程的程序员岗位在嵌入式行业中大大减少。这样一来,讲授裸机汇编的传统课程体系和新工程实践严重脱节。
问题分析
问题的根源在于现代程序员对于汇编语言的需求是很独特的。即使是在操作系统核心级别的代码中,用汇编语言写成的代码总量也不会很多。而当程序员开始和这些代码打交道时,往往意味着他碰到了关键的核心问题。这个时候问题的核心在于整体的软硬件结构而不是具体的汇编指令。现代的程序员在处理构成系统关键部分的汇编代码时,并不需要像计算机发展的早期时的汇编程序员那样精通某种汇编语言的每一个角落。只要“框架”清晰,指令集的障碍自然可以通过临时查阅相关体系结构的手册迈过。但是框架却不是临时能够建立起来的。
应当彻底改变这部分课程以适应新的工程实践。压缩繁琐的汇编指令教学,增加在操作系统环境下的关键汇编代码分析和设计,把原本放在汇编程序上的精力转移到SOC的体系结构和操作系统的底层机制上。
教师应当在C、内核这几个课程阶段展开多架构汇编语言视角的讨论。这样能够让学生在很长的时间跨度上去习惯用汇编语言的视角分析问题。在本阶段的教学中,首先在Linux环境下写汇编,然后才是裸板的汇编。这是因为经过前期的学习,学生对于Linux和C是比较熟悉的,使用汇编语言和这两种环境打交道会降低学习的难度梯度。
消除了学生对指令集的恐惧之后,再展开用汇编和C语言直接操作硬件的SOC课程环节。他们将通过这个环节了解到基于ARM的SOC体系结构特点,包括总线、地址、外设以及中断等等硬件知识。由于已经熟悉了汇编语言,所以此时的学生能够把精力集中在SOC体系结构本身上。这是组织课程的一种“超级技巧”,尤其用来解决那些复杂的课程环节:尽量避免在课程中同时出现两个或多个学生之前并不熟悉的知识体系(在这里就是汇编和SOC芯片)。通过重新规划这课程,甚至动用其它环节的课程以呼应这一阶段课程的方式降低学习的难度梯度。
Copyright © 2004-2024 华清远见教育科技集团 版权所有
京ICP备16055225号-5,京公海网安备11010802025203号