c
文章平均质量分 77
静静流淌的柯溪
专注于智能硬件,智慧互联!
展开
-
【御芯微WIoTa®自组网协议开发套件试用体验】rt-thread bsp软件包制作
收到ucchip的wiota套件也有一段时间了,经过这段时间的摸索,大概搞清楚了软件开发环境的安装、编译、二次开发流程。sdk没有按照rt-thread的标准组织,代码形式比较乱没有支持msh组件,不能在控制台输入,调试不方便sdk默认使用AT固件,不方便二次开发rt-thread主线没有ucchip的bsp基于以上痛点,决定将ucchip的三款模组制作成为rt-thread的标准bsp。...原创 2022-07-15 22:00:25 · 615 阅读 · 0 评论 -
【御芯微WIoTa®自组网协议开发套件试用体验】二次开发概述
UCM200和UCM202都是一颗内置了MCU和射频前端的模组,他们都支持二次开发。但是ucchip将射频部分都封装起来以lib库的形式提供给用户开发,在一定程度上会使得开发不那么方便,也不能完全释放射频的性能。但是基础的外设都是开放的,对于一些常见的场合,客户完全可以使用一个模组来完成全部的项目开发。源码地址如下:之前的文章,已经详细介绍了IDE的安装和使用,这里不再过多赘述。下载完源码后,找到根目录下的rtconfig.py文件,确定这里的路径和你的IDE编译工具链的位置是否一致,如果不一致则需要更改。原创 2022-07-12 22:26:57 · 560 阅读 · 0 评论 -
UCM108E开箱&&二次开发环境搭建
御芯微UCM108E开发板,是搭载自研UCM108E模组的全功能开发板,可用于有MCU和GNSS定位需求的物联网方案开发。该模组集RISC-V MCU和GPS/北斗三号导航定位为一体,内部集成32位RISC-V处理器、32位浮点运算单元(FPU)、PMU、DCDC、PLL、温度传感器、大容量闪存等,外设支持UART、SPI、PWM、GPIO、I2C,ADC和DAC等,具有低成本、高性能、小尺寸的特点。如上图所示,开发板的设计非常精简,主要由UCM108E模组、烧录口和天线组成,并且将所有的IO都外接方便测试原创 2022-06-13 09:55:13 · 1877 阅读 · 0 评论 -
腾讯云物联网-网关设备体验
腾讯云物联网-网关/子设备体验网关设备简介对于 BLE、Zigbee 和485等不具备直接访问网络能力的设备,需要先接入网关,然后通过网关代理,间接实现设备接入腾讯物联网开发平台 IoT Explorer,具体流程框架图如下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-laOq4Nby-1650454646545)(https://main.qcloudimg.com/raw/f419fff3725378c770b7264ddb93b170.svg)]那么对于一个网原创 2022-04-20 19:38:18 · 3014 阅读 · 0 评论 -
Ubuntu使用多个gcc版本
背景由于项目之前使用低版本gcc编译,现在高版本的gcc编译会报错,所以需要Ubuntu安装多个gcc版本来适应不同的编译情况。过程首先安装低版本的gcc,使用如下命令:$ sudo apt-get install -y gcc-7 g++-7这个过程可能比较久,耐心等待安装完成。查看当前系统的gcc版本$ ls /usr/bin/gcc*/usr/bin/gcc /usr/bin/gcc-9 /usr/bin/gcc-ar-7 /usr/bin/gcc-nm原创 2021-08-06 09:35:00 · 1733 阅读 · 0 评论 -
RT-Thread 软件包制作及发布流程
前言RT-Thread是一个嵌入式实时多线程操作系统,系统完全开源,它不仅仅是一个实时内核,还具备丰富的中间层组件,包括如文件系统、图形库等较为完整的中间件组件,具备低功耗、安全、通信协议支持和云端连接能力的软件平台。我们可以结合rtthread提供的组件和服务,制作软件包,丰富rt-thread的软件生态。让更多的开发者做到开箱即用,不用重复造轮子。必备知识熟悉rt-thread了解Kconfig了解Env开发工具了解Scons构建工具制作流程为什么你做好的软件包能被其他开发者使用原创 2021-03-27 14:03:01 · 1990 阅读 · 0 评论 -
eclipse编译C工程出现超多undefined 的错误解决办法
问题描述IDE是第三方公司根据eclipse魔改的,但是内核还是eclipse。运行官方给的例程编译链接下载都正常。但是自己根据此工程新建了一些文件夹并加入了.c .h文件,再次编译的时候出现大面积的错误,提示函数没有被定义。觉得很奇怪,因为这些函数都是被定义且实现的,直接点击也可以跳转过去。部分错误如下:14:05:56 **** Incremental Build of configuration obj for project CentPeri ****make -j8 all Memory原创 2021-03-25 14:18:02 · 2997 阅读 · 0 评论 -
沁恒CH573开发板上手
沁恒CH573开发板评测概述CH573是集成BLE无线通讯的32位RISC-V内核微控制器。片上集成低功耗蓝牙BLE通讯模块、全速USB主机和设备控制器及收发器、SPI、4个串口、ADC、触摸按键检测模块、RTC等丰富的外设资源。系统框图芯片特点32位RISC处理器WCH RISC-V3A支持RV32 IMAC指令集,支持单周期乘法和硬件除法内置18K SRAM,512K Flash ROM,支持ICP、ISP和IAP,支持OTA无线升级集成2.4GHz RF收发器和基带及链路控制,提高原创 2021-03-17 11:36:49 · 8929 阅读 · 9 评论 -
STVP下载STM8单片机提示Verify error at address 0xxxxx的问题解决
问题使用stvp下载stm8l15xC8芯片时,每次校验都不通过,错误如下:问题分析校验失败的区域是STM8的EEPROM区域,如果单独点击下载flash区域和EEPROM区域,程序都是可以烧录的,最后再烧录options区域。这样子的流程没问题,但是如果点击一键烧录全部区域就会出现这样的问题。所以怀疑出问题id原因是flash区域烧录完成后,MCU会直接跑起来,然后再烧录EEPROM区域的时候MCU程序正好也在使用EEPROM或者flash,然后就会造成校验失败。问题解决按照上面的四路分析,原创 2020-11-28 14:44:45 · 2168 阅读 · 0 评论 -
ML302 shell使用方法
ML302 shell使用方法引言首先感谢letter shell作者开源了简单好用的shell工具,详情可以访问作者的GitHub获取。其次感谢rt-thread团队的dbg着色支持,更多rtthread的资料,请访问官网获取。使用1 需要串口打印log信息在需要log打印的*.c文件头部包含dbg头文件,如下所示:#define DBG_TAG "MAIN"#define D...原创 2020-04-28 13:50:02 · 1367 阅读 · 0 评论 -
中移物联ML302开发板上手体验
开始中移物联网的ML302开发板是支持4G Cat.1网络的开发板,对于Cat.1这里就不再赘述,详细可以网上了解一下。接下来介绍中移物联网的ML302开发板以及具体的上手步骤,给那些刚拿到开发板的同学一个参考,少走弯路。开发板整体如下图所示,我收到的是LET_KIT_V002版本的开发板,开发板模组里默认用的是AT固件。AT指令模式开发体验收到开发板后,PC端首先需要安装ML302的...原创 2020-04-11 09:37:36 · 8545 阅读 · 6 评论 -
gtest使用入门
gtest使用入门1 gtest是什么2 gtest的获取和编译3 gtest 单元测试工程的建立4 gtest的简单使用1 gtest是什么gtest是Google开发的一个开源单元测试框架,git仓库点击这里获取。主要针对c/c++,gtest有如下特点:提供强大的断言集,支持包括布尔、整型、浮点型、字符串等提供断言方法自定义扩展自动收集测试用例,无需开发者再次组织提供死亡测试功...原创 2019-12-13 14:28:45 · 5102 阅读 · 1 评论 -
STM8S串口中断卡死调试记录
项目使用STM8S003单片机,数据发送速率比较慢时,一切正常。当速率快的时候,系统卡死,具体表现为一直运行中断服务程序,无法执行while(1)里面的内容了。调试记录开始怀疑是一直在响应某个中断,断点调试后发现是一直在响应UART1接收中断。调试步骤如下:怀疑是串口中断里做了数据解析工作,导致在解析途中又收到了第二个串口接收中断,然后发生异常。解决办法是在串口接收中断中关闭串口接收中断,数...原创 2019-10-15 10:12:48 · 3021 阅读 · 3 评论 -
CRC8校验算法总结
最近做项目时,一直在用crc8算法做校验,但是编程平台多样,所以总结一下。使用的多项式是:X8 + X2 + X + 11 C语言/************************************************************** 函数名称: gh_crc8** 函数功能: 生成crc8 密匙** 入口参数: p_buffer 需要校验的数据首地址 buf_...原创 2019-09-02 17:37:36 · 17637 阅读 · 0 评论 -
IMEI码规则及校验算法
注:本文章部分内容来自简书,请点击这里获取,侵删。1. IMEI码规则手机IMEI码由15-17位数字组成。·第一部分 TAC,Type Allocation Code,类型分配码,由8位数字组成(早期是6位),是区分手机品牌和型号的编码,该代码由GSMA及其授权机构分配。其中TAC码前两位又是分配机构标识(Reporting Body Identifier),是授权IMEI码分配机构的代码...原创 2019-03-06 21:47:24 · 18406 阅读 · 0 评论 -
FreeRTOS v10.1.0源码中文注释版
继上次开源了LwIP 1.4的源码后(有需求的同学点击这里获取),开源FreeRTOS 10.1.0的源码注释,请点击这里获取。包括freertos的任务调度、内存管理、信号量、事件组以及新增的任务通知都有详细的中文注解,相信会帮助大家更好的熟悉freertos的使用。同样觉得对你有帮助请给star以资鼓励。...原创 2018-12-06 09:06:53 · 4433 阅读 · 3 评论 -
处理串口接收不定长数据的另一种解决方法
开发平台:Keil 5库函数版本:V3.5芯片:STM32F103CBT6之前我在我的另一篇博客中介绍过使用串口空闲中断+DMA的方式来处理不定长数据,没有看过的同学可以点击这里查看。今天要介绍另一种接收不定长数据的方法。使用的是接收中断和和空闲中断结合的方式。大概思路是:我们在串口配置的时候先只开串口接收完成中断,然后在接收中断中再开启空闲中断,当空闲中断发生时,表明本次数据接收完成,再...原创 2018-12-05 19:14:07 · 7693 阅读 · 2 评论 -
EmbedC_TDD__1 Keil中搭建自动化单元测试框架Unity
1 什么是UnityUnity是一个全部用C实现的自动化测试框架。它由很少的几个文件构成。自动化测试框架就是一个软件包,它能让程序员表达产品代码应该有什么样的行为。自动化测试单元测试框架的工作需要提供以下能力:用于表述测试用例的通用语言用于表述期望结果的通用语言能够使用产品代码所用的编程语言的功能能够把所有的工程、系统或者子系统的单元测试用例收集到一起。一个能运行全部或者部分测试用...原创 2018-11-13 14:02:24 · 2634 阅读 · 0 评论 -
C语言小结--指针和数组的结合
1、数组和指针有什么关系我们知道,访问一个变量的内容的实质就是访问内存,方位一个变量可以通过变量名访问,也可以通过指针来访问。如下的两种操作printf结果是一样的:#include <stdio.h>int main(void){ int a = 10; int b; int *p; b = a; p = &a; printf("b = %d;\n"原创 2017-07-23 21:53:32 · 584 阅读 · 0 评论 -
C语言小结-输入型参数和输出型参数
1、函数为什么需要传参和返回值(1) 函数的作用就是处理数据,传入的参数就是被加工的数据,返回值就是输出的结果。 (2)函数名就是这个函数的入口,在内存中表示就是一个函数代码段的首地址,实质是一个指针常量,所以在程序中使用函数名都是当地址来用的,用来调用这个函数。再理解指针函数的实质就比较简单了。 (3) 如果一个函数没有传参和返回值,也是可以的,也可以正常运行,那么没有返回值和形参的函数...原创 2017-08-27 15:39:51 · 15035 阅读 · 3 评论 -
C语言小结--指针和变量传参
1、普通变量作为函数形参这种情况使用最多,也比较好理解,贴段代码如下:#include <stdio.h>void func(int x){ printf("in fun : x = %d , &x = %p . \n",x,&x);}int main(void){ int a = 10; printf("in main : a = %d, &a = %p. \n",原创 2017-07-24 23:52:25 · 688 阅读 · 0 评论 -
C语言小结--offsetof和container_of宏的使用
在Linux内核中这两个宏的使用非常普遍,所以研究透彻这两个宏非常有必要。接下来详细介绍一下这两个宏的使用。1、offsetof宏的使用这个宏比较简单,其作用就是求一个结构体成员变量在这个结构体中的偏移量。在Linux kernel中的路径是:include/linux/stddef.h 我们先来看一下这个宏的原型:#define offsetof(TYPE, MEMBER) ((原创 2017-09-05 21:51:54 · 905 阅读 · 0 评论 -
排序算法探究
1、什么是排序排序就是将一串数据按照大小顺序重新排列2、为什么需要排序数据处理中经常用到的一种算法。3、为什么有这么多的排序算法一种新算法的提出,必定是为了解决某种算法在某方面的不足。以下表格简要介绍了几种排序算法的性能。 4、几种排序算法详解本次代码测试使用C语音编写,其他语言亦可。1、冒泡排序冒泡排序顾名思义就是向吐泡泡一样,一次将...原创 2018-03-01 21:59:59 · 443 阅读 · 0 评论 -
C++小结--static关键字的使用
1 static是什么static是c/c++的一个关键字,主要有两个作用: 1 限定作用域, 2 保持变量的持久化。2 在C语言中static的用法2.1 全局静态变量 用法:在全局变量前加上关键字static,全局变量就定义成一个全局静态变量。 static int temp; 内存中的位置:静态存储区,在整个程序运行期间一直存在。 初始化:未经初始化...原创 2018-04-10 11:25:50 · 206 阅读 · 0 评论 -
汇编指令详解
1 为什么要写这篇博客虽然近些年嵌入式开发都使用C语言,但是涉及到很底层的实现的时候,还是得用汇编来实现。所以必须要掌握基本的汇编指令。本篇博客意在讲解一些常用到的汇编指令,算是一个成长积累的过程。后续遇到的汇编指令都会记录到本博客中。2 常用汇编指令学习2.1 MRS指令MRS指令的格式为: MRS{条件} 通用寄存器,程序状态寄存器(CPSR或SPSR) MRS...原创 2018-04-14 08:39:52 · 595 阅读 · 0 评论 -
嵌入式系统通讯协议设计
公司里做项目,嵌入式系统大大小小,到处都是。因为都是一个系统里的,所以都需要通讯,既然通讯就涉及到协议问题。谈及协议,很多工程师觉得协议的设计相对简单,主要是报文的设计。大多数时候,协议的应用场景简单,没有复杂的交互。这么做的确也是没什么太大的问题。然而,就是这么简单的场景,仍有一些协议会在实际中发生意想不到的问题。归根结蒂,还是没有把握协议涉及的规律。下面我们简单的聊聊协议设计的规律。协...转载 2018-05-11 17:27:19 · 694 阅读 · 0 评论 -
C语言入门--状态机编程
转载 2018-05-08 19:09:08 · 3104 阅读 · 4 评论 -
C语言小结--预处理器
1 什么是预处理编译一个C程序涉及很多步骤,其中第一个步骤称为预处理(preprocessing)阶段。C预处理器在源代码编译之前对其进行一些文本性质的操作。它的主要任务包括删除注释、插入被#include指令包含的文件的内容、定义和替换#define指令定义的符号以及确认代码部分内容是否应该根据一些条件编译指令进行编译。1.2 预定义符号预定义符号是由预处理器定义的符号,他们的值...原创 2018-06-03 10:40:43 · 653 阅读 · 0 评论 -
C语言小结--结构体
1 什么是结构体结构体是一种聚合数据类型,它是一种数据元素的聚合。比如我们描述一个学生时,要求有他的姓名、学校、分数等等信息,在之前的处理中,我们通常会使用单独的数据类型来描述。比如,定义一个字符串数组来描述姓名char name[20] = &quot;xiaoming&quot;,定义一个浮点数来描述成绩float f = 96.5等等。但是这种做法有个缺点。所有的这些数据都是为了描述一个学生来定义的,但是它...原创 2018-07-16 21:38:18 · 7685 阅读 · 2 评论 -
C语言小结--取三个数中的中间数
今天遇到一个问题,求三个数中的中间数。 我们的思路是:先求两个数中的最小数,然后把这个最小数和另一个数求最大数,这样就取出了中间数。 求最大数和最小数的宏定义如下:#define MAX(a, b) (((a) &amp;amp;gt; (b) ) ? (a) : (b))#define MIN(a, b) (((a) &amp;amp;lt; (b) ) ? (a) : (b))然后在代码中实...原创 2018-09-13 11:52:55 · 17536 阅读 · 14 评论 -
C语言小结--求一个整数中bit位为1的个数
最近开发需要将一个数据做奇偶校验,首先就是要计算出这个数据中bit位为1的个数,有以下几种算法可以达到要求:1 方法1我直接上代码,然后分析。uint16_t get_one_in_data_1(uint16_t data){ uint16_t n = 0; while (data > 0) { if (data & 0x01...原创 2018-09-14 20:03:06 · 8319 阅读 · 0 评论 -
C语言小结--float short等非char型数据传输问题
1.问题描述最近开发中需要使用can传输float和short型数据,我们知道一般的嵌入式平台的通讯端口如CAN、串口、网络等都是以字节(byte)为单位传输的,那么怎么传输float、short等类型的数据呢?尤其是带符号位的数据。2.解决思路使用共用体(union)首先创建一个结构体,然后在结构体成员中创建共用体。如下所示://底盘状态结构体typedef struct _T_Un...原创 2018-10-10 19:40:07 · 1548 阅读 · 0 评论 -
[MCUKeys] 一个通用的、灵活的、可配置的、可移植的按键事件处理的实现
MCUKeys1 简介MCUKeys是一个简洁小巧可配置的、灵活的、通用的的按键检测程序,截至到目前为止它可以检测如下输入事件:按键按下按键抬起长按(时间可配置)连击(时间可配置)双击组合按键(可以实现以上五种状态)同时,所有的事件都支持注册回调函数,在事件发生时执行。如果当前系统希望只检测按键按下事件,则可以屏蔽其他所有事件,对于其他按键事件亦然。2 使用方法先定...原创 2018-10-31 15:00:26 · 1337 阅读 · 0 评论 -
C语言小结--数组
1、什么是数组(1)从内从角度来说,数组就是一次分配多个变量,而且这些多个变量在内存中是依次相连的。 (2)从编译器角度来说,数组变量也是变量,和普通变量没有什么本质区别,变量的本质就是一个地址,这个地址在编译器中决定具体的数值,变量名和具体数值绑定,变量类型决定这个地址的延续长度。2、为什么需要数组数组作为C语言一种非常重要的数据类型,是为了解决一长串相似功能变量的定义,比如一个班级有20个同学原创 2017-07-23 15:33:45 · 770 阅读 · 0 评论