1.C语言

  • C语言这一块的高频考点有预处理、关键字、数据类型、指针与内存管理。
  • 1)预处理有文件包含、宏定义、条件编译,其中最重要的是宏定义,通常考核宏定义的语法、宏替换与函数的区别等。
  • 2C语言的关键字有很多,有普通的数据类型关键字(如char, struct等)、控制语句关键字(如continue, break等),还有常考的存储类关键字(auto, extern, static, const, register)、其他关键字(sizeof, typedef, volatile),对于这些关键字,我们都应该很清楚它们的含义。
  • 3)数据类型的重点有数组、结构体、共用体,常考的问题有“一维数组跟二维数组的指针式访问”、“结构体的内存对齐规则及原因”、“结构体跟共用体的区别”等。
  • 4)内存管理与指针,重点有如野指针问题、二重指针、内存管理的栈、内存管理的堆、大小端问题等。

2.数据结构与算法

  • 数据结构与算法的难度确实不小,但好在对于嵌入式软件工程师来说,招聘方一般不会要求掌握那些特别复杂的数据结构与算法。
  • 1)链表是最重要的,因为Linux内核中经常使用链表,驱动开发和应用编程很多时候也需要链表,所以必须掌握结构体的定义、链表的创建、链表的增加、删除、查找、逆序这些操作的具体编程方法。
  • 2)哈希表则不是很常用,一般不需要自己实现,直接使用别人实现的哈希表比较多,但我们仍然要了解哈希表的原理、特点、适用场景。
  • 3)二叉树、图等很少使用,不必过于纠结。
  • 4)对于算法,我们需要掌握冒泡排序、快速排序、二分查找等常用算法以及递归、分治、动态规划等算法思维。

3.ARM裸机开发

  • ARM裸机开发的话,重点基本集中于ARM处理器、I/O接口、中断、寄存器与存储器这四部分。当然ARM裸机开发还包括uboot和汇编,但这部分一般很少涉及。
  • 1ARM处理器部分需要我们了解ARM处理器的分类、工作状态和工作模式、指令集、总线等。
  • 2I/O接口需要掌握GPIO的模式以及UARTIICUSBSPI这四个串行通讯接口。