- 博客(43)
- 收藏
- 关注
原创 调试工具之GDB的基本使用
(2)然后我们用 gdb 来打开这个目标文件,其实就是让带有调试信息的二进制文件在我们 gdb 的这个 “盒子” 里面进行运行。(5)这里假设我们程序异常退出了,但我们不清楚导致退出的错误是发生在 measure 测温函数内还是函数之前,我们就可以在进入这个函数之前,设置一个断点,然后运行它。运行到某一个断点后,要直接运行到下一个断点,使用continue 或者 c 就可以了。我们可以看到,程序成功运行到了这个函数前,没有抛出异常,那么我们就可以确定,异常是在 measure 测温函数内的了。
2024-08-04 20:05:20 468
原创 初步入门C ++之继承的概念
从执行结果来看,我们可以看到,因为 rect_body 类是继承 rect 类得来的,所以我们创建一个 rect_body 类的时候,会先建立 rect 类,然后往上面加入 rect_body 类的数据和方法,这,就是继承。
2024-07-30 18:56:58 283
原创 初步入门C ++之类的概念
编译器首先会检查语法规则,然后将 C 语言翻译为等效的,优化后的汇编语言,我们语言的可移植性也从这里体现,对于不同的平台,我们只需要选择不同的编译器即可,这样,同一个 C++ 语言源代码,就能生成在不同平台上的汇编语言文件。链接会将动态库或者静态库与本文件进行链接,我们在 #include 的时候,头文件中只有函数的声明信息,那么函数体在哪里找呢,没错,就是在动态库和静态库里,而将这些库,声明联合到一起的过程,便称之为链接,链接是通过函数的签名来找到对应的函数体的,同时。类的概念。
2024-07-29 22:28:43 916
原创 FreeRTOS的内存管理
在之前的学习中,我们经常看到静态分配方式和动态分配方式。我们画一下内存图来理解他们的不同。其中,bss区域也叫做ZI-data(bss)区。 首先我们复习一下C语言的内存图。
2024-07-28 16:05:00 595
原创 一文带你读懂TCP
TCP 是一种面向连接的,可靠的,基于字节流传输层通信协议,TCP 能确保接收端接收的网络包。 由于 TCP 是面向连接,能保证数据是一定被交付的,因此常用于:FTP 文件传输HTTP / HTTPS连接。
2024-07-28 15:59:21 1066
原创 stm32之ADC采样
ADC采样是模拟量转化为数字量,DAC转换是数字量转化为模拟量。使能ADC采样时,其有单信号采样(Single-ended)和差分信号采样(Differential),要根据原理图上的信号线数量来具体决定。ADC有很多通道1,有的通道支持差分信号采样,有的通道并不支持。ps:number of conversion:一定要根据ADC采样的个数来调整,他会决定我们分配几个RANK来存储数据。一般的ADC采样器是12位的,会把电压分成4096份,常见的数据对齐方式有左对齐和右对齐两种方法。
2024-07-27 16:28:42 2661
原创 git push问题:remote: [session-2c43b6b8] Access denied解决
问题描述:出现这种问题可能是以下几个原因导致的,我们逐个解决,不过如果在刚刚创建一个仓库的时候出现了这种问题,那么及其有可能是Git缓存的凭据过期或损坏导致的。如果你是在新建仓库时出现这个问题,及其有可能是Git缓存的凭据过期或损坏造成的。一般来说都是问题1和问题5造成的。
2024-07-17 14:42:59 792
原创 stm32定时器与pwm波
定时器除了定时以外,还能够产生PWM波。首先我们先来介绍一下PWM波。即脉冲宽度调制pwm波可以简单理解为可以调试占空比的方波。占空比(即脉宽时间占整个周期的比例),整个周期就是一个脉冲信号的时间,而脉宽时间就是高电平的时间。PWM波可以用来模拟不同的输出电压。其原理就是通过不同的占空比比例实现D/A转化。ARR:自动装载值。CRR:决定了占空比,PWM波从CRR处电平反转。
2024-07-05 11:17:34 1289
原创 stm32中断
轮询:即每过一段时间查看一次事件(一直探测),但是仍然可能错过,若事件发生时,轮询未能轮到该事件的函数,那么就错过了。同时效率低下。中断(NVIC):即cpu探测到发生某事后执行某个动作,相比于轮询,他不会一直占用CPU资源,并且避免了像轮询那样错过的情况发生。中断发生后执行什么动作由中断向量表来决定。
2024-07-05 11:12:50 546
原创 FreeRTOS的任务间通信
FreeRTOS,队列,事件组,互斥量,信号量,优先级翻转,优先级继承(priority inheritance)
2024-07-04 11:12:55 1942
原创 FreeRTOS的任务操作
任务的创建不代表任务的执行,任务创建后还需要使用调度器来让任务执行。即vTaskStartScheduler();同时创建任务函数,不等于任务处理函数。他只是创建了任务,但是没有规定任务要做什么。ps:任务控制块地址和任务句柄并不相同,我们操控任务是通过任务句柄操作的,任务句柄最终指向任务控制块。。这也就是为什么我们说,任务这个概念更类似与线程,而不是进程的原因。
2024-07-02 09:01:57 887
原创 FreeRTOS的任务理论
简单来说,任务是指可独立运行的基本执行单元。任务是并发执行的最小单位,每个任务都有自己的代码逻辑和资源。FreeRTOS多任务执行其实是多任务交替执行实现的。实现多任务交替执行的基础是tick中断,滴答中断,周期性的定时器中断。类比Linux,我们可以类比的认为一个任务相当于一个线程,同时,任务也有不同的种类和实现方式,比如说定时器任务等等。 在FreeRTOS中,任务具有不同的优先级,不过FreeRTOS中,优先级是与大多数操作系统相反的,,**反之越大,优先级越高。
2024-07-02 08:54:20 1239
原创 GPIO和PIN
单片机有很多的引脚,为了操控每一个引脚,我们对引脚进行分组,例如GPIOA,GPIOB,…,GPIOG等等(Group),这一个组就称为一个GPIO端口,一般一个端口包含十六个PIN引脚[0~15]。(一个引脚占2bits,而stm32是32位的,所以一组是16个)。GPIO引脚具有可复用和重映射的特点。
2024-06-29 16:19:33 1558
原创 STM32笔记之NORFLASH,NANDFLASH,EEPROM大体认识
首先我们了解一下内存的分类(从上到下越来越远离cpu,同时单位造价越来越便宜)一般EEPROM,FLASH都用来做单片机的“硬盘”。首先我们来看看EEPROM和FLASH的区别。总的来说,EEPROM和FLASH各有优缺点,选择哪种存储器取决于具体应用的需求。
2024-05-16 16:16:09 834
原创 STM32笔记之stm32命名规则,RCC时钟树,boot启动模式
内部晶振:内部晶振存在于单片机cpu内部,用来在板子刚上电的时候完成初始化工作(例如初始化外部时钟),但是会有温度引起的零漂问题,所以一般在初始化后使用外部晶振。南桥与北桥:各个时钟总线的速率不一样,那么工作起来肯定就会不同步,为了解决这个问题,有的板子上会有南桥,北桥的芯片。stm32单片机启动时,通过控制boot0和boot1两个引脚的电平,有三种常见的启动方式。CubeMx时钟树:相当于人的心跳,为各个部件提供不同的“节奏”。向单片机中烧录的是.elf文件或.bin文件。
2024-05-16 16:11:58 493
原创 简单介绍IIC通信协议
IIC I2C i2c Bus是飞利浦公司推出的,在电子控制领域的通信协议典型的电压准位是3.3v和5v。**IIC 是串行,同步的半双工协议。**IIC的电路简单,连接线少,控制简单,通信速率高。
2024-05-06 20:24:07 1376
原创 串口协议(例如usart,iic,spi)基础概念汇总
同步,异步 同步通信: 异步通信: 串行,并行 串行: 并行: 全双工,半双工,单工 单工: 半双工: 全双工: 电平信号,差分信号 电平信号(TTL): 差分信号: LSB,MSB LSB: MSB:同步,异步
2024-04-30 21:54:13 482
原创 JSON语法,简单介绍。
JSON( JavaScript Object Notation,JavaScript对象标记法)是一种轻量级,基于文本,可读的数据交换格式。它是一种字符流的数据交换格式协议。
2024-04-27 11:42:44 302 1
原创 十大经典排序算法之插入排序。
插入排序(Insertion Sort)是一种简单直观的排序算法,它的基本思想是逐步构建最终的排序列表,每次将一个未排序的元素插入到已排序的部分的适当位置。
2024-04-25 23:01:12 299 2
原创 十大经典排序算法之希尔排序。
希尔排序(Shell Sort)是一种改进的插入排序算法,它的基本思想是通过将待排序列表分割成若干个子列表,对每个子列表进行插入排序,然后逐步缩小子列表的间隔,直到间隔为1,最终完成整个列表的排序。接下来我们给出示例代码。
2024-04-25 22:58:49 302 3
原创 十大经典排序算法之选择排序。
选择排序(Selection Sort)是一种简单直观的排序算法,它的基本思想是通过重复从未排序的部分选择最小(或最大)的元素,并将其放到已排序部分的末尾,直到整个列表都排序完成,也就是说,他先把数组先分成了两个部分,一个是有序的,一个是无序的,如果我们是从小到大排序,那么每次都从未排序的部分中找到最小的,然后放到有序的部分中。接下里我们给出一段选择排序的示例c代码。
2024-04-24 22:08:13 324
原创 十大经典排序算法之冒泡排序
冒泡排序(Bubble Sort)是一种简单直观的排序算法,它遍历要排序的列表,一次比较两个相邻的元素,并且如果它们的顺序错误就交换它们(比如从小到大排序时,若4,3。会交换为3,4),直到没有需要交换的元素为止。冒泡排序的名称由于在排序过程中较小或较大的元素会逐渐“浮”到数组的顶端,类似于气泡上浮的过程,所以称为冒泡排序。接下来我们给出冒泡排序的示例c代码。
2024-04-24 22:03:55 776
原创 同步,异步,阻塞,非阻塞
非阻塞与阻塞相对应,他不会等待我们,还是某个程序,需要我们去取某一段数据时,若程序是非阻塞的,程序只会询问我们现在处于什么状态了,从内核取没取完数据。需要注意的是,异步和非阻塞是不一样的,例如当我们数据取回来可以使用的时候,异步会给我们发通知,而非阻塞不会,一旦错过了,就是真的错过了。而同步事件我们可以简单的理解为,知道什么时候会发生的事情,例如你的朋友和你约好今天下午五点来找你,我们就明确的知道,五点你的朋友会来找你,类似这样的事件在程序中也叫做同步事件。阻塞很浪漫,即:你不返回,我就一直等你。
2024-04-21 23:54:01 312 1
原创 Linux :vim ,gcc ,makefile 三件套之vim的基本使用
vim 是 Linux 系统上的最著名的文本/代码编辑器,也是早年的 Vi 编辑器的加强版,而 gVim 则是其 Windows 版。它的最大特色是完全使用键盘命令进行编辑,脱离了鼠标操作虽然使得入门变得困难,但上手之后键盘流的各种巧妙组合操作却能带来极为大幅的效率提升。尽管 Vim 已经是古董级的软件,但由于 Vim 的可配置性非常强,各种插件、语法高亮配色方案等多不胜数。
2024-04-21 11:20:10 974 1
原创 valgrind,memcheck的使用
valgrind是一个开源的,检测内存泄漏的工具,通常在linux下使用,除此之外,他还能检测内存管理错误,线程bug等错误。粗浅的来讲,valgrind由两部分构成,一部分用来模拟cpu和内核,被称为framework(框架),一部分是他用来检测各种错误信息的插件工具。memcheck:是valgrind最重要的工具之一,是一个重量级的内存检查器,它可以帮我们检测是否有使用未初始化的内存,以及内存泄漏,访问越界之类的问题。callgrind:可以用来统计函数的互相调用情况。memcheck使用。
2024-04-21 11:06:40 1287 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人