- 博客(32)
- 收藏
- 关注

原创 Linux系统进程的个人理解和解释
重点介绍对进程的个人理解,分别从概念、作用、组成、原理、实现、通信进行介绍。Linux操作系统针对进程的一些理解,进程调度、时间片、优先级等。简单通信方式,有名管道、无名管道、共享内存等个人理解
2024-04-25 17:24:38
1105

原创 平衡步兵底盘PID参数调试记录
平衡底盘重点可以分两大部分,一部分属于底层控制及获取数据正确,另一部分就是PID算法控制及参数调节,后部分属于非常耗时间且折磨的。根据内容其实也能看出来是RoboMaster的平衡步兵,希望写的文章内容能对其他人(RMer)有帮助。
2024-02-14 17:26:47
3143
8

原创 基于CUBEMX的HAL库can通信实操代码(非理论)
接收这里有两种不同方式的编写方式,第一种是先存放数据信息,再区分ID存放到相应结构体中去;第二种是先根据ID区分,再存放数据到结构体中。两种方式都可以,我个人更倾向于使用第二种方式获取数据,更符合逻辑些。以上就是can的全部代码,有问题可以评论或者私聊我,找到错误也可以说出来我改正。
2023-12-21 12:14:16
3162
3

原创 能量机关 STM32HAL库开发大疆A板WS2812B彩灯(PWM+DMA)
本文主要目的是为了制作RoboMaster比赛能量机关的灯条控制,模拟比赛场中大符,搭建出类似场地道具,以供视觉测试使用的是RoboMaster开发板A型,芯片为STM32F427IIH6,使用的灯条为WS2812B。采用PWM+DMA控制,使用CUBEMX配置底层,keil5编辑烧录代码实现:一共五片扇叶,每片扇叶均实现流水灯+常亮颜色参考文章在后面会标记出来
2023-12-19 00:52:11
3600
3
原创 STM32 【A3967 步进电机驱动 二相步进电机】
A3967 步进电机驱动 简介及接线方式,这里主要讲单片机控制应该如何接线:简单接步进电机以及给板子供电的接线。控制是使用GPIO控制驱动板接口STM32F103C8T6的任意GPIO功能MS1PA0MS1和MS2:用于选择步进细分模式。连接到STM32的GPIO引脚。MS1和MS2需要配置为低电平(默认细分为8步)。MS2PA1DIR(方向控制)PA2控制电机的旋转方向STEP(步进脉冲输入)PA3控制步进电机的脉冲输入,决定步进电机的旋转。ENABLE(使能)PA4。
2025-01-23 16:11:59
520
1
原创 (STM32)ADC驱动配置
ADC模块中,**常规模式(Regular Mode)和注入模式(Injected Mode)**是两种不同的ADC工作模式常规模式:用于普通的ADC转换,是默认的ADC工作模式。注入模式:用于对特定通道进行高优先级的ADC采样。特性常规模式(Regular Mode)注入模式(Injected Mode)优先级低高采样通道支持多通道,按顺序扫描支持多通道,但专用优先处理DMA的兼容性支持,适合连续采样传输通常不使用 DMA场景采集温度、湿度等非关键的环境传感器数据。
2024-11-23 10:07:09
2176
原创 6ull驱动记录--字符设备驱动开发基本框架
Linux 驱动有两种运行方式:第一种是将驱动编译进 Linux 内核中,这样当 Linux 内核启动的时候就会自动运行驱动程序。第二种是将驱动编译成模块(Linux 下模块扩展名为.ko),在Linux 内核启动以后使用“insmod”命令加载驱动模块。(常用)模块有加载和卸载两种操作,我们在编写驱动的时候需要注册这两种操作函数,模块的加载和卸载注册函数如下//注册模块加载函数//注册模块卸载函数主设备号,Linux 下每个设备都有一个设备号,设备号分为主设备号和次设备号两部分。name。
2024-08-30 10:59:54
950
原创 Linux内存的概念及管理
内存是指计算机中所安装的随机存取内存的容量,储存是指计算机内硬盘的容量。硬盘应当是计算机的“外存”。内存应当是在主板上的一些存储器,用来保存CPU运算使用过程中的中间数据和计算结果,当不用这些数据时,它们被保存在硬盘上。
2024-07-22 17:12:53
710
原创 汽车底盘控制系统Autosar初步接触
最近接触到汽车底盘控制部分,作为小白,原以为汽车底盘也是要自己手敲代码,结果发现完全不是。记录一下最近的学习心得,初步接触东西不全,但可以当作参考。对于底盘控制部分的简单理解:simulink做汽车底盘的仿真,类比于RoboMaster中平衡车的控制算法,将各类传感器参数、Heave、Pitch、Roll、加速度等等进行计算,放在simulink中就是将这部分模块化,仿真无误后可以自动生成代码。
2024-07-17 16:45:28
1044
原创 6ull--系统移植(U-Boot、内核kernel、根文件系统rootfs)
要先移植一个 bootloader 代码,这个 bootloader 代码用于启动 Linux 内核,bootloader 有很多,常用的就是 U-Boot。移植好 U-Boot 以后再移植 Linux 内核,移植完 Linux 内核以后Linux 还不能正常启动。还需要再移植一个根文件系统(rootfs),根文件系统里面包含了一些最常用的命令和文件。
2024-06-06 23:08:50
1325
原创 Linux配置双网卡,1NAT 2桥接,ARM板上网
版本型号:ubuntu18.04 ARM板型号:6ull本文主要记录配置第一次ubuntu与arm板连接的nfs配置和ARM板上网的配置,按照配置网络、配置nfs系统、给板子连网 顺序进行。该配置的前提是创建ubuntu系统的网络配置选择的是NAT模式,NAT模式下创建的ubuntu直接就可以上网。开发需要连接网线到6ull板子上进行nfs挂载,新建的桥接模式。
2024-04-29 19:47:47
1342
原创 Linux:UART串口程序(亲测好用!)
本篇代码是配置串口的一些基本配置:波特率、校验位、数据位等。前提是内核中有对应的设备节点,可以在各自的开发板开发手册中找到串口所对应的设备节点。也是找了很多篇博主的文章参照,不过一开始配置的时候有问题打不开,最终还是一个一个配出来了。
2024-04-26 18:48:48
801
2
原创 Makefile版本安装问题:make每次全量编译、glob/glob.c: : undefined reference问题
编译Linux内核时,使用make导致每次均全量编译的问题,每次编译耗费大量时间。各种搜索之后发现是Makefile版本和Ubuntu版本的问题(猜测)安装makefile 版本glob/glob.c: : undefined reference问题/usr/bin/mkdir: 无法创建目录 "/usr/local/share/man/man1": 文件已存在
2024-04-11 17:17:42
877
原创 Linux内核
上面说到区别,那么Linux为什么可以跑多个进程、并且可以对文件、内存等进行管理?由此提到Linux内核,Linux内核对于操作系统而言属于发动机。内核(kernel)是操作系统最基本、最核心的部分。内核其本质上是一个复杂的程序,主要用于以下几点:文件管理进程管理内存管理网络管理设备管理内核对于用户是不可见的,所以在层面上分为了内核态和用户态。内核态与用户态的几条公理:用户态不能直接操作硬件只有内核态才能对硬件进行操作管理。
2024-04-09 22:53:19
922
原创 裸机开发之汇编、寄存器
简单了解完寄存器之后,那么可以解决第一个问题:为什么使用汇编?汇编语言的大部分语句直接对应着机器指令,执行速度快,效率高,代码体积小在系统程序的核心部分,以及与系统硬件频繁打交道的部分,可以使用汇编语言。比如操作系统的核心程序段。缺点:不同的处理器有不同的汇编语言语法和编译器,编译的程序无法在不同的处理器上执行,缺乏可移植性难懂且工作量大。
2024-04-09 21:30:38
1076
原创 Linux+ARM 简单环境检测---软件部分
本文主要记录并分享软件部分,用于模拟将数据上传到互联网上以供使用,内容包含数据上传、数据库存储、屏幕显示三部分使用软件:VMware+Ubuntu22.04ARM版芯片:S3C2440(友善之臂mini2440)上传采用MQTT协议上传到OneNet云,数据库使用sqlite3,屏幕显示采用FrameBuffer 帧缓存技术实现效果:数据可以在云上、屏幕上、数据库中查看学习文章会在本文中标记出来软件部分内容一共分为三部分:数据上传部分:将获得的数据上传到OneNet云上。
2024-03-30 16:36:50
879
1
原创 MQTT.fx和MQTTX 链接ONENET物联网提示账户或者密码错误
在输入password和username后还是提示错误,在Host这里使用他给的默认,不要改成ONENET文档给的地址。MQTT.fx和MQTTX 都是这样。
2024-03-26 16:04:41
2209
2
原创 数据结构-----队列:循环队列与链式队列
队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已我们把它简称为链队列。循环队列定义:队列的头尾相接的顺序存储结构
2024-03-22 21:04:52
1108
1
原创 数据结构-----顺序栈和链栈的区别
顺序栈使用数组实现,链栈使用链表实现。空间复杂度:顺序栈和链栈的均为 O(n),其中 n 分别是栈的最大容量和元素个数。时间复杂度:O(1),即常数时间。链栈具有更高的灵活性,可以动态地调整大小,而顺序栈大小固定。顺序栈的访问速度更快,因为数据连续存储,可以通过下标直接访问,而链栈需要通过指针跳转。
2024-03-21 21:00:31
991
1
原创 数据结构-----栈、顺序栈、链栈
栈是限定仅在表尾进行插入和删除操作的线性表。特点:数据是先进后出、后进先出栈的。顺序存储其实也是线性表顺序存储的简化,简称为顺序栈。栈的链式存储结构,与顺序栈不同的是链栈是由一个个节点拼接而成,并非连续的数组。
2024-03-21 18:00:02
1361
1
原创 结构体类型的内存大小问题
在占用内存空间时,结构体中的成员类型不一样,因此电脑为了方便更容易获取数据,都会把成员放在地址可以被其基本类型大小整除的,比如int a,假设地址0x2003是空地址,但为了方便读取数据,会把int a放在0x2004上,0x2003空出来,这样以此类推存放后面的结构体成员。运行一下上面的代码:结构体的大小是24字节,依次打印abcd的地址,可以看到b的地址与c的地址之间相差4字节,说明b存放了1字节,剩下的3字节处于空状态,那么根据第三要素可以知道,d存放的时候占用8字节,只不过其中7各都处于空状态。
2024-02-25 09:53:59
367
1
原创 C语言(二)数据类型、数据存放流程
定义的变量会在RAM内存空间中给出一部分空间用来存放数据,如果变量大小写名不一样,代表着两个不同的内存空间,变量之所以可以改变数值是因为有内存空间。
2024-02-18 16:14:31
814
1
原创 linux命令:基础指令与vi编译
vi是一个终端文本编辑器,它在字符界面下运行,没有图形用户界面(GUI)。用户与vi交互通过键盘命令。因此脱离了鼠标,全程由键盘操作。vi属于轻量级的文本编译器,通过一些插件和配置,可以扩展其功能。同时vi跨平台的,几乎在所有的Linux系统上都可以找到后续的所有代码都将使用vi指令进行编写,不再像以前windows下使用一些编译软件比如keil等进行编译,嵌入式linux也是在此基础之上进行学习,代码大同小异,可以将之前的代码尝试使用vi编译在linux中实现。
2024-02-08 20:51:46
522
原创 基于CUBEMX的HAL库串口通信实操代码
在DMA传输过程中,如果启用了地址自增,那么在每次数据传输完成后,DMA将自动递增源地址和/或目标地址,以使下一次传输能够操作新的数据。数据直接从一个外设传输到另一个外设,而不涉及中间的内存。数据发送中断:当串口发送缓冲区为空时,表示可以发送新的数据,触发数据发送中断,处理器中断当前执行的任务,执行数据发送的中断服务程序,将需要发送的数据放入发送缓冲区。数据接收中断:当串口接收缓冲区中有新的数据可用时,会触发数据接收中断,处理器会中断当前执行的任务,转而执行数据接收的中断服务程序,以处理接收到的数据。
2024-01-26 20:33:11
1117
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人