- 博客(48)
- 资源 (4)
- 收藏
- 关注

原创 【C语言】如何优雅地进行嵌入式C开发?(万字总结)
如果当你听过很多大道理,依然写不好C代码,就来读读这篇文章吧!!!关键词:代码质量、分层设计、设计模式、面向对象、防御式编程
2022-10-11 00:34:00
6623
4
原创 【嵌入式处理器】CPU、MPU、MCU、DSP、SoC、SiP的联系与区别
我们发现,嵌入式处理器正在朝着一个高集成度的趋势发展:MPU → MCU(MPU + 外围器件)→ SoC(MCU + 系统)→SiP(多SoC)。
2023-01-17 23:15:00
6767
1
原创 【嵌入式开源库:cJSON】 一个轻量级C语言JSON数据解析库用法详解
cJSON是使用C语言编写,用来创建、解析JSON文件的库。cJSON特点就是工程文件简单,只有一个.c和一个.h,但提供函数接口功能齐全,麻雀虽小五脏俱全,使得在嵌入式工程中使用起来得心应手。
2022-12-16 17:50:23
2967
原创 【嵌入式存储器】一张图弄懂RAM、ROM、EEPROM、NOR FLASH、NAND FLASH的区别和用途
RAM、ROM、RRPROM、NOR FLASH、NAND FLASH等嵌入式存储器的用途。
2022-12-13 21:23:47
840
1
原创 【C语言】那些优秀代码里的骚操作(持续更新…)
语言这个东西,其实没有奇技淫巧,凡是可以写出来的,能被编译器识别的,都是常规操作,只是由于对知识理解的不透彻而对一些现象的产生的惊奇。然而,我们应该保持这样的惊奇,纪德说:“智者,乃是对一切都发生惊奇的人。”
2022-12-11 00:08:29
1288
1
原创 【QML】分享一个纯QML实现的2048小游戏
随着QT6的问世,UI设计+Qt代码联动的设计方式在Qt Creator中已经变成了不可用状态(虽然可以手动打开),官方开始推广用QML来进行界面设计,当时蠢蠢欲动做了一个小游戏,忽然想起来分享一下,代码开源在本人github上,欢迎拉取!
2022-12-07 14:47:02
964
原创 【嵌入式UI框架:LVGL】使用NXP GUI Guider 拖拽式设计LVGL
LVGL的作者是来自匈牙利的Gabor Kiss-Vamosikisvegabor,LVGL用C语言编写,以实现最大的兼容性(与C ++兼容),模拟器可在没有嵌入式硬件的PC上启动嵌入式GUI设计,同时LVGL作为一个图形库,它自带着接近三十多种小工具可以供开发者使用。这些强大的构建块按钮搭配上带有非常丝滑的动画以及可以做到平滑滚动的高级图形,同时兼具着不高的配置要求以及开源属性,显著的优势使得LVGL蔚然成风,成为广大开发者在选择GUI时的第一选择。
2022-12-06 16:59:38
6867
4
原创 【WiFi模组】乐鑫ESP32 基于ESP-IDF的原生SDK二次开发
乐鑫ESP32,属于一种片上开发,现就Windows下搭建其SDK环境及遇到的问题进行记录。
2022-07-11 18:19:34
4560
原创 【Cat.1模组】 广和通L610 基于OpenCPU的SDK二次开发
目前支持Cat.1网络的芯片平台主要是紫光展锐UIS8910和翱捷ASR1603,基于紫光展锐平台,各大厂商延伸出多款Cat.1模组;广和通L610就是其中之一。本文记录开发过程,供日后参考。广和通L610模组支持AT指令开发和OpenCPU开发两种方式:①采取外挂MCU通过AT指令控制模组②无需外挂MCU,采用片上操作系统(OpenCPU)提供的SDK进行开发,节省成本 ,也是目前芯片短缺情况下的主要开发模式√一、 开发环境1.系统环境:ubuntu16.042.编辑代码:VScode3.
2022-04-01 10:46:33
11659
21
原创 激光雷达与毫米波雷达的区别
激光雷达主要是通过发射激光束,来探测目标的位置、速度等特征量。激光雷达的优势在于其探测范围更广,探测精度更高。车载激光雷达普遍采用多个激光发射器和接收器,建立三维点云图,从而达到实时环境感知的目的。从当前车载激光雷达来看,机械式的多线束激光雷达是主流方案。但是,激光雷达的缺点也很明显:在雨雪雾等极端天气下性能较差,采集的数据量过大,价格十分昂贵。目前百度和谷歌无人驾驶汽车车身上的64位激光雷达,售价高达70万元人民币。激光发射器线束的越多,每秒采集的云点就越多,探测性能也就更强。然而线束越多也就代表着
2021-09-09 14:28:00
5034
原创 【STM32】FreeRTOS踩坑
1.在FreeRTOS内核启动前(即osKernelStart()函数前),千万不能使用osDelay()来延时,否则会发生硬件错误int main(void){ ... /* Init scheduler */ osKernelInitialize(); /* Call init function for freertos objects (in freertos.c) */ MX_FREERTOS_Init(); /* Start scheduler */ osKer
2021-08-12 16:01:33
3743
1
原创 【Pixhawk】PX4源码控制逻辑详解(以UGV小车为例)
PX4启动流程主体控制逻辑commander:飞行模式控制stickmapper:摇杆映射position_estimator:从GPS获得的位置估计navigator:读取航点,产生期望位置pos_ctrl: 位置控制attitude_estimator: 从IMU获得的姿态估计att_ctrl: 姿态控制mixer: 混控器根据机型分配力矩详细控制逻辑(含数据结构体)以UGV小车为例1.在FIRMWARE/ROMFS/px4fmu_common/init.d/rc.ro
2021-08-12 14:35:25
5407
10
原创 【Pixhawk】Ubuntu下编译原生固件PX4
环境:PC:Ubuntu20.0.4主机1、下载PX4源码新建一个pixhawk/source目录,cd进去git源码cd pixhawk/sourcegit clone https://github.com/PX4/Firmware.git下载完成后,该目录下会出现一个Firmware目录2、更新子模块到Firmware目录中更新子模块cd Firmwaregit submodule update --init --recursive中途可能因为网络原因卡住,直接ctrl+
2021-07-20 18:14:06
4966
11
原创 【Qt】opencv源码&官方编译好的opencv在windows下使用的区别
之前用过很多次OpenCV,但是感觉每次情况都不一样,看了之前的文章【QT】搭载OpenCV实现简单的图像处理,用的是官方编译好的OpenCV+msvc2017+Qt Creator,再之前是在linux上用的,已经不记得了,所以使用场景不同,还是记录一下比较好1.在Windows上使用OpenCV,需要在官网下载.exe文件https://opencv.org/releases/2.解压得到如下目录,有两个文件夹,build\是已经编译好的opencv,sources\是源码,而如果下载linu.
2021-07-14 20:24:13
2518
3
原创 【STM32】RT-Thread使用FINSH
1.打开STM32串口(1)打开Cube配置一个用于打印的串口,这里使用串口4(2)打开串口4的宏可以看到下面用到这个宏的是drv_usart.c,只有打开对应外设的宏,外设驱动才运行2.打开FINSH组件3.将UART4关联到FINSH控制台打开rtconfig.h,配置宏 RT_CONSOLE_DEVICE_NAME为“uart4”,4.串口映射函数编写我们知道串口映射到控制台都是通过改写printf函数,rt-thraed也这样做了,就是这个所谓的rt_kprintf()其
2021-07-05 16:56:18
2714
3
原创 【KiCad】使用体验总结
用了一段时间的Kicad,说它好,真的不错,说它不好,也确实存在很多痛点。示例这是个集成 usb充电/电量显示/开关的小四层板使用体验1、原理图绘制:(1)选中一块区域的电路,这部分电路直接跟着鼠标动,松开鼠标才重新放下,这个操作有点自做聪明,这里面有个设定:好像我选中了就必须移动一样。但是移动单个元器件比较方便,可以把鼠标放在器件上,然后按快捷键M移动。(2)选中一个东西就费劲,我点引脚,你问我明确选择引脚还是芯片,你想多了,简称之为不智能。2、封装:封装库很全,基本不用去网上找或自己
2021-06-10 11:17:41
6943
原创 【FPGA】QuartusII13.0实现组合逻辑 3/8 译码器
目的:通过实现 3/8 译码器,记录一下FPGA开发的基本步骤1.代码编写module decoder3_8(input wire in1 , //输入信号 in1input wire in2 , //输入信号 in2input wire in3 , //输入信号 in3output reg [7:0] out //输出信号 out);//out:根据 3 个输入信号选择输出对应的 8bit out 信号always@(*)//使用"{}"位拼接符将 3 个 1bit 数据按照.
2021-06-03 16:10:49
12417
6
原创 【FPGA】QuartusII13.0全编译Error (119013): Current license file does not support the EP4CE10F17C8 device
Quartuls II全编译时,出现如下错误网上很多人说找到32位的exe可以编译成功,但是凭啥64位的就不行了?而且我32位的也不行这种情况就是没破解好,但Licence Setup 显示已经破解好了:检查发现自己的破解器是32位的,如果不注意的话当作64位破解器来破解64位exe,表面上也是破解成功的,编译时也不提示没有Licence,而是提示上面那个错误,但其实是在64位exe中用了32位的Lisence。所以应把破解器放在\bin下破解,而不是在\bin64下,需要使用64位exe可以去下
2021-06-02 16:32:44
15343
14
原创 【Linux】交叉编译qt并移植到ARM平台
编译主机: Ubuntu20.04Qt源码版本: qt-everywhere-opensource-src-5.15.2.tar.gz交叉编译工具: arm-linux-gnueabihf-gcc1、下载解压,然后cd到文件夹下tar -vzxf qt-everywhere-opensource-src-5.15.2.tar.gzcd qt-everywhere-opensource-src-5.15.22.修改交叉编译架构用到的信息(1).cd到如下目录,ls可以看到qt支持的交叉编译器列
2021-04-27 18:17:23
3524
5
原创 【Linux】交叉编译linux内核到ARM平台
一.环境1.主机:ubuntu20.042.内核版本:linux5.11.113.交叉编译工具链:arm-linux-gnueabihf-gcc4.目标平台:imx6ull主板内核源码和交叉编译工具的下载安装不再赘述,直接上步骤二.步骤1.安装编译内核需要的依赖:sudo apt install libncurses5-devsudo apt install openssl sudo apt install libssl-dev sudo apt install build-essen
2021-04-19 17:39:26
3215
1
原创 【Linux】字符设备驱动框架
一.注意1.区别裸机驱动:底层,和寄存器打交道,MCU会提供库;驱动和用户程序是杂揉在一起的。linux驱动:直接操作寄存器不现实,需要根据linux下框架开发,/include/linux/fs.h中有个叫file_operations的结构体,它是linux内核驱动操作函数集合,框架开发其实就是file_operations结构体成员变量的实现:open、 close、 write 和 read 等。驱动与用户程序分层开发。file_operations各项成员变量解析.2.在linux下一切皆
2021-04-09 17:11:58
368
原创 【KEIL】发生硬件错误卡在HardFault_Handler()的解决办法
1.调试时点击stop按钮2.调出View->Register窗口,查看R14(LR)的值:如果是0xFFFFFFE9,则查看MSP的值;若为0xFFFFFFED,则查看PSP的值。此处为第一种情况,所以查看MSP。3.调出View->Memory1窗口,将MSP输入到地址框,找到0800开头的地址,这里是0x08007217。4.调出View->Disassembly窗口,右键Show Disassembly at adress…,在弹出框中输入0x08007217,汇编和C
2021-03-24 12:57:11
11006
2
原创 【硬件调试】串口乱码原因汇总
一般有以下几种原因,列举一下提醒自己1.波特率出错或者其他串口设置出错2.三线即可进行通信,未接地或者接触不良,TTL/232 TX、RX接反,485 A、B接反3.如果接电脑可以通信,而设备间通信不行,可能设备供电电压不足,导致电平紊乱,可以换电量充足的电池4.看是有源还是无源的,有源芯片要接VCC,四线通信...
2021-01-25 15:15:40
11142
原创 【GPS模组】移远EC20 基于Arduino的GPS流速仪
功能描述:1.实时刷新定位(精度<2.5m,频率1Hz)2.实时将定位数据传送给指定服务器3.可通过串口配置服务器地址、刷新频率等信息4.附加:当设备移动时,输出移动速度一、硬件结构
2020-11-26 20:31:10
6523
3
原创 【NB-ioT模组】移远BC35-G 基于STM32连接电信云(附代码)
文章目录一、指令汇总二、串口助手单条AT指令测试三、在Stm32中的组合使用一、指令汇总1.先弄清楚四种AT指令的格式AT+<cmd>= ? 测试命令,用于向模块询问支持的设置项目。AT+<cmd>? 读取命令,用于让模块上报某个命令代表的设置项当前的值。AT+<cmd>=p1 设置命令,用于向模块设置某个项目的值AT+<cmd> 执行命令,用于向模块执行某个操作2.可以用AT+CLAC查看所有支持的指令[09:1
2020-09-11 17:50:40
5873
1
原创 【QT】OpenCV车牌识别之第一部分:车牌定位
摘要车牌识别主要包括三大方面:车牌定位、字符分割、字符识别,今天先整理第一部分主要处理步骤如下,方法不单一,也可以在HSV图做车牌定位,我这里用了灰度图灰度处理二值化边缘检测生态学检测一、灰度处理把RGB图处理成灰度图,方便二值化//灰度处理Mat MainWindow::GRAY(Mat img){ Mat img_gray; cvtColor(img, img_gray, COLOR_BGR2GRAY);//颜色空间转换 return img_g.
2020-09-02 18:40:27
3529
原创 【QT】搭载OpenCV实现简单的图像处理
一、环境介绍PC:Windows7IDE:Qt5.8+Qt Creator 4.9OpenCV版本:OpenCV3.4.10官网上下载很慢,去这个网址,https://zh.osdn.net/projects/sfnet_opencvlibrary/releases/这里是opencv官方文档地址,介绍了opencv的所有功能和demo程序https://www.w3cschool.cn/opencv/编译器:msvc2017这个和MinGW使用方式不一样,MinGW主要用于跨平台,需配合CM
2020-08-31 18:37:08
3175
2
原创 【STM32】printf函数重定向至UART 打印设备状态LOG
这样做的好处:可以很好的监控设备,以适当取代麻烦的debug; 用printf()函数代替串口发送,更易用很简单,分两步1.选择支持printf重定向的库(1)在Target中选择Use MicroLIB(2)或者在usart.c中添加#pragma import(__use_no_semihosting) //标准库需要的支持函数 struct __FILE { int handle; }; FILE __stdou.
2020-08-26 10:36:43
1942
原创 【GPRS模组】 安信可A9G 基于OpenCPU的SDK二次开发
采用安信可基于A9G的pudding开发板,支持SDK片上开发和AT指令开发,SDK开发不需要控制板,用起来非常方便
2020-08-23 00:18:13
1685
原创 【Arduino】IIC 1602液晶屏显示
今天从办公室垃圾堆里发现了6块1602液晶屏,准备试试好坏,结果就1块能用,把另外5块默默送回了垃圾堆1、硬件连线IIC只需要四根线:VCC5V、GND、SCL、SDA2、Arduino库添加(1)工具->管理库->搜索LiquidCrystal_I2C->安装(2)加载贡献库3、代码#include <Wire.h> #include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd(0x27,16.
2020-08-06 18:43:17
5371
3
原创 【STM32】RS485 Modbus协议 采集传感器数据
一、硬件1、传感器:为液压传感器,12vDC,RS485数据输出,采用Modbus协议通信2、根据传感器属性,电路主要是两部分,通信和电源(1)485电路:由于485是半双工通信,需要控制收发,所以索性在把电路设计成自动收发电路接跳线帽W1、W2即使用RS485收发,不接就是普通串口收发。RE和DE是收发使能,选择485模式:3_TXD常高,使能接受;当发送数据时,数据的起始位(下降沿)将3_TXD引脚电平拉低,将顺便使能发送。(2)开关电路:主要是为了控制传感器开关,以降低功耗...
2020-06-28 16:46:00
25233
105
原创 【STM32】HAL库 移植FreeRTOS并使用
一、移植FRreeRTOS到STM32这个我用的是STM32CudeMX的FRreeRTOS组件,所谓的移植在这里仅仅是个打钩操作二、任务1、任务特性简单、没有使用限制使用抢占优先级每个任务都拥有堆栈导致RAM使用量很大要...
2020-06-19 22:39:01
7685
4
原创 GPS、RTK、PPK三种定位技术的原理及应用
一、GPS技术【原理】之前做过集成GPS功能的产品,对这种不以定位为主要功能的产品,精度是没有要求的,例如我只是用它来得到当前社区的位置,一般的GPS模块都能满足要求。理论上,超过四颗卫星就能实现定位。我们的GPS产品,只要集成卫星接受芯片,就可以获取定位信息了【弊端】卫星定位存在以下误差:轨道误差,就是卫星告诉你的位置和其真实的位置有偏差。时钟误差,就是卫星告诉你的时间和标准时间有偏差。电离层延迟,就是卫星信号在从太空穿越大气层,经过电离层时其速度会变慢,而我们却不知道它慢了多少时间。
2020-06-19 18:08:12
20797
1
原创 【C语言】三剑客之《C陷井与缺陷》完整笔记
C语言缺陷与陷井第1章:词法陷井1.1运算符陷井1.1.1 =不等于==1.1.2 &和| 不同于 &&和||1.1.3 “贪心法”1.2 进制陷井1.3 字符与字符串陷井第2章:语法陷井第3章:语义陷井第4章:连接第5章:库函数第6章:预处理器第7章:可移植性缺陷第8章:C建议第1章:词法陷井1.1运算符陷井1.1.1 =不等于==在C中,“=”是赋值,“==”是判断当判断变量与变量时,很容易误写成if(x = y),语法上没错编译器不会报错,但是功能不对,如果非要用赋
2020-06-07 17:50:02
1815
2
原创 【C语言】回调函数的理解和使用
1、先来回答这个奇奇怪怪的名字,为啥叫回调函数,调就调,咋还回调,那先看它是怎么使用的:int main(){ F1(F2);}mian函数要调用F1,如果程序立马执行了F1,那么就是正常的调用,但是在这里不是。在这里,F1里面有个参数:函数指针F2,程序会先去执行F2指向的函数,回头再来执行F1。说得通俗点,你妈让你去买菜,但是不知道买什么好,让你去问你奶奶,你问完了再回来买菜。你妈是mian函数,你奶奶就是F2,你是F1,目的就是要得到“菜”这个返回值。所谓回调,就是回头再买。2、
2020-05-23 12:47:59
1278
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人