5. 谨防外设故障

最近我刚好有机会把一系列的微控制器驱动移植到其他的微处理器上。制造商和数据手册都表明 PWM 外设在这两个系列的微控制器之间是相同的。然而,实际情况却是在运行 PWM 驱动器的时候两者之间有很大的不同。该驱动程序只能在原来的微控制器工作,而在新系列的微控制器上却无效。

在反复翻看数据手册之后,我在数据手册中一个完全不相关的注脚里发现了 PWM 外设上电时会处于故障状态,需要将一个隐藏在寄存器中的标志位清零。在驱动程序实现的开始,确认外设可能出现的故障并查看其他看似无关的寄存器错误。

04

大牛对于嵌入式驱动开发的建议

1) 为了今后的发展,你除了考虑广度以外,更重要的是注意知识的深度。

譬如,做过网络驱动,那么是不是只停留在会写驱动的表层上,有没有对 Linux 内核的网络结构,TCP/IP 协议作过深入的了解。

2) 在 Linux 下开发很多时候都要利用现成的东西,没必要什么都自己搞。关键是变成自己的驱动后是否了解原作者编写时背后的一些东西。你应该不止是简单的让它工作。写驱动的时候就要考虑它的性能问题,并给出测试的方法(当然可以利用现成的许多工具,譬如测试网络性能的 netperf 等)。

当你写过 Flash 驱动,可能会知道 Flash 的性能有时候有多重要。

3) C 程序的自我修炼,是否考虑到软件工程方面的一些东西,程序的可维护性和扩展性,譬如 LCD 驱动,是不是从 Sharp 到 NEC 的只需要集中修改很少的几个地方?

对于不同品牌的 Flash,如果使得 Flash 的驱动做的更具有灵活性。

4) 如果有时间结余,可以关注 Linux 内核的发展。譬如 LCD 的驱动有没有考虑到 V4L2 通用架构,譬如网络驱动用到了 NAPI 了吗?当然在此之前,假设已经对 LDD3, ULK2 理解的比较熟了。

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查