- 打卡等级:以坛为家II
- 打卡总天数:409
- 最近打卡:2025-06-19 00:10:56
金牌会员
- 积分
- 1605
|
发表于 2023-8-9 18:25:58
|
显示全部楼层
今天听陈老师的课有些学生对C已经是单片机主要的开放工具情况下还为啥讲汇编提出了疑问. 这里说下自己看发; 1.大多数应用确实用C比汇编容易, C数学运算下更接近自然语言, 汇编只是机器码的助记符. 使用上摆脱不了指令框架的束缚. 因此比较繁琐,也无法直接移植到其它指令系统; 也很难维护. 2. 如果不讲汇编, 讲单片机内部工作方法和体系就比较困难, 也不容易和其它单片机的区别对比. 通过汇编,就可以准确知道,每种指令执行时间, 寻址方式和范围. 如何具体执行的和影响内部各种寄存器的状态. 通过对比指令和运行时间, 可以对比各不同单片机的性能差异. 通过单片机硬件结构框图和具体指令实现,就知道单片机是如何工作的. 如果取指令,如何执行指令,每指令会运行多长时间. 3. 可以用于排错, 通过DEBUG中, C和其汇编单步分析, 可以找到程序是如何执行的,找出一些错误. 也可以计算C指令执行时间. 4. 在实时应用下,C的指令时间和其优化条件存储器选择不同, 运行时间很难确定. 用汇编就可以获得准确时间. 一些高手可以通过汇编遍出比C自动编译更好,更符合自己项目引用的模块或程序. 或减少内存和程序空间的占用.
总结, 不学汇编,编写单片机应用程序肯定没有问题. 但要搞清楚单片机内部如何执行的就很难. 不学会减少一种分析和排错的手段. 极限条件下,对运行时间,和节约存储器的应用可能不好做. 按目前硬件和软件发展情况下, 大概入门能看懂汇编指令就可以了. 不用花太多时间学习,除非是特殊情况. 51单片机用C编程,国内也是90年代末,才开始陆续在国内出现, 那个时候也不是用keil软件, 当时是其它几个公司做的C软件, 优化效果要差不少. BUG也比较多. 编译后的程序占用存储空间比较大, 那个时候硬件不是用8031等系列就是用ATMEL 51/52单片机, 芯片片内存只有128/256个字节, 烧写只能用编程器, 如果是EEPROM的话擦除也要10到30分钟. 没有仿真器做项目就很难. 后来出现ATMEL 51了要方便很多,就是烧程序比较麻烦, 每次烧写要把芯片拔下来, 不能在线编程. 当时在不外扩展内存情况下, 复杂一点的应用C用不了. C比较耗内存很容易溢出. 所以大部分公司都是用汇编. 现在51硬件水平大幅度提高, C的编译器也优化的比较完美, 现在的STC单片机不仅仅可以完全用C编程, 也可以上一些实时操作系统了. C的出现,确实大大降低了编程的入门门槛.也大幅度的提高了编程的效率. 已经完全进入了以C语言为主的编程时代, 汇编作为编程的手段已经大大降低, 一般情况下只是作为一种对问题的研究和运行的分析的手段就可以了. 所以汇编最好还是要学,但不用花太多时间,会看就可以了, 不需要花很大精力,毕竟不是经常使用很快也会忘记. |
|