嵌入式相关
文章平均质量分 74
单片机、Linux、QT、电子技术类、面试题等等可能会包含在该栏目
凉开水白菜
有嵌入式arm及qt软件开发方面三年经验,嵌入式qt领域专家,csdn/掘金平台优质作者,擅长嵌入式软硬件项目方案设计,qt界面开发,单片机程序设计等。
展开
-
【ARM】imx6ul移植u-boot记录,恩智浦github提供的最新uboot(2023年7月31)
本文使用的芯片是imx6ul,移植目标完成对恩智浦github提供的最新uboot(2023年7月31)原创 2023-08-04 16:09:34 · 418 阅读 · 0 评论 -
【ARM】Linux内核驱动之设备树的学习-长文
订阅的粉丝可通过PC端文末加我微信,可对文章的内容进行一对一答疑!描述硬件得文本文件,因为语法结构像树所以叫设备树通过DTC编译dts、dtsi文件编译出dtb文件所有的设备树文件都存在与下面的路径二、如何编译设备树?DTC编译器的源码路径,dtc文件夹下面的dtc执行文件就是我们的设备树编译器(要保证源码已经编译过一次)如果编译完成还是没有可能是内核版本太低没有引进设备树,或者是配置选项未勾选,可以在.confg文件中查看该选项最简单的设备树源码编译器编译指令/home/book/liche原创 2023-07-31 00:37:47 · 353 阅读 · 0 评论 -
【STM32】NRF24L01模块的收发调试
这里我是用了两块板子来做通信实验,这里我就直接贴发送端和接收端的.c.h文件,一个是用标准库写的一个是hal库写的,只是两块板子引脚不同代码大差不差;发送端.h文件发送端main函数接收端.c文件接收端.h文件接收端main函数总结:1、两个NRF24L01 通信的核心是知道对方的地址也就是RX_ADDRESS和TX_ADDRESS这两个数组,两个模块的地址可以相同,但通常情况下允许不同的地址通道设置完全相同的地址。2、发送和接收用户数据的宽度两端必须相同才能通信,如果一直没法通信检原创 2022-11-24 15:15:19 · 1487 阅读 · 0 评论 -
【FreeRTOS】中断管理
前面的章节多数的API使用都讲到中断专用和任务专用是分开的,为什么FreeRTOS会设计两套api函数呢?他们又有那些区别?原创 2022-11-10 15:04:17 · 1176 阅读 · 0 评论 -
【FreeRTOS】任务通知的使用
任务通知和信号量、队列、事件等用法相同,在任务之间进行数据传输或者事件传输对比队列和信号量等效率更高,因为任务通知的变量是跟随任务创建时创建的无需像队列事件一样创建结构体可以更节省内存;原创 2022-11-07 23:47:20 · 1264 阅读 · 0 评论 -
【FreeRTOS】事件组的使用
事件组与信号量类似,我们可以把事件组理解为一个整数(在FreeRTOSConfig.h文件中),用其中一位来表示一个任务的状态0-1,我们可以通过这些任务的组合来进行任务执行的判断标准;他与信号量不同的是事件组能针对1对多,多对多的任务,例如我们按键按下事件组可以通知多个任务开始执行,或者某个任务可以等待多个任务完成后在执行等;如果configUSE_16_BIT_TICKS是1,那么这个整数就是16位的,低8位用来表示事件。原创 2022-11-07 17:29:58 · 717 阅读 · 0 评论 -
【FreeRTOS】软件定时器的使用
软件定时器使用tick作为时间片轮转调度以及延迟操作的时间度量单位,tick是实现定时触发功能的基础。tick计数发生在每次时钟中断处理的过程,时钟中断是定时产生的,系统在默认情况下为1ms触发一次,即一个tick代表1ms,用户可根据应用需要调整该时间。软件定时器是用来在指定时间或者触发一次或多次某个功能函数的调用。这种由定时器来执行的函数叫做定时器回调函数,定时器回调函数以及触发时间由应用程序来设定。当定时器的触发时间到来,则定时器的回调函数会被执行。原创 2022-11-07 12:39:01 · 1967 阅读 · 0 评论 -
【FreeRTOS】互斥锁的使用
可以看到互斥量的api和信号量的api是一样的,因为互斥量的本质是一个特殊信号量,但是需要注意互斥量不能在ISR中使用;互斥量的使用场景一般是在多个任务中操作同一个变量的时候会出现使用;互斥量是一种特殊的二进制信号量,使用互斥量时,先创建、然后去获得、释放它。:pdTRUE表示成功,如果二进制信号量的计数值已经是1,再次调用此函数则返回失败;如果计数型信号量的计数值已经是最大值,再次调用此函数则返回失败;: 返回句柄,非NULL表示成功。:信号量句柄,释放哪个信号量。:信号量句柄,释放哪个信号量。原创 2022-11-04 17:48:37 · 4372 阅读 · 0 评论 -
【FreeRTOS】信号量的使用
什么是信号量?什么是计数型信号量?什么是二进制信号量?以及互斥信号量和递归信号量信号也就是发出通知的信号,量表示信号发出的数量;让信号的数量没有限制的时候就是计数型信号量;当数量只有两种状态一种是有(1)一种是无(0)也就是二进制信号量;原创 2022-11-04 16:32:44 · 2501 阅读 · 0 评论 -
【FreeRTOS】多任务创建
在上一章我们完成了工程的创建后面代码都会基于这个模板来编写,本章就学习一下实时操作系统给我们带来最直观的优势,多任务执行;原创 2022-11-03 11:35:42 · 679 阅读 · 0 评论 -
【FreeRTOS】系统移植:资料下载
在裸机系统中,所有的程序基本都是自己写的,所有的操作都是在一个无限的大循环里面实现。现在还有一些项目开发用的都是裸机系统,而且也能够满足需求。为什么还要学习 RTOS 编程,偏偏还要整个操作系统进来。一是项目需要,随着项目要实现的功能越来越多,单纯的裸机系统已经不能够完美地解决问题,反而会使编程变得更加复杂,如果想降低编程的难度,我们可以考虑引入RTOS 实现多任务管理,这是使用 RTOS 的最大优势。二是学习的需要,进入实时操作系统的学习对于我们后面学习Linux系统开发会有不少的帮助;原创 2022-11-02 15:41:38 · 1426 阅读 · 1 评论 -
【嵌入式开源库】EasyLogger的使用, 一款轻量级且高性能的日志库
EasyLogger 是一款超轻量级 、高性能的 C 日志库,非常适合对资源敏感的软件项目,例如:IoT 产品、可穿戴设备、智能家居等等。相比 log4c、zlog 这些知名的 C 日志库,EasyLogger 的功能更加简单,提供给用户的接口更少,但上手会很快,更多实用功能支持以插件形式进行动态扩展。本章使用环境:虚拟机ubuntu1804 、正点原子stm32407探索者开发板、工程模板:HAL库 - 实验4 串口通信实验。...原创 2022-08-26 11:20:35 · 5195 阅读 · 0 评论 -
【嵌入式开源库】使用J-Link打印日志,让你节省一个打印串口
EGGER RTT支持使用J-link调试器输出来自目标微控制器的信息,也可以接收输入,并且在高速度交互的同时不会影响目标处理器的实时性,可以省掉平常打印日志用的串口。RTT工具支持 ARM Cortex-M0/M0+/M1/M3/M4/M7/M23/M33 内核和瑞萨 RX100/200/600 内核。RTT工具的源码实现提供了完整的功能,可以自由使用。...原创 2022-08-10 19:17:38 · 1198 阅读 · 0 评论 -
【嵌入式开源库】MultiButton的使用,简单易用的事件驱动型按键驱动模块
MultiButton 是一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构,去除冗余的按键处理硬编码,让你的按键业务逻辑更清晰。本章使用环境:正点原子stm32F4探索者代码工程使用正点原子HAL库实验三-按键输入实验};这样每个按键使用单向链表相连,依次进入 button_handler(struct Button* handle) 状态机处理,所以每个按键的状态彼此独立。按键事件事件说明PRESS_DOWN。......原创 2022-08-09 17:33:25 · 1556 阅读 · 0 评论 -
【ARM】rk3399挂载nfs报错
挂载nfs报错mount: /mnt: bad option;原创 2022-08-09 14:35:50 · 438 阅读 · 2 评论 -
【嵌入式开源库】cJSON的使用,高效精简的json解析库
JSON 全称 JavaScript Object Notation,即 JS对象简谱,是一种轻量级的数据格式。它采用完全独立于编程语言的文本格式来存储和表示数据,语法简洁、层次结构清晰,易于人阅读和编写,同时也易于机器解析和生成,有效的提升了网络传输效率。cJSON是一个使用C语言编写的JSON数据解析器并采用ANSI C(C89)编写以支持尽可能多的平台和编译器,该项目同时也具有超轻便,可移植,单文件的特点,使用MIT开源协议。json格式{虚拟机ubuntu1804。......原创 2022-08-09 14:29:38 · 1578 阅读 · 1 评论 -
【Kernel】驱动开发学习之Platform平台总线模型
平台总线模型也交platform总线模型,他是Linux虚拟出来的一条总线,他并不是真实的一条真实的电气总线;平台总线模型就是把原来的驱动C文件给分成了两个文件一个是device文件对应我们的设备文件,一个是driver文件对应我们的驱动文件,平台总线的优点有1)提高代码重用性2)减少重复性代码3)区分设备与驱动4)更方便管理我们的设备把稳定不变的驱动放在driver里面,需要做改动的设备部分放在device文件中;...原创 2022-07-22 00:30:58 · 665 阅读 · 0 评论 -
【ARM】新唐NUC977移植WK2124驱动
目前WK系列能实现SPI扩展uart的芯片包括WK2124、WK2204、WK2168、WK2132。目前WK2124、WK2204、WK2168能实现SPI扩展4路UART,WK2132能实现扩展2路UART。目前这几款芯片使用的都是相同的linux驱动。WK系列扩展的子通道的UART具备如下功能特点每个子通道UART的波特率、字长、校验格式可以独立设置,最高可以提供2Mbps的通信速率。https提取码ix73httpshttpshttps。......原创 2022-07-18 10:13:42 · 834 阅读 · 0 评论 -
【Kernel】驱动开发学习之字符设备
然后编译我们的驱动代码再通过上面的演示我们就可以看到字符设备注册成功了,但是这种方式存在一个问题就是我们要提前知道空闲的设备号才能进行注册,否则将会发生设备号冲突问题,这里就拿杂项设备驱动号来做申请尝试。这里需要注意的是我们动态申请的设备号是主设备号和次设备号已经合并了的,如果后续会使用到次设备号我们需要使用MAJOR、MINOR来单独提取申请到的主设备号和次设备号。//实际就是把文件操作集写给ops功能。fmt是设备名字,如果设置fmt=xxx的话,就会生成/dev/xxx这个设备文件。...原创 2022-07-17 02:20:39 · 374 阅读 · 0 评论 -
【ARM】在NUC977上搭建基于boa的嵌入式web服务器
搭建基于arm开发板的web服务端程序,通过网页控制开发板LED状态Boa服务器是一个小巧高效的web服务器,是一个运行于unix或linux下的,支持CGI的、适合于嵌入式系统的单任务的http服务器,源代码开放、性能高。Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右。作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全。.........原创 2022-06-24 15:40:44 · 897 阅读 · 0 评论 -
【Linux】NUC977移植使用MQTT(基于mosquitto)
相关简介: MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议,是一种基于发布/订阅 (publish/subscribe)模式的轻量级协议,该协议构建于 TCP/IP 协议之上, MQTT 最大优点在于,可以以 极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即 时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。 完成目标: 1,完成mosquitto库的编译 2,编写程序...原创 2022-06-23 15:32:48 · 673 阅读 · 2 评论 -
【ARM】迅为rk3568开发板buildroot添加桌面应用
开发板:讯为rk3568根文件系统:buildroot系统:Linux添加桌面应用需要准备三个文件:桌面图标文件、xxx.desktop文件、可执行应用文件推荐使用阿里巴巴矢量图网站进行下载,图标的尺寸为128x128链接直达:https://www.iconfont.cn/该文件内容如下:Name参数表示桌面图标下的文字显示Exec表示可执行程序应用路径Icon是桌面应用图标文件Type表示应用程序(是否有其他类型暂时未知详细可以去buildroot路径下的QT桌面程序下分析)下面的可执原创 2022-06-22 23:02:32 · 1961 阅读 · 0 评论 -
【ARM】迅为rk3568开发板lvds屏设置横屏显示
开发板:讯为rk3568根文件系统:buildroot系统:Linux这里我参考的是迅为资料中的09手册android系统和应用开发手册修改/kernel/arch/arm64/boot/dts/rockchip/topeet_rk3568_lcds.dtsi设备树这里的目录就是我们修改显示屏幕的目录,该目录下有两个设备树文件一个是屏幕的选择一个是屏幕的设置其中:logo,rotate = ;代表逆时针旋转 90 度,logo,rotate = ;代表逆时针旋转 180 度,l...原创 2022-06-19 01:32:35 · 3393 阅读 · 2 评论 -
VsCode编码自动检测转换
打开设置面板(不是命令面板)然后输入框输入 encodeing最后勾选auto guess encoding选项重启即可原创 2020-08-20 20:23:13 · 7180 阅读 · 2 评论 -
大厂面试题含答案(一)
10家大厂面试题精选2020 年阿里精选面试题及答案1. 使用 mysql 索引都有哪些原则?索引什么数据结构? B+tree 和 B tree 什么区别?2. Mysql 有哪些存储引擎?请详细列举其区别?3. 设计高并发系统数据库层面该如何设计? 数据库锁有哪 些类型?如何实现?4. 数据库事务有哪些?5. Oracle 常用函数有哪些?6. Sql 中哪些情况可能不会走索引?7. 讲讲分布式唯一 ID?8. NIO 和 IO 的区别?9. Redis 内存数据上升到一定大小会执行数据淘汰策略,Redi原创 2021-01-19 12:48:38 · 726 阅读 · 0 评论 -
大厂面试题含答案(二)
10家大厂面试题精选2020 年小米精选 50 面试题及答案1. 协程了解过么?2. 变量的声明和定义有什么区别3. sizeof 和 strlen 的区别4. 一个指针可以是 volatile 吗?5. 简述 strcpy sprintf 与 mencpy 的区别6. 编码实现直接插入排序7. STL 里 set 和 map 是基于什么实现的?8. 求两个多项式的乘积9. 一副从 1 到 n 的牌,每次从牌堆顶取一张放桌子上,再取 一张放牌堆底,直到手上没牌,最后桌子上的牌是从 1 到 n 有序,设计程序原创 2021-01-19 16:10:39 · 494 阅读 · 0 评论 -
手把手教你用C#写一个刷屏软件
手把手教你用C#写一个刷屏轰炸软件成品展示环境准备新建项目程序思路程序部分完整代码成品展示环境准备VS2019新建项目打开界面绘制打开工具箱开始放置按钮标签以及文本框最后设计完成的效果这里需要注意的是这里的每个按钮、文本框等空间都一一对应一个名字程序思路点击开始,把发送框的内容复制到剪切板中,然后点击需要刷屏的对象框然后定时的模拟按键CTRL + V + ENTER实现粘贴和发送操作。设计的操作:点击开始按钮,设定定时器执行间隔时间,获取输入框内容添加到剪切板,开启定时器,开始原创 2021-01-22 20:54:09 · 2839 阅读 · 3 评论 -
【Linux】C语言动态库和静态库的制作和使用
静态库mylib.c#include <stdio.h>void mylib_api(void);void mylib_api(void){ printf("mylib printf\r\n");}main.c#include <stdio.h>void mylib_api(void);int main(){ mylib_api(); return 0;}编译静态库gcc -c mylib.c ar cr libmylib.a myli原创 2022-05-24 18:06:37 · 987 阅读 · 0 评论 -
【虚拟机】 VMware虚拟机占用空间过大解决
列出该目录所有文件或者文件夹占用情况du -sh * 用户目录占用和我使用的文件夹中内容占用不相同,然后就猜想占用硬盘的应该是那几个.开头的文件夹,因为.开头的文件夹在Ubuntu的文件管理系统中不会显示,这里使用ll指令可以看到这些文件夹,然后挨个进入这些目录使用du -sh * 查看占用,最终找到是下面这个目录中造成的占用,然后我们执行删除命令即可解决问题。/home/用户名/.cache/vmware/drag_and_drop该目录是在vmware虚拟机下安装的ubuntu系统,为了在原创 2022-06-05 09:57:50 · 2991 阅读 · 0 评论 -
【Kernel】驱动编译的两种方式:编译成模块、编译进内核(使用杂项设备驱动模板)
杂项设备的驱动是驱动开发中最简单最方便的,核心就是处理write信号和read信号做出对应的反应。如果需要将驱动编译成模块前提是有编译好的kernel,并且开发板是烧录的该版本的kernel,编译成模块我们只需要新建一个Makefile文件:然后我们只需要make就会生成.ko文件,然后将ko文件拷贝到开发板中,加载驱动使用insmod、卸载内核使用rmmod。驱动编译进内核如果要将驱动编译到内核中去则需要新建两个文件一个Makefile一个KconfigMakefileKconfig相关的Kc原创 2022-06-07 15:15:28 · 3398 阅读 · 0 评论 -
【Linux】NUC977移植使用libmodbus
libmodbus是一个快速、跨平台的Modbus库,目前支持Linux, Mac OS X, FreeBSD, QNX和Windows系统,可以与使用Modbus协议的设备进行数据发送/接收的库,该库包含各种后端以支持通过不同网络进行通信(例如,RTU模式下的串口或TCP / IPv6中的以太网),libmodbus提供了较低通信层的抽象,并在所有支持的平台上提供相同的API;文末提供一份libmodbus官方手册中文翻译文档。.........原创 2022-06-02 14:02:40 · 477 阅读 · 0 评论 -
【Linux】ubuntu1804配置opencv4.5.5
opencv的安装和测试首先是opencv源代码的下载:https://github.com/opencv/opencv/releases我这里下载的是opencv4.5.5版本,然后将他放置到我们的虚拟机中解压tar -xvf opencv-4.5.5.tar.gz 然后我们需要安装一些opencv需要依赖的包和编译需要的工具sudo apt install cmakesudo apt-get install build-essential libgtk2.0-dev libavco原创 2022-05-23 13:47:09 · 798 阅读 · 0 评论 -
【Linux】新唐NUC977挂载NFS实现网络文件传输
开发板挂载nfs前言一、虚拟机Ubuntu配置二、开发板挂载最后前言** 相关简介: NFS(Network File System)即网络文件系统,是 FreeBSD 支持的文件系统中的一种,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。在 NFS 的应用中,NFS 的客户端应用可以透明地读写位于远端 NFS 服务器上的文件,就像访问本地文件一样。 使用 NFS,可以很方便的将 PC 上编译好的程序或者一些其他文件复制到开发板上调试,省去了频繁插拔 U 盘的繁琐。原创 2022-05-19 16:34:53 · 586 阅读 · 0 评论 -
【STM32】基于HAL库的360度编码器、摇杆代码编写
360度编码器、摇杆360度旋转编码器摇杆360度旋转编码器unsigned char cur_num = 0;//外部中断初始化void EXTI_Init(void){ GPIO_InitTypeDef GPIO_Initure; __HAL_RCC_GPIOE_CLK_ENABLE(); //开启GPIOE时钟 GPIO_Initure.Pin=GPIO_PIN_2; //PE2 GPIO_Initur原创 2022-05-13 13:33:06 · 1683 阅读 · 2 评论 -
【Linux】新唐NUC977编译第一个内核驱动程序Hello World
在新唐NUC977的Hello World内核驱动程序前言一、文件的编写二、内核的编译及烧录最后前言 相关简介: 1,增加驱动文件 hello.c 和对应的 Makefile、Kconfig 2,修改上一级的 Makefile 与 Kconfig 3,使用 Make menuconfig 进行配置 4,编译,烧录和运行完成目标: 创建一个 hello 的驱动,在开机的时候加载,并打印"Hello world"一、文件的编写接着上一章的LinuxBSP包,进入02.lin原创 2022-05-11 16:49:34 · 694 阅读 · 0 评论 -
【Linux】ubuntu安装samba服务器
Linux安装samba服务器前言正文前言在VMware虚拟机中安装samba服务器,可以用于windows与虚拟机文件夹共享,虽然VMware自带文件传输的工具,但是如果换一个环境换一个虚拟机工具就不一定具备该功能,所以samba服务器的搭建还是非常重要的。系统镜像:ubuntu1804正文 sudo apt install samba然后我们进行samba配置sudo vim /etc/samba/smb.conf按两次】】键到文件末添加以下内容[ubuntu_samba]原创 2022-05-09 10:40:27 · 524 阅读 · 1 评论 -
【STM32】使用单片机DAC产生噪声群
前期准备软件平台:基于KEIL的HAL库开发硬件平台:正点原子STM32F4探索者开发板STM32F4 DAC 简介STM32F4 的 DAC 模块(数字/模拟转换模块)是 12 位数字输入,电压输出型的 DAC。DAC可以配置为 8 位或 12 位模式,也可以与 DMA 控制器配合使用。DAC 工作在 12 位模式时,数据可以设置成左对齐或右对齐。DAC 模块有 2 个输出通道,每个通道都有单独的转换器。在双 DAC 模式下,2 个通道可以独立地进行转换,也可以同时进行转换并同步地更新 2原创 2022-05-06 14:07:06 · 1523 阅读 · 0 评论 -
【Linux】新唐NUC977系统编译及烧写流程
新唐NUC977系统编译及下载流程前言一、UBoot的编译二、Kernel的编译三、文件系统的制作四、系统的烧录最后前言 本文需要用到的硬件工具有:青联创客NUC977开发板、MicroUSB一条 需要用到的软件工具有:NuVCOM、NuWriter、以及青联创客提供的LinuxBSP包、ARM交叉编译器、Ubuntu1804系统环境。完成目标: 完成Uboot的编译、Linux内核的编译、使用Busybox制作文件系统、文件系统的打包、烧录Uboot、Kernel、文件系统。一、UB原创 2022-05-05 14:47:32 · 2912 阅读 · 4 评论 -
【嵌入式】虚拟机未能将管道连接到虚拟机: 系统找不到指定的文件
这两天虚拟机莫名奇妙的爆出这个错误,在升级win11过后解决嘞这个问题,但是win11确实不好用最后退回win10这个问题又出现了,这里记录一下我的解决办法;设置为管理员运行程序然后遇到新的报错了进入控制面板选择C++2015修复环境到这里我的虚拟机就启动啦......原创 2022-04-29 14:35:01 · 7262 阅读 · 23 评论 -
【RTThread】修改Finsh打印串口波特率
这里需要注意得是一定要在hw_board_init初始化完成之后修改串口波特率。/* 串口设备句柄 */ static rt_device_t uart_device = RT_NULL; /* 查找系统中的串口设备 */ uart_device = rt_device_find("uart1"); // 这里 /* 串口配置结构体,使用serial.h的宏定义 */ struct serial_configure finsh_serial_config = R..原创 2022-04-24 13:33:20 · 1153 阅读 · 0 评论