自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 阿里云IOT C-SDK 源码分析系列(8): IOT_Linkkit_Report 分析

从函数名称上就可以知道,这个函数的主要功能是向云端发送消息,但是它的功能不仅仅如此,特别需要注意的就是,他还包含 子设备登录/子设备退出功能。函数 原型如下: IOT_Linkkit_Report 原型 int IOT_Linkkit_Report(int devid, ...

2020-02-08 21:09:49

阅读数 65

评论数 0

原创 阿里云IOT C-SDK 源码分析系列(7): IOT_Linkkit_Close 源码分析

该函数的功能是 关闭网络连接,并且释放Linkkit 的所有的占用资源。原型如下: IOT_Linkkit_Close 原型 int IOT_Linkkit_Close(int devid); 接口说明 若设备ID为主设备, 则关闭网络连接并释放Linkkit所有占用资源 参数说明 参数...

2020-02-08 20:48:51

阅读数 53

评论数 0

原创 阿里云IOT C-SDK 源码分析系列(6):IOT_Linkkit_Yield 用户 事件调度函数源码分析

在上一篇文章中,着重分析了 SDK的 核心调度线程yield,本文再简单的分析下用户 事件调度 API 接口函数,该函数 原型如下: IOT_Linkkit_Yield 原型 void IOT_Linkkit_Yield(int timeout_ms); 接口说明 若SDK占有独立线程, ...

2020-02-08 19:28:45

阅读数 55

评论数 0

原创 阿里云IOT C-SDK 源码分析系列(5):重点理解SDK的核心调度线程 _iotx_cm_yield_thread_func

本文是 本系列的 最重要的 一篇,因为本文尝试着去揭示SDK本身的 工作内容,为什么要理解 SDK 的工作内容呢?因为SDK提供给开发者的是API接口函数,我们只是会简单的使用 这些API接口, 但是这些API接口的相关资料只有寥寥几句话, 相关的技术文档也非常少,作者的出发点可能是开发者快速的进...

2020-02-08 17:18:08

阅读数 116

评论数 0

原创 阿里云IOT C-SDK 源码分析系列(4):IOT_MQTT_Construct 源码分析

IOT_MQTT_Construct 函数没有开放给 用户使用,它不是一个 API接口,但是对于移植者而言,尤其是关注 底层原理的,这个函数还是非常重要的,不管我们是采用 SDK自带的编译系统进行移植,还是采用“ 代码抽取”的方式进行移植,编写wrapper.c 中的HAL_xxx函数都是必不可少...

2020-02-08 16:35:04

阅读数 41

评论数 0

原创 阿里云IOT C-SDK 源码分析系列(3):IOT_Linkkit_Connect 接口源码分析

从字面意思也能看出 该函数是 设备 向 云服务器 发起连接的功能函数,但是“连接”功能知识它的主要功能,它还实现了一些其他的参数初始化,比如特别重要的 底层 HAL 接口函数的绑定。该函数 原型如下: IOT_Linkkit_Connect 原型 int IOT_Linkkit_Connec...

2020-02-07 22:55:58

阅读数 41

评论数 0

原创 阿里云IOT C-SDK 源码分析系列(2):IOT_Linkkit_Open 接口源码分析

该函数是使用 IOT的SDK的 需要调用的 第一个 接口函数,该函数原型如下: IOT_Linkkit_Open 原型 int IOT_Linkkit_Open(iotx_linkkit_dev_type_t dev_type, iotx_linkkit_dev_meta_info_t *m...

2020-02-07 22:20:00

阅读数 42

评论数 0

原创 阿里云IOT C-SDK 源码分析系列(1):应用框架概述

在前面的文章: 《阿里云IOT-C-SDK系列(1)概述:移植流程、程序框架、代码目录》 《阿里云IOT-C-SDK系列(2)快速体验:移植+示例C代码》 《阿里云IOT-C-SDK系列(2)快速体验:移植+示例C代码》 《阿里云IOT-C-SDK系列(4)SDK配置选项理解》 《阿里云...

2020-02-07 20:39:43

阅读数 62

评论数 0

原创 freemodbus 从机 原理分析小结

在之前的文章《Freemodbus原理分析》,结合代码对 freemodbus 进行了分析,这里对 freemodbus机制做一下分析小结。freemodbus 的应用场景 主要是在 非linux下的 单片机系统,当然了,freemodbus 1.6 版本也开始支持了 linux,不过在linux...

2020-01-27 21:39:25

阅读数 2872

评论数 1

原创 libmodbus源码分析(3)从机(服务端)功能源码分析

在上一篇文章《libmodbus源码分析(2)主机(客户端)功能源码分析》 从 主机的角度 分析了 源码,本文以 从机(服务器)的角度分析一下源码。同样的,我们以 modbus rtu 协议的 4x区保持寄存器功能进行举例说明。 我们简单的写一下 modbus rtu 下 响应客户端(主机)读...

2020-01-27 14:23:00

阅读数 323

评论数 0

原创 libmodbus源码分析(2)主机(客户端)功能源码分析

在上一篇文章《libmodbus 源码分析(1)基本框架、关键数据结构、接口》中,分析了libmodbus的源码基本框架和关键的数据结构、接口,本文就分析一下 libmodbus 作为 主机(客户端)的功能源码实现,这里我们以 modbus rtu 协议 的读 4x 区保持寄存器功能 进行举例说明...

2020-01-26 18:25:50

阅读数 385

评论数 0

原创 libmodbus 源码分析(1)基本框架、关键数据结构、接口

在之前的文章: 《 libmodbus协议栈1——Linux下详细移植步骤(配置、生成) 》 《 libmodbus协议栈2—— Linux下 modbus RTU master 开发案例 》 《 libmodbus协议栈3—— Linux下 modbus RTU 从机 开发案例 》 《 ...

2020-01-26 17:41:33

阅读数 335

评论数 0

原创 单向链表删除并清空操作 注意

在之前的文章《深入理解Linux内核之链表 list.h 功能实现原理、接口说明及示例代码》中详细的分析了链表的各种操作,我们经常使用的操作是“初始化”、“ 添加节点”、“遍历”、“删除”,对于链表节点的删除,使用的相对少,而且由于 删除操作的 宏函数 定义的复杂,容易混淆,本文基于此,对 链表的...

2019-12-27 18:23:34

阅读数 310

评论数 0

原创 libev 笔记(三):libev的使用模型

上一篇《libev 笔记(二):事件驱动模型 在 稳定的网络服务器 程序中的应用》我们介绍了 事件驱动模型的作用,以及在网络服务器中应用,本文简单的说一下 libev 的 使用关键点。 libev 是一种高性能事件循环 / 事件驱动库。作为 libevent 的替代作品,由于其支持linux...

2019-12-10 22:25:42

阅读数 162

评论数 1

原创 libev 笔记(二):事件驱动模型 在 稳定的网络服务器 程序中的应用

在前面的文章《libev 笔记(一):“事件驱动模型” 的 理解》 简单的介绍了 事件驱动模型的概念,但是文字概念毕竟理解起来稍微有点抽象,接下来从具体案例来一步步的分析,事件驱动模型 能解决什么问题,也就是怎么用。 本文 参考了顾锋磊 老师的 文章 《使用事件驱动模型实现高效稳定的网络服务器...

2019-12-10 22:08:32

阅读数 51

评论数 0

原创 libev 笔记(一):“事件驱动模型” 的 理解

libev 是 一种 “事件驱动”的编程框架,所谓“事件驱动”,简单地说就是就是 有什么动作(点按钮、中断),程序就执行什么操作(中断服务函数、回调函数),当然事件不仅限于用于的操作,只要是定义好的,各种突发、预设的各种将要发生的事情,都是事件。这里,我对CPU相对熟悉一些,可以把“事件驱动”理解...

2019-12-10 21:04:57

阅读数 59

评论数 0

原创 ID 值自动 “申请”和“释放” 算法及C代码 (2)

在上一篇文章《ID值自动申请和释放》中,简单的介绍下应用背景和C代码,不过上一篇中的代码 至适用于 “释放”一次,不支持多次释放,也就是说必须要释放1次后,下一次操作必须是重新申请,因为代码中没有 使用 “队列”操作,所以本文为了实现多次释放的功能,进一步改善了代码,引入了队列的思想,关于“队列”...

2019-11-03 19:51:54

阅读数 52

评论数 0

原创 ID 值自动 “申请”和“释放” 小算法及C代码

简单的说下题目中涉及到的 应用场景,在 开发 网关或一些组态软件的时候,我们一般是需要创建变量或者设备表的,还有就是对于数据库表中的 ID值,我们在对表中记录进行“增”、“删”操作时,也涉及到 ID值的 管理,这个具体体现为: (1)当我们新创建一个变量或一条记录时,希望ID值为最新的,而且是唯...

2019-11-02 18:52:53

阅读数 33

评论数 0

原创 一种链表节点快速查找并锁定方法

先说下这个“题目”的背景,在开发一种云网关,这种网关的主要功能是集成硬件驱动,比如Modbus、DL/T645、S7PPI等工控现场驱动,采集工控现场数据,然后将数据传输到云平台上(阿里云、华为云等)。相当于在网关中嵌入了一个 小型的 工控组态软件,对于工控软件,常规的操作流程是: 1、创建设备...

2019-09-30 21:25:14

阅读数 118

评论数 0

原创 C语言 带参数宏定义中 # 和 ## 知识点总结、代码分析

目录 一、宏定义中 “#”知识点 1、直接转换字符串,不展开。 2、转换出的结果一定是“字符串”。 二、宏定义中 ## 知识点 1、应用场景 2、“##”的作用是将 左右两边的参数做整体字符串拼接替换 3、经过 ## 替换后的内容必须 有一个 同名的 变量与之对应。 4、 只拼接,...

2019-09-21 21:26:46

阅读数 237

评论数 0

原创 C语言 枚举enum 知识点总结

目录 1、枚举中的值是整型。 2、枚举中的成员就是一个全局“宏”。 3、如果第1个枚举成员未赋值,第一个枚举成员默认值为整型的0。 4、没有指定值的枚举元素,其值为前一元素加1. 5、枚举元素的值可以自定义,也可以不定义。 枚举类型在C编程中经常用到,尤其是状态枚举、使得程序的可读性...

2019-09-19 22:21:15

阅读数 60

评论数 0

原创 Unix/Linux 互斥量、条件变量的作用及C代码案例分析

在分析“条件变量”这个概念之前,我们需要了解两个相关的概念,分别是:线程同步、互斥量。 1、线程同步 所谓线程同步,“同步”二字单从字面意思来看,是很容易有歧义的,起码不太容易理解是什么意思,“同步”不是同时,而是 只两个或两个以上随时间变化的量在变化过程中保持一定的相对关系(也特别拗口)。...

2019-09-15 22:26:50

阅读数 132

评论数 0

原创 Unix编程艺术:模块式编码的6个问题思考

在前面的文章《Unix编程艺术:哲学基础》中,提到的模块原则是复杂软件的一个利器,也是Unix编程艺术的核心之一,模块性体现在良好的代码中,这首先来自于良好的设计,在编写代码时,需要考虑下面这些问题,这些问题有助于提高代码的模块性。 1、有 多少全局变量?全局变量对模块化是 毒药,很容易使各模块...

2019-09-10 21:20:13

阅读数 44

评论数 0

原创 Unix编程艺术:哲学基础

目录 阐述一: 阐述二 阐述三: 1、模块原则。 2、清晰原则。 3、组合原则. 4、分离原则:策略同机制分离,接口同引擎分离。 5、简洁原则:设计要简洁,复杂度能低则低。 6、吝啬原则:除非确无 它法,不要编写庞大的程序。 7、透明性原则:设计要可见,以便 审查和调试。 8...

2019-09-09 20:54:23

阅读数 68

评论数 0

原创 cJSON库使用:特别注意事项

cJSON的简单使用——STM32移植 cJSON打包功能使用-代码案例、特别注意事项 在前面的文章中,我们对cJSON进行了一些简单分析,包括解析、打包这两种最常用功能,cJSON的移植相对简单,但是在使用的时候,还是有一些特别需要注意的地方的,这 主要是因为 cJSON库 中的一些函数会...

2019-09-07 22:32:55

阅读数 131

评论数 0

原创 cJSON打包功能使用-代码案例、特别注意事项

在前面的文章《cJSON的简单使用——STM32移植》中,分析了cJSON的简单使用和移植步骤,这个使用 案例主要 是针对 json包解析的,其实cJSON也提供 json 包 打包 功能,这里针对常用的“对象”类型json进行打包,我们主要使用到以下几个接口函数: 1、cJSON *cJSON...

2019-09-07 22:22:44

阅读数 121

评论数 0

原创 sqlite3在嵌入式Linux上的移植步骤详解

深入理解SQLite3之sqlite3_exec及回调函数 sqlite3:深入理解sqlite3_stmt 机制 sqlite3: sqlite3_step 函数 sqlite3:sqlite3_bind 函数 sqlite3:sqlite3_column 函数 sqlite3:嵌入式...

2019-09-07 21:00:50

阅读数 185

评论数 0

原创 I2C总线:通信线缆长度的影响及改进措施

本文主要从应用的层面来分析I2C的通信线缆长度的影响及改进措施,不涉及理论分析。I2C总线是嵌入式硬件中一种常用的 通信总线,比如一些时钟芯片,传感器芯片、eeprom等等都是I2C接口,这里我们先说一些共识: I2C总线确实不适合远距离通信,尤其是需要使用线缆与I2C接口器件进行通信,这里...

2019-09-05 21:35:34

阅读数 462

评论数 0

原创 命令行参数小结

说来惭愧,对于命令行参数这个概念接触的比较少,可能也是之前一直使用IDE进行开发程序的原因吧,对于C程序,总是从main函数开始执行,main函数的原型如下: int main(int argc, char *argv[]); 这里面我们可以发现main函数的特点: (1)有两个形参,ar...

2019-08-31 16:16:45

阅读数 216

评论数 0

原创 阿里云IOT-C-SDK系列(5):进一步理解SDK的移植使用方式

阿里云IOT-C-SDK系列(1)概述:移植流程、程序框架、代码目录阿里云IOT-C-SDK系列(2)快速体验:移植+示例C代码阿里云IOT-C-SDK系列(3)快速体验:不使用SDK自带编译系统进行移植示例及Makefile的编写示范阿里云IOT-C-SDK系列(4)SDK配置选项理解 在系...

2019-08-29 16:26:46

阅读数 859

评论数 0

原创 阿里云IOT-C-SDK系列(4)SDK配置选项理解

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数...

2019-08-19 22:33:02

阅读数 524

评论数 0

原创 阿里云IOT-C-SDK系列(3)快速体验:不使用SDK自带编译系统进行移植示例及Makefile的编写示范

阿里云IOT-C-SDK系列(1)概述:移植流程、程序框架、代码目录 阿里云IOT-C-SDK系列(2)快速体验:移植+示例C代码 在系列(2)中详细的罗列了如何使用SDK自带的编译系统进行移植,正如前面所述,使用SDK自带的编译系统看起来简单,但是由于SDK对很多的细节进行了封装,所以对...

2019-08-12 22:37:05

阅读数 496

评论数 0

原创 深入理解Linux内核之链表 list.h 功能实现原理、接口说明及示例代码

目录 一、双向链表接口函数及相关宏定义分析 0、list_head 结构体 1、offsetof(TYPE, MEMBER) 宏 2、ontainer_of(ptr, type, member) 宏 3、LIST_HEAD_INIT 宏 4、LIST_HEAD 宏 5、INIT_LI...

2019-08-11 22:26:46

阅读数 184

评论数 0

原创 阿里云IOT-C-SDK系列(2)快速体验:移植+示例C代码

《阿里云IOT-C-SDK系列(1)概述:移植流程、程序框架、代码目录》 在上一篇文章我们分析了C-SDK的移植流程一级程序框架, 为了快速的体验一下这个移植流程,本文按照上篇文章提供2 种移植方式分别举例如何移植。官方的快速 移植案例为:Quick_start, 我对移植案例进行整理和修改,为...

2019-08-10 11:24:37

阅读数 915

评论数 0

原创 阿里云IOT-C-SDK系列(1)概述:移植流程、程序框架、代码目录

前言 阿里云推出的 物联网 平台是 专为 设备上云的平台,其物联网平台目前做的还是比较好的,尤其是高级版的 物模型 + IOT studio使得设备数据不仅能够在云端上线,而且可以方便的做web+app显示,基本上相当于web版本+app版的组态软件。基于阿里云的市场份额和功能特点,可以预计...

2019-08-09 22:03:45

阅读数 1038

评论数 0

原创 Linux下 静态库(*.a)和动态库(*.so) 的区别及应用分析

目录 1、静态库和动态库的区别 2、“库”的概念 3、静态库和动态库的创建命令 4、静态库和动态库的使用方式 1、静态库和动态库的区别 (1)所谓静态库(*.a),就是程序link的时候就把静态库中的东西取出来,放到生成的可执行文件中,当这个可执行文件执行时,就不需要再次调用这个...

2019-08-07 22:08:09

阅读数 158

评论数 0

原创 超低功耗研发-STM32L151C8T6芯片(五)低功耗设计总结

超低功耗研发-STM32L151C8T6芯片(一)时钟系统概述 超低功耗研发-STM32L151C8T6芯片(二)低功耗模式 超低功耗研发-STM32L151C8T6芯片(三)RTC自动唤醒机制 超低功耗研发-STM32L151C8T6芯片(四)串口接收唤醒机制、注意事项、C代码 目录...

2019-07-31 15:48:13

阅读数 2888

评论数 1

原创 超低功耗研发-STM32L151C8T6芯片(四)串口接收唤醒机制、注意事项、C代码

超低功耗研发-STM32L151C8T6芯片(一)时钟系统概述 超低功耗研发-STM32L151C8T6芯片(二)低功耗模式 超低功耗研发-STM32L151C8T6芯片(三)RTC自动唤醒机制 在前面的文章中,详细分析了STM32L151 的 低功耗的各种概念和相关知识,在应用中,还有一种...

2019-07-31 11:30:26

阅读数 1528

评论数 0

原创 深入理解数据结构(一):队列 及 C代码框架

“队列”型数据结构是一种非常经典的数据结构,理解这个数据结构,能够更深入的理解一些功能机制,比如消息队列等。队列的思想对于程序逻辑中的应用,还是非常普遍和重要的,最常见的应用就是消息队列,下面就来分析一下队列数据结构的各种概念。 一、“队列”数据结构能做什么? 队列数据结构,正如字面意思所...

2019-07-27 20:43:26

阅读数 132

评论数 0

原创 Linux下 线程之间数据 共享性 分析

先说下结论:同一个进程下,各个线程之间的数据是共享的,数据的种类可以有很多种,比如标准数据、结构体、文件描述符等等,但是这里有个前提,这些能够被共享的数据,一定是主线程在创建 子线程时,向 子线程传递的数据(通过指针传递)。 程序案例如下: #include "xxx.h"...

2019-07-24 22:26:36

阅读数 356

评论数 0

提示
确定要删除当前文章?
取消 删除