单片机学习大纲

来源:互联网 发布:西安少儿编程培训机构 编辑:程序博客网 时间:2024/06/11 23:10

单片机-周例会培训大纲

@(单片机)

会议的操作步骤

  1. 每个人总结工作和计划,帮助员工解决难题, 查看工作质量,提出要求。
  2. 总结本周出现的问题和处理方法,宣贯决定、精神、规章制度。
  3. 回顾上周知识点,查看学习任务是否落实,解说本次的主题。

1. 我们该如何编写代码

同一个功能,程序的实现方式千变万化,我们该如何选择实现方式呢?总体来说,应该总以下三个方面进行考虑:

1.1 程序的可读性

      程序编写一次,却需要多次修改。我们需要从各个层次增加程序的可阅读性,可理解性。逻辑清晰,容易阅读的程序才不会容易出问题。优雅的程序就像一篇优美的散文。为了实现可阅读性,我们可以从以下几个方面入手。       1.  定义领域内名词和概念。本项目中有那几个实体,哪几种对象,分别对应的单词是什么。       2.  专注: 一个变量只做一个事情,一个循环制作一个事情, 一个函数就干一个事情。一个文件只干一个事情。             例子: found变量 for 循环中find变量。             例子: for  求一个数组中的最大值和求和。             例子:  if 防止逻辑嵌套的方法。       3.   变量名、函数名称、文件名称 要信达雅。(命名规范-匈牙利命名法、驼峰命名法)       4.   for 循环嵌套不要超过三成。       5.  层次逻辑要清晰。每个函数都要有一定的层次。               函数长度不要超过一屏。(超过了表示抽象层析不清次,此函数包含细节太多)       6.  注释要示意,要揭露目的, 而不是方法或者手段。       7.  程序逻辑要简单。keep it simple 原则。 奥卡姆剃刀原理

1.2 程序的可维护性

       1. 开闭原则。       2. 代码不要重复。Don't repeat yourself.       3. 代码要有回归测试。       4. 依赖要注入       5. 面向接口编程

1.3 程序的功能

 实现项目的功能。

规则和规范

1.《代码编程规范》代码编程要符合代码风格规范,这是以后代码审核标准。
2. 代码编写测试完成之后需要进行review,工具为reviewboard,需要学会review board工具的基本使用流程。
3. 推荐使用知识管理软件:evernote。
4. 确定下一次宣讲人。

推荐阅读书籍

  • 《代码大全》
  • 《代码整洁之道》
  • 《程序员修炼之道-从小工到专家》
  • 《head First 设计模型》

2. 我们该如何排查问题

问题排查流程

工作过程中,我们可能遇到各种各样的奇葩问题,遇到这些问题,我们该如何去解决呢?我们有以下手段去解决问题:

  1. 隔离问题-触发条件、清理代码。
  2. 由粗到细。 软件、硬件。
    硬件: 电源、看门狗、实验
    软件: 模块、函数、行
  3. 数据手册-学习知识的好时机。功能完成的整个逻辑、原理。
  4. 显示排查问题。 充分利用万用表、示波器、逻辑分析仪。
  5. 类比排查
  6. 假设-实验
  7. 厂家技术支持-排查问题。
  8. 寻求公司内部技术大拿的帮助。
  9. 放弃此方案。

总结和要点: 出现问题,一定要首先自己努力排查,而且没有解决不了的问题。

规则和规范

  1. 目前程序使用svn进行代码管理,需要自己学会svn基本功能的应用。程序发布需要建立tags。

3 黑盒测试-我们该如何做测试

测试的分类:白盒测试和黑盒测试。
测试的功能分离:性能测试、功耗测试、成功率测试(时间间隔)。

黑盒测试的步骤

研发提交程序之前,都需要进行内测,该如何进行测试呢?

  1. 理解业务,使用场景,设计测试用例。
  2. 理解和推测实现功能的原理,并对关键问题进行测试。
  3. 测试的顺序: 先关键、后细节。
  4. 出测试报告。
  5. 事出无常必有妖。偶尔出现的问题,可能都隐藏深层次的问题。

测试的原理: 复现,解决,测试。
测试中的墨菲定律:如果问题可能会出现,那么问题可能会出现。

规则和规范

  1. 做测试必须出测试报告,记录测试内容和测试方法。

4 白盒测试-测试驱动开发

内容见《测试驱动开发培训文档》

规则和规范

1 编写需要需要将基本报文和模块做到可以自动化测试。

参考书籍

  • 《xUnit Test Pattern》
  • 《嵌入式测试驱动开发》
  • 《google Test官方测试文档》

5 C语言知识-头文件

代码#include的有什么作用?发生的时间段是什么时候?

 - 内容替换:将文件内容替换到当前文件。 - 预编译

头文件该如何编写

-  头文件需要自动包含本头文件的依赖。例如使用的其他文件的结构体。包含顺序:先标准  自定义。不要把所有的头文件放到一个main.h里面。-  头文件是对外的接口,只需要暴露模块需要被别人使用的部分。模块中内部使用的变量和函数需要用static明确的声明范围。- 头文件包含了的时候一定要慎重,因为包含意味着依赖,意味着耦合。程序设计的时候有一个原则一位这高内聚,低耦合。在c语言上实践就是尽量少的包含头文件。

原理应用: 如何实现硬件抽象层。

详情请见 水表读数器自动测试代码

6 C语言知识-函数指针

函数指针基本用途:

  1. 函数指针是一个指针变量变量,占用4个字节。
  2. 函数在编译后就是一段二进制代码,每个函数都有初始地址,函数指针就是调用这个地址。
  3. 函数指针可以起到接口的作用,可以分离接口和实现。

函数指针的典型应用

  1. 回调函数: 标准库中的排序
  2. cmd框架中对命令的抽象
  3. 通用框架的编写

7单片机设计模式-缓冲区和查表

缓冲区模式应用场景:

  1. 通用缓冲区可以让cpu并行处理串口收发和其他事务。
  2. 缓冲区是硬件隔离层,缓冲区上层是应用相关的,缓冲区下层是硬件相关的。
  3. 常用缓冲区示例: 串口fifo缓冲区、按键、摄像头图像缓冲区

查表模式(数据驱动):

  1. 查表模式可以消除结构性代码重复,让程序更加容易维护。
  2. 自动探测数组大小的两种方法,ARRAY_SIZE 和 哑元
  3. 查表结构分为两部分:
    • 1 查表的框架,用来处理所有表元素的公共操作
    • 表项,用来处理每一项具体业务。
  4. 示例: 任务处理机制、协议中did的处理、CMD处理方式

8 单片机设计模式- 状态机模式和面向对象开发

状态机

  1. 状态机模式主要主要用来消除负责的条件判断,和任务完成就需要多个步骤的情况才能完成的情况。
  2. 最简单的状态机编写: 状态变量+ switch case模式
  3. state machine的使用
  4. 应用实例: PLC初始化

c语言面向对象

  1. 接口表达:头文件
  2. 如何实现继承 数据继承 -》 结构体
  3. 多态 方法使用函数指针表示
    4.应用实例: Flash copy

参考书籍

  • 《C语言面向对象开发》
  • 《量子状态机》