社交|嵌入式开发:如何为PIC?或AVR?MCU编写裸机代码

社交|嵌入式开发:如何为PIC?或AVR?MCU编写裸机代码

【社交|嵌入式开发:如何为PIC?或AVR?MCU编写裸机代码】微芯片结合了令人印象深刻的PIC和AVR微控制器(MCU)系列 , 拥有市场领先的8位MCU系列 。 作为一名嵌入式开发人员 , 理想情况下 , 为给定项目选择MCU是基于哪个设备(外围设备)最适合实现应用程序的功能 。
通常 , 这取决于MCU上不同外设的组合 。 例如 , 你可能有严格的模拟测量应用要求 , 要求仔细检查MCU的模数转换器(ADC) 。 在一种应用中 , PICMCU的10位模拟数字转换器(ADCC)外围设备(视频)可能具有优势 , 因为支持各种类型的独立于核心的后采样计算 。 对于另一个应用 , AVRMCU的12位差分ADC可能由于其分辨率或与AVRMCU的事件系统一起操作而具有优势 。 这两种ADC都提供相对专门的功能 , 根据应用要求提供某些优势 。
熟悉生态系统的支持对MCU选择有重大影响 。 为了将重点放在为其设计选择最佳的MCU和外围设备上 , 在过去的几年中 , 已经做出了巨大的努力来调整PIC和AVRMCU产品系列的工具支持 。 Microchip仍致力于支持AtmelStudio 7和AtmelSTART生态系统中的新AVR设备 。 此外 , AVRMCU已添加到MPLABX集成开发环境(IDE)和MPLAB代码配置器(MCC) , 统一了这些MCU系列之间的开发经验 。 通用工具生态系统的支持旨在让你快速使用新的MCU系列 , 显著降低探索障碍 。 然而 , 对于嵌入式开发人员来说 , 使用MCU进行舒适的开发比工具生态系统更深入 , 一直到寄存器级或裸机编码 。
理解项目中的所有代码
MPLAB代码配置器(MCC)或AtmelSTART等代码生成工具是在设计中节省大量时间的绝佳方法 。 但是 , 如果你不理解这些工具生成的代码 , 你可能永远不会对它们感到完全满意 。 具有讽刺意味的是 , 你可能只在不再需要该工具时才信任它 。 作为一名嵌入式开发人员 , 你还知道 , 如果不自己至少修改一些寄存器级代码 , 就不可能进入生产环境 。

裸机编码:使用设备数据表和头文件作为主要编程参考
MCU由几个构建块或模块组成:CPU、SRAM、闪存、EEPROM和外围设备(如ADC) 。 其中每一项都在设备数据表中定义 , 并可通过寄存器进行配置 。 “裸机编码”中的“金属”指的是设备寄存器 , 因此它指的是写入配置MCU模块所需的寄存器级代码的实践 。 该寄存器级代码的形式受设备头文件的影响 , 而设备头文件又受MCU外围模块(数据表)的结构的影响 。 所以 , 高效地编写裸机代码需要数据表模块结构以及头文件定义的工作知识 。 除代码示例外 , 在该级别开发的主要编程参考通常是MCU数据表和设备头文件 。
裸机编码是一种嵌入式开发技能 , 往往需要在同一MCU系列上的多个项目中掌握 。 对于特定的MCU , 工程师熟悉MCU系列的数据表模块和头文件的组织方式的隐式模式 。 对这些模式的了解有助于该MCU系列的快速开发 , 但也会造成选择不同MCU的阻力 , 即使它可能更适合新项目 。 随着时间的推移 , 能够快速使用与头文件定义相关的命名约定 , 使工程师能够利用现代IDE的代码完成功能 , 如MPLABX IDE(或AtmelStudio) 。
MCC生成的项目的编码样式和项目结构可能与你自己实现的不同 。 然而 , 在寄存器级别 , MCC生成的代码与手动编写的代码非常相似 。 因此 , 使用MCC生成的代码作为示例上下文 , 通过我们可以从PIC1000和AVR1000b应用说明中了解的内容 , 探索PIC和AVRMCU寄存器级代码之间的差异 。 在此过程中 , 我们还将指出一些你可能不知道的有趣的MPLABX IDE编辑器特性 。