**Опасный газоанализатор Tencent IoT операционной системы**

#### Введение
Ранее мы опубликовали несколько статей:

* «Разработка простого газоанализатора на основе событийно-управляемого табличного меню. Часть 1»;
* «Разработка простого газоанализатора на основе событийно-управляемого табличного меню. Часть 2»;
* «Табличное управление + механизм состояний. Платформа для тестирования датчиков с использованием подхода AD»;
* «Важность информации о версии и других данных (на примере разработки продуктов STM32)»;
* «TencentOS tiny. Разработка опасного газоанализатора»;
* «Сделай сам простую LCD-драйверную платформу!».
* «Пересмотр TencentOS tiny — разработка опасного газоанализатора».

Но из-за ограниченных аппаратных ресурсов невозможно реализовать слишком много функций. Тем не менее, я надеюсь, что однажды смогу использовать доступные ресурсы для создания общедоступного портативного опасного газоанализатора с открытым исходным кодом. Я также буду продолжать совершенствовать логику программного обеспечения и функциональность продукта, возможно, даже включу некоторые стандартизированные элементы (национальные стандарты, отраслевые стандарты, корпоративные стандарты), чтобы продукт выглядел более профессионально, и надеюсь, что будет возможность массового производства. Это поможет большему количеству инженеров начать работу.

## 1. Состав программного обеспечения

### 1.1. Архитектура программного обеспечения

![img](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9TWWljZUpLNzhDSThMRHhEZFZKWDBPWnN6NElvMFg2NmVRU2liRERlRExoNWxxbzZVenJjUmc4dnFKbVc1MkhQZkR3dDhGNFpDQ2VrME4wdkRkdjNMb21nLzY0MA?x-oss-process=image/format,png)

### 1.2. Структура программного обеспечения

#### 1.2.1 Общая структура программного обеспечения

![img](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy9TWWljZUpLNzhDSThicXZmaDA0dzRFNWx3S1pITzgwQVRPY2ZxZEFQN28wRm9KU2pEMnYxQVBvSWljUXliV01WdUZwV2RHb0JJM2J2dkhOME1uZWJOTGpBLzY0MA?x-oss-process=image/format,png)

#### 1.2.2 Основная структура программного обеспечения

**1.2.2.1 Структура LCD-драйвера**

**(1) Структура данных LCD-драйвера:**

![img](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9TWWljZUpLNzhDSWliUWxWTDl5V1FtMnN3dVZJbUlxZGhNZTBicE5McGlhUDJRNHNUVWlhRUd1SGlibm1razlwckpBb1Q4eGI0MTVRd2hTV3BQNXppYTQyWHFRZy82NDA?x-oss-process=image/format,png)

![img](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9TWWljZUpLNzhDSWliUWxWTDl5V1FtMnN3dVZJbUlxZGhNaFpqQTJpY0plSjZPZkZIWkxFM29pYUJOUVk1ZzBxT0NBcEgzWEV4am5RdGliQ0hQMVVpY1ZzVHdxdy82NDA?x-oss-process=image/format,png)

Здесь предоставляется возможность подключения драйвера к драйверу через структуру данных `&lcd_driver`, которая определяется в файле драйвера. Таким образом, когда я определяю переменную `LCD_Driver_Model` в другом месте, эту переменную можно связать со структурой данных драйвера, чтобы управлять интерфейсом в структуре данных через эту переменную.

**(2) Структура данных драйвера:**

![img](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9TWWljZUpLNzhDSWliUWxWTDl5V1FtMnN3dVZJbUlxZGhNMmljQ1VsSUhyUWljMnE3Sldzbm1BTVhpYVB5dTE2VGt3V3FPdkNCMGxDUkZWYXVGZFp6VXRMSDVnLzY0MA?x-oss-process=image/format,png)

Задача драйвера LCD заключается в предоставлении интерфейса для управления функциями LCD. Этот интерфейс не зависит от аппаратного обеспечения.

![img](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9TWWljZUpLNzhDSWliUWxWTDl5V1FtMnN3dVZJbUlxZGhNN3dFV2hlWkZDVVNhOUdhN1BUMmVNcVZkMTdWd1FpYXBtS1F5SURnTG9TVjBxN0xrak5rUzd4Zy82NDA?x-oss-process=image/format,png)

Драйверная платформа зависит от интерфейса драйвера, поэтому нам необходимо реализовать методы в интерфейсе драйвера. В соответствующем методе мы должны вызывать интерфейсы, связанные с LCD, для управления LCD. Ниже приведены реализации интерфейса:

![img](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9TWWljZUpLNzhDSWliUWxWTDl5V1FtMnN3dVZJbUlxZGhNZ3hhYXFwZVZFUG5pYTdpY2ljbW9zajZQbzBQZzNvYXEyN1hpYzV6MkJCRTZGR3pDRTdZWGRla1NpYncvNjQw?x-oss-process=image/format,png)

**(3) Структура данных устройства LCD:**

![img](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9TWWljZUpLNzhDSWliUWxWTDl5V1FtMnN3dVZJbUlxZGhNT3NkZFk1NVZzMWthamxPam5tczdIM3BwWHVaaDVNMHIxZTd1b3hNanJpYVZkaWM2aWJQSlo1aWJtQS82NDA?x-oss-process=image/format,png)

Устройство LCD должно связать функции в своей структуре данных с реальными интерфейсами драйверов LCD. Например, давайте посмотрим на реализацию интерфейса `LCD_Init`. Это фактически вызывает реальную операцию на аппаратном обеспечении LCD.



Документ находится в процессе постоянного обновления. Данный текст представляет собой инструкцию по синхронизации кода с облачным хранилищем.

**Перевод:**

Этот раздел кода был синхронизирован с репозиторием кода в облачном хранилище Code Cloud. Вот как это можно сделать:

1. Создайте новую папку:

2. Используйте команду git clone для удалённого получения репозитория исходного кода Wenqing:

Репозиторий открытого исходного кода:
```go
https://gitee.com/morixinguan/tencent-os-tiny-hazardous-gas-detector.git
```