【嵌入式系统—GPIO应用编程】构件设计与实现
文章目录
1、GPIO构件封装方法与规范
建议 |
按底层硬件操作功能封装构件(给出函数名与接口函数),以供实际编程使用。 |
---|---|
必要性 |
1、利用软件构件,编程开发效率且程序更规范; 2、将底层驱动封装成构件,可提高复用性,能更多关注软件优化与稳定性。 |
优点 |
可移植性、可复用性、方便不同构件间交流 |
构件方法 |
每个构件由(.h)和(.c)两个独立文件组成,放在以构件命名的文件夹中。(其中 .h 中仅仅包含了对外接口函数的声明,相当于使用指南) |
---|---|
构件设计的最基本要求 |
(1)考虑使用与移植方便。 (2)要有统一、规范的编码风格与注释。 (3)宏的使用限制。 (4)不使用全局变量。 |
例子:设计底层驱动构件gpio_init,代码大致如下:
- gpio_init.h
PS:gpio_init.h文件内,还可以放入一些宏定义、相关接口声明等
- gpio_init.c
2、利用构件方法控制小灯闪烁
构件
|
构件设计函数 |
---|---|
底层驱动设计—GPIO
|
1、GPIO初始化:gpio_init (port pin, GPIO OUTPUT, state) 2、复位GPIO状态:gpio_set(port pin, state) 3、翻转GPIO状态:gpio_reverse (port pin) |
应用构件设计—light |
1、小灯初始化:light_init() 2、设置小灯状态:light_control() 3、翻转小灯状态:light_change() |
我们把调用底层驱动构件设计的面向具体应用的构件,称为应用构件。
描述 |
|
---|---|
步骤一、在light.h文件中 |
1、给小灯起名字,并明确与MCU连接引脚,进行宏定义; 2、对小灯亮、暗进行宏定义,方便编程 |
步骤二、在light.c文件中 |
写好以下三个函数: void light_init(uint 16 port pin, uint 8 state) void light_control(uint 16 port pin, uint 8 state) void light_change (uint_16 port pin) |
步骤三、在main.c文件中 |
1、在main函数中初始化LED灯的初始状态;
2、在功能函数中控制小灯状态发生变化
|
3、工程文件组织框架与第一个C语言工程分析
嵌入式系统工程包含若干文件,包括程序文件、头文件、与编译调试相关的文件、工程说明文件、开发环境生成文件等,而合理组织这些文件,规范工程组织,可以提高项目的开发效率、提高阅读清晰度、提高可维护性、降低维护难度。该工程框架也可被称为软件最小系统框架,因为它包含的工程的最基本要素。
文件夹名 |
功能与特点 |
|
---|---|---|
文档文件夹 |
Doc |
工程改动时,及时记录。 |
CPU文件夹 |
CPU |
与内核相关的文件。 |
MCU文件夹 |
MCU (Linker File、MCU drivers、Startup) |
链接文件夹,存放链接文件。 |
用户板文件夹 |
UserBoard |
MCU底层构件文件夹,存放芯片级硬件驱动。启动文件夹。存放芯片头文件及芯片初始化文件用户板文件夹,存放应用级硬件驱动,即应用构件。 |
软件构件文件夹 |
SoftComponent |
抽象软件构件文件夹,存放硬件不直接相关的软件构件。 |
无操作系统源程序文件夹 |
NosPrg |
为了便于过渡到实时操作系统RTOS工程结构,特命名该文件夹。含主程序文件、中断服务例程文件等。这些文件是实际应用级并发人员进行编程的主要对象。 |
从源代码到最后的可执行文件,可认为需经过编译、汇编和链接三个过程 。
每个源代码文件在编译和汇编后都会生成一个可重定位的目标文件,而链接器可以将这些中间文件组合成最终的可执行目标文件 。
上一篇: GPIO通用输入输出