一、前言
物联结点的设计与实现是基于开发板ESP-WROVER_KIT_V4.1展开的,项目的进程展开按照模块化进行,也就是分为不同的硬件设计进行,以下的分析实现均以嵌入式的变通方式展示。
二、用例建模
首先需要明白用例,用例是一个业务过程;业务过程就是某硬件设备在开发板这一特定领域上完成某些特定的任务需要进行的一系列活动。首先确定基本要素,ESP-WROVER_KIT_V4.1是接受者,Linux环境工程师是用例执行者。这里,工程师值负责了代码和API的逻辑整合和实现,更多的实现在开发板系统对各个模块的操作,但这里,从人的角度出发很容易理解,使用开发板这一过程是一个明确的用例过程。
现在对用例进行抽象层级分析(举例):
- 抽象用例:①计算输入信号的上升沿或下降沿脉冲的数量;②RMT脉冲发送或接受;③模拟数字转换。
- 高层用例:①计算输入信号的脉冲数量这一用例的开始状态是LED控制块生成脉冲,终止状态是PCNT计算得出数值;②发送或接受RMT脉冲信号这一用例的开始状态配置发送或接受模式的参数,终止状态是RTM发出或接受一系列脉冲信号;③数字量和模拟量的相互转化这两个用例的开始状态是接受相对应的类型信号,终止状态是得到目的对应的类型信号。
- 扩展用例:①代码控制LED控制块生成脉冲——PCNT收到信号并运行计数器——进行中断条件判断——反馈传递数值(红色和蓝色分别代表参与者)
三、业务领域建模
首先要明确需求中的业务领域内的名词或名词短语既可以是一个类名,也可以是一个属性名。区别它们的关键是能否单独存在,即属性是用来描述对象或存储对象的状态信息。比如,脉冲计数器可以是一个类单独存在,但寄存器必须依附着具体的硬件设备才具有实际的意义,如16位带符号计数器等。
针对工程实践的具体对象,分析其间的关系:
-
PCNT模块的业务建模
-
RMT模块的业务建模
-
ADC模块的业务建模
-
结合开发板整合业务领域建模
四、数据模型
-
PCNT模块
- 配置和读取
变量名 | 类型 | 唯一 | 含义 |
pcnt_unit | pcnt_unit_t | 是 | 单元编号 |
evt_type | pcnt_evt_type_t | 是 | 监听事件类型 |
channel | pcnt_channel_t | 是 | PCNT通道号 |
pulse_io | int | 否 | 脉冲信号输入GPIO |
ctrl_io | int | 否 | 控制信号输入GPIO |
count | int16_t* | 是 | 接受计数器值的指针 |
value | pcnt_unit_t unit | 是 | 接受PCNT事件的计数器值的指针 |
- 计算上升沿脉冲数量
变量名 | 类型 | 唯一 | 含义 |
pos_mode | pcnt_count_mode_t | 否 | 检测上升沿时为计数器模式 |
hctrl_mode | pcnt_ctrl_mode_t | 是 | 控制信号为高电平时的计数器模式 |
- 计算下降沿脉冲数量
变量名 | 类型 | 唯一 | 含义 |
neg_mode | pcnt_count_mode_t | 否 | 检测上升沿时为计数器模式 |
lctrl_mode | pcnt_ctrl_mode_t | 是 | 控制信号为低电平时的计数器模式 |
-
RMT模块
- 配置和读取
变量名 | 类型 | 唯一 | 含义 |
channel | rmt_channel_t | 是 | RMT通道 |
rmt_item | const rmt_item32_t * | 是 | RMT项目数组的头点 |
item_num | int | 是 | RMT数据项编号 |
mem_offset | uint16_t | 否 | 内存的索引偏移量 |
- 发送RMT脉冲
变量名 | 类型 | 唯一 | 含义 |
wait_tx_done | bool | 是 |
设置为true以等待所有数据发送完成 |
- 接受RMT脉冲
变量名 | 类型 | 唯一 | 含义 |
rx_idx_rst | bool | 是 |
设置为真以重置接收器的内存索引 |
函数名 | 返回 | 解释 | |
rrmt_rx_start() | ESP_ERR_INVALID_ARG 参数错误 | 启动接收器 | |
ESP_OK 成功 | |||
rrmt_rx_stop() | ESP_ERR_INVALID_ARG 参数错误 | 停止接受 | |
ESP_OK 成功 |
-
AD模块
函数名 | 返回 | 解释 | |
adc1_config_width() | ESP_OK 成功 |
配置ADC 1捕获宽度 同时为ADC 1启用输出反转 |
|
ESP_ERR_INVALID_ARG 参数错误 | |||
adc1_config_channel_atten() | ESP_ERR_INVALID_ARG 参数错误 |
在ADC 1上设置特定信道的衰减 并配置其相关的GPIO引脚复用器 |
|
ESP_OK 成功 | |||
adc2_config_channel_atten() | ESP_ERR_INVALID_ARG 参数错误 |
在ADC 2上设置特定信道的衰减 并配置其相关的GPIO引脚复用器 |
|
ESP_OK 成功 | |||
adc1_get_raw() | -1:参数错误 | 从单个通道读取ADC 1 | |
其他:ADC 1通道读取的数据 | |||
adc2_get_raw() | esp_OK如果成功的话 | 从单个通道读取ADC 2 | |
esp_err_timeout其他控制器正在使用ADC2,且请求超时 |
变量名 | 类型 | 唯一 | 含义 |
channel | adc1_channel_t | 是 | ADC 1通道配置 |
atten | adc_atten_t | 否 | 衰减等级 |
五、概念原型及工作过程
首先确定概念和概念原型是两种意思
- 概念是人对能代表某种事物或发展过程的特点及意义所形成的思维结论。
- 概念模型是是一种虚拟的、理想化的软件产品形式。所以概念是一种内置的内容,概念模型是一种轮廓内容。
基础具体工程实践,概念原型就是已知API结合数据模型设计施加在具体用例(产生脉冲、接受脉冲、计算脉冲数量、计算转型后的电压数值)的形式化表达。用户通过嵌入式开发板中的一些硬件模块,在Linux的环境下,对寄存器赋值让CPU执行一系列的操作,然后烧录到开发板上,最后通过监视器查看预期结果。
六、总结
因为此工程实践偏向于硬件,在进行建模分析时,难以抽象出很好的用例和模型,可能此篇文章的用例建模、业务领域建模以及数据建模不是很好。但总体来说,这一次的需求分析和概念原型的作业让我对我们组的工程实践有了更明晰的理解和认识,这会帮助我更好的完成后续的工程实践。
参考资料:https://gitee.com/mengning997/se/tree/master/ppt