- 博客(57)
- 收藏
- 关注
原创 从bootloader跳到APP需要几步?
需要注意的是在编译前,我们得对编译器做些配置,将 bootloader 的起始地址配置为 0x08000000,将 app 的起始地址配置为0x08000800。同时,执行完 bootloader 程序后,我们开始执行app程序,在app程序里我们得先设置中断向量表偏移,接着单步执行,可以看到可以正常执行。对于 bootloader 程序,我们首先设置了 pc 指针为0x08000804,然后设置了栈顶指针,最后执行 pc 指针指向的地址。
2025-03-18 18:48:53
626
原创 FreeRTOS内存管理
为了让FreeRTOS更容易使用内核对象:task、queue、semaphores和event group等,对其一般都是动态分配:用到时分配,不使用时释放。使用内存的动态管理功能,简化了程序设计:不再需要小心翼翼地提前规划各类对象,简化API函数的涉及,甚至可以减少内存的使用。内存的动态管理是C程序的知识范畴,并不属于FreeRTOS的知识范畴,但是它跟FreeRTOS关系是如此紧密,所以我们先讲解它。
2025-03-18 09:07:27
1037
原创 FreeRTOS源码概述
使用 STM32CubeMX 创建的 FreeRTOS 工程中,FreeRTOS 相关的源码如下:主要涉及2个目录:FreeRTOS的最核心文件只有2个:将其他的文件以及作用也一并列出如下: 移植FreeRTOS时涉及的文件放在FreeRTOS/Source/portable/[compiler]/[architecture]目录下,比如:RVDS/ARM_CM3,这表示cortexM3架构在RVDS或Keil工具上的移植文件。 里面有2个文件:FreeRTOS需要3个头文件目录:FreeRTOS
2025-03-16 22:47:48
1094
原创 STM32 Bootloader理解
若是我们设置 MDK 的 flash 地址为 0x08001000 时,那么我们的中断向量表也会设置到 0x08001000 ,复位中断程序地址在 0x08001004 中保存;因此从 bootloader 退出时执行启动文件,PC = 0x08000004,会执行中断向量表中的复位中断程序,由复位中断程序跳转到我们的 main 函数中,从而进入到 c 的世界。当我们设置好 MDK 中的程序存储的位置后,程序就是从该路径开始保存,同时中断向量表的位置也是从该位置进行保存。
2025-03-10 15:29:30
541
原创 STM32中断向量表的个人理解
在研究 stm32 的启动文件中,有一个部分是设置中断向量表,那么中断向量表是写在什么地方呢?通常写在flash的起始位置,向量表的排列顺序和内容遵循ARM Cortex-M内核的规定。
2025-03-07 21:20:31
1071
原创 freertos入门---栈的概念
栈也是一块内存空间,CPU的SP寄存器指向它,它可以用于函数调用、局部变量、多任务系统里保存现场。栈对于多任务系统非常的重要,每个任务都有自己的栈,我们只有深入理解栈的作用,才能深入理解多任务系统。
2025-03-05 19:56:27
807
1
原创 freertos入门---堆的概念
一般的堆管理都是这样的,它并不是简单的分配100字节的内存,它还会分配一个头部。我们定义的malloc函数比较简单,它做的就是在一个 buf 中分配一个小块的内存,它的下标是从0到1023,一开始pos = 0,我们想来分配size大小的空间,malloc函数首先将 old_pos 的地址返回,然后 pos 等于原来的位置加上 size。堆是一块空闲的内存,我们可以定义一个数组char heap_buf[1024],可以看到该数组就是一个空闲的内存,我们只需要在它上面实现内存的分配和释放那么它就一个堆。
2024-12-20 20:27:05
617
原创 freertos入门---ARM架构简明教程
我们在组装电脑时会得到一个主板,然后我们去买CPU,将CPU插入主板,然后去买内存条,将内存条也插入主板,接着我们还需要将硬盘通过接线也连接上电脑。如下图所示:对于我们主板,我们CPU、内存条、硬盘它们是离散的,它们需要通过主板组装在一起。对于我们单片机,它被称为SOC(System on Chip),它是指在一个芯片上具有一个完整的或者相对完整的系统,比如说一款ARM芯片,在这一款芯片上它包含CPU、内存、Flash。Flash负责保存我们的程序,CPU负责运行程序、程序运行过程中我们还需要用到内存。
2024-05-19 16:53:42
862
原创 freertos入门---创建FreeRTOS工程
双击运行STM32CubeMX,在首页选择“ACCESS TO MCU SELECTOR”,如下图所示: 在MCU选型界面,输入自己想要开发的芯片型号,如:STM32F103C8T6: 在“System Core”的“RCC”处选择外部高速时钟源和低速时钟源,这里我们选择外部高速时钟源,如下图所示: 此外,本实验使用FreeRTOS,FreeRTOS的时基使用的是Systick,而STM32CubeMX中默认的hal库时基也是Systick,为了避免可能的冲突,最好将HAL库的时基换为其
2024-05-02 09:59:41
1226
原创 Linux应用开发---网络通信
套接字(socket)是Linux下的一种进程间通信机制(socket IPC),使用 socket IPC 可以使得在不同主机上的应用程序之间进行通信(网络通信),也可以是同一台主机上的不同应用程序。socket IPC 通常使用客户端-服务器这种模式完成通信,多个客户端可以同时连接到服务器中,与服务器完成数据交互。内核向应用层提供了 socket 接口,我们只需要调用 socket 接口开发我们的应用程序即可。
2024-02-05 15:45:40
1514
原创 Qt---资源文件添加
Qt 资源系统是一个跨平台的资源机制,用于将程序运行时所需要的资源以二进制的形式存储于可执行文件内部。如果编写的程序需要加载特定的资源,那么将其放置在资源文件中,便不需要担心文件的缺失。
2024-02-04 17:51:11
662
原创 VScode远程开发
在一文中,我么介绍了如何使用ssh远程连接Jetson nano端,但是也存在诸多不便,比如:编辑文件内容时,需要使用vi编辑器,且在一个终端内,无法同时编辑多个文件。本节将介绍一较为实用的功能——VSCode远程开发,我们可以在VScode中以图形化的方式在Jetson nano上远程开发程序,比ssh的使用更方便快捷,可以大大提高程序开发效率。
2024-01-18 21:47:43
1060
原创 ROS---传感器集成
对于ROS机器人,如果想让其启动,我们需要逐一启动底盘控制与激光雷达,操作有点冗余。并且如果只是简单启动这些节点,那么在在 rviz 中显示时,会发现出现了TF转换异常,比如参考坐标系设置为odom时,雷达信息显示失败。
2024-01-18 16:05:39
685
原创 Linux网络编程---socket编程接口接口函数
客户端通过 connect()函数请求与服务器建立连接,对于 TCP 连接来说,调用该函数将发生 TCP 连接的握手过程,并最终建立一个 TCP 连接,而对于 UDP 协议来说,调用这个函数只是在 sockfd 中记录服务器 IP 地址与端口号,而不发送任何数据。当有客户端连接请求到达时,accept函数会与远程客户端建立连接,并且返回一个新的套接字,这个新的套接字与socket函数返回的套接字不同,我们后续与客户端进行数据交互是通过这个套接字。函数执行成功返回新的套接字,失败返回-1。
2024-01-16 21:04:15
1140
原创 Linux网络编程---IP 地址格式转换函数
我们更容易阅读的IP地址是以点分十进制表示的,例如:192.168.5.10 ,这是一种字符串的形式,但是计算器所需要的IP地址是以二进制进行表示,这便需要我们在点分十进制字符串和二进制地址之间进行转换。点分十进制字符串和二进制地址之间的转换函数主要有:inet_aton、inet_addr、inet_ntoa、inet_ntop、inet_pton 这五个,在使用它们时需要包含头文件<sys/socket.h>、<arpa/inet.h>以及<netinet/in.h>。
2024-01-15 19:46:57
1583
原创 惯性导航---里程计非完整性约束
在进行管道中心线定位时,惯性导航系统在初始化后通过不断地力学编排更新载体的姿态、速度和位置信息,但是由于传感器是惯性器件,其导航误差会不断累积,这便需要借助外界观测量辅助惯性导航系统,才可以进行精确的定位。外界辅助分为姿态辅助观测、速度辅助观测和位置辅助观测。通常位置辅助观测可由全球卫星定位系统获取,速度辅助观测可以由里程计或多普勒测速仪获取。本文将介绍里程计观测信息结合非完整性约束辅助的组合导航。
2024-01-13 21:24:49
1477
原创 ROS---激光雷达的使用
激光雷达是现今机器人尤其是无人车领域及最重要、最关键也是最常见的传感器之一,是机器人感知外界的一种重要手段。本文将介绍在ROS下使用激光雷达传感器,我们选用的激光雷达型号为思岚A1。
2024-01-11 22:08:05
1551
原创 使用ros_arduino_bridge控制机器人底盘
搭建了ROS分布式环境后,将ros_arduino_bridge功能包上传至Jetson nano,就可以在PC端通过键盘控制小车的运动了。
2024-01-10 20:37:09
1961
12
原创 C语言中常用的字符串函数(strlen、sizeof、sscanf、sprintf、strcpy)
sizeof是计算变量在内存的占空间的大小,单位是字节。在这里插入代码片sscanf函数是C语言中的一个标准库函数,用于从格式化的字符串中读取输入。其中,str表示要读取的字符串,format表示格式控制字符串,…表示可变参数列表。strcpy函数是将一个字符串复制到另一块空间地址中的函数,‘\0’是停止拷贝的终止条件,同时也会将 ‘\0’ 也复制到目标空间。char *dest------------目标字符串的首地址。
2024-01-08 19:56:27
2860
原创 SSH远程连接
在多处理器的分布式架构中,不同的ROS系统之间可能会频繁的涉及到例如:我们在PC端编写ROS程序,而最终需要在Jetson nano上运行,如何将相关目录以及文件从PC上传到Jetson nano?这便需要使用SSH工具。
2024-01-06 23:11:53
642
原创 Linux系统调用接口---使用write函数写文件
我们打开了一个文件,可以使用write函数往该文件中写入数据。当我们往该文件中写入N个字节数据,位置pos会从0变为N,当我们再次往该文件中写入M个字节数据,位置会变为N+M。
2023-12-13 21:39:48
1267
原创 卡尔曼滤波原理
卡尔曼滤波有连续型和离散型两种形式,连续型卡尔曼滤波器常用于卡尔曼滤波的理论性能分析,离散型卡尔曼滤波器可以在数字计算机上直接实现,本文将介绍数字型卡尔曼滤波器的使用。但是要将卡尔曼滤波用于实际模型中却又诸多考量:若系统模型与实际运动模型不匹配,或观测模型与实际观测输出不匹配时,都可能导致滤波发散,得到错误结果。因此在使用卡尔曼滤波时,应优化实际问题的数学模型、合理地设置过程噪声、观测噪声,使状态空间模型尽可能准确才能获取精确的状态估计。的状态最优估计的方差协方差阵的预测值,P。为过程噪声(s×1),V。
2023-12-13 11:27:22
789
原创 Linux系统调用接口---使用open函数创建/截断文件
open函数不仅可以打开一个文件,还可以创建一个文件或者去截断一个文件。本文将介绍如何使用open函数去创建一个文件或者去截断一个文件。
2023-12-12 21:17:53
793
原创 惯性导航的初始对准和初始校准
捷联惯导系统在载体导航之前需要先进行初始对准,以确定载体初始的姿态、速度和位置信息。只有获取了载体的姿态、速度、位置的初始值,并以初始值为基础通过力学编排才能计算出未来各时刻的姿态、速度和位置信息。因此载体所有的定位信息都是在初始状态下不断力学编排得到的。惯导系统初始对准就是用来确定参考坐标系和导航坐标系的一个过程。常见的初始对准技术有静基座粗对准、静基座静对准和动基座对准等算法。由于静基座粗对准算法简单、容易实现,本文将介绍静基座粗对准的算法。
2023-12-09 10:16:33
4581
3
原创 Linux系统调用接口---使用open函数打开文件
在Linux下,每条命令可以通过man命令来获取使用手册。man命令的使用方法为:man + [要查询的命令]。查询man命令的使用手册可以在终端中输入以下指令man man我们想查找open函数的用法,open函数是系统调用,所以我们查找的时候可以把序号2加上。man 2 open从帮助文档中我们可以看出使用open函数需要包含以下头文件。在man中含有以下常用的按键和功能。
2023-12-02 10:46:19
1102
原创 使用FileZilla传文件
MobaXterm 既可以 ssh 登录又可以传输文件,不过 Mobaxterm 在传输文件时使用效率上没有 FileZilla 高,所以我们选择FileZilla在Windows 和 Ubuntu 之间互相传输文件。
2023-11-24 09:26:51
1363
原创 NFS、Vim下载以及环境配置
使用下面命令一键配置/初始化开发环境(其实就是安装 tftp,nfs,vim 等软件,此脚本只支持 Ubuntu-16.04 /Ubuntu-18.04)。
2023-11-23 15:39:54
304
原创 Qt----UI界面设计
在新建工程中,我们需要将Generate form勾选上。在项目中,我们发现添加了一个.ui文件,我们以后可以在这个文件里进行UI界面的设计。在.pro文件中,我们也可以看到添加了一些东西。
2023-11-18 10:34:06
4403
原创 MobeXterm的使用
MobeXterm的使用1 使用 MobaXterm 远程登录 Ubuntu使用ifconfig查看Ubuntu的IP运行 MobaXterm,建立 Session输入密码以上只需要配置一次,以后双击即可打开。2 使用 MobaXterm 串口连接开发板连接串口线和电源线将串口线与电脑、板子连接,开发板插上电源。电源开关可以先不用打开。查看 USB 串口模块驱动在设备管理器中查看是否有新添的串口设备,如果没有考虑是否安装好驱动。使用 MobaXterm 软件打开串口
2023-11-17 17:09:36
3378
原创 虚拟机VMware配置双网卡
NAT(Network Address Translation),指网络地址转换。使用NAT时,Ubuntu操作系统通过委托Windows的网络连接来访问外部网络。当Ubuntu发送数据包时,这些数据包首先会被Windows接收,然后由Windows转发到外部网络。外部网络只能看到Windows,而无法直接感知到Ubuntu的存在。如果Window可以正常上网,Ubuntu一定可以正常上网。
2023-11-14 20:46:29
8580
原创 Git的使用
在window下,git安装包的地址为。下载好安装包后,按照默认安装即可(建议安装目录设为D盘),安装完成后,在开始菜单里找到“Git”->“Git Bash”,双击蹦出一个类似命令行窗口的东西。Git Bash 中命令的用法跟 Linux 完全一样,比如也可以执行 cd、ls 等命令。
2023-11-12 22:26:19
90
2
原创 Qt----QMainWindow_状态栏、铆接部件、核心部件
新建状态栏并将其设置到窗口中我们发现状态栏并没有显示,因为我们还没有添加标签控件,我们可以放置标签控件。我们也可以在状态栏的右侧放置标签。
2023-10-28 11:18:31
166
原创 Qt----QMainWindow_菜单栏和工具栏
QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器,图片编辑器等。
2023-10-26 15:53:37
308
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人