- 博客(39)
- 收藏
- 关注
原创 关于总线冲突退避实验
单总线退避无非就是检测外设电平,当存在主机使用单总线的时候进行随机退避,等待随机时间再次进行检测,知道总线空闲,再与外设进行通信。其他通信方式也大差不差都是按照相似逻辑,总线被使用,则随退避随机时间再进行通信,与进程锁类似,当进行被锁住时要么想自旋锁那般等待,要么随机退避先去执行其他逻辑后再次检测进程锁。总的来说就是检测是否存在通信然后进行退避,我这只是最简单的退避算法。用户可以通过不同的检测方式进行修改。这里只是作为演示的基本思路。
2025-04-02 15:24:20
125
原创 UART 变单总线
今天不做代码记录分享,今天来做一篇英文翻译:Using a UART to Implement a 1-Wire Bus Master。up主也是第一次听到用串口改造成单总线与设备通信,那位就有人会问了,为啥好好的模拟方式不用还要折腾UART呢,这样操作既浪费接口,还得增加硬件成本。但我想说的是,既然改造那肯定是纯在比单纯的模拟存在更大的优势。
2025-03-28 11:21:11
676
原创 stm32主从机硬件IIC实现
IIC作为一个基础的通信协议,活跃于各种设备之间。I2C作为两线通信协议,相较于spi来说所需引脚更少,我们可以使用硬件I2C在设备与设备之间通信,但在硬件I2c被其他功能所占据引脚时,也可以使用软件拉高拉低来模拟,32位单片机中我们常用的方式是软件模拟,但实际上软件模拟的I2C速度有时又达不到我们需求,软件的有点在于可以灵活使用各个引脚,硬件的优点在于能够更快的相应。
2025-03-05 15:37:35
876
2
原创 关于APM32F411的IAP升级操作的记录
烧入方式ISP,ICP,就不做介绍了,本文主要分享一下IAP在线编程。用户通过编写bootloader放在flash区间,MCU上电后先执行用户的bootloader 代码,再通过跳转到APP地址运行APP程序。
2024-10-24 20:26:28
1112
原创 git 基本操作
SSH文件存放在C:/User/用户/.ssh下,id_rsa为私钥,id_rsa.pub为公钥。未作任何修改提交缓存区,未修改,修改后便可通过git status 查看。在git 远程服务器中找到setting 输入公钥。后续就是上传和下来代码了。至此仓库配置成功了。
2024-06-21 11:23:46
278
1
原创 完蛋了,Ubuntu 开机显示 initramfs 进不了
最后还得看重新找了好久才找到了fsck命令,fsck命令将主分区重新分配,才最后修好的。网上说叫我在root权限里操作啥啥啥一系列操作,可是我连root都进不去,后面全是逗我开心。还有的是说通过grub命令重新加载引导文件,这里我就不多说了,我也不会啊,麻了。其次是看上面提示出现。
2024-03-20 21:19:13
1485
3
原创 嵌入式八股文-----------------面向对象
面向对象,C++是一门半面向对象半面向过程的语言,一般来说面向过程的东西要比面向对象的东西难,个人是这样理解的。所以C++是真的比较难学,也是真的比较好,钱途一片光明。(闪闪亮亮的),对象都还没找到就要去面向对象,有点好笑,不管了,早晚要面对的,来吧,接下来开始面向对象。面向对象是种编程思想,把一切东西看成一个对象,这个对象拥有自己的属性,我们把对象拥有的属性变量和操作这些属性变量的函数打包成一个类来表示写的比价简答,毕竟只是大概的整合一下,里面的细节大家可以自己去找一下。
2023-11-20 20:41:22
445
原创 嵌入式八股文--------函数篇
这个前言好难讲啊,函数有什么说的,不知道啊,函数是什么,有什么类型的函数,我也不知道啊,这个前言算了不说了,咋们直接函数启动。还是说一下吧,这里的函数既包含C语言函数,也有C++函数相关部分,两者不分开。写的不好,到处找的,特别是第二部分,具体的内容只是那之前的,大概整理了一下,如果想要具体的话,可以观看往期内容,之前的比这里更加详细,这里只是简单的整理了一下。
2023-11-20 19:35:13
433
原创 嵌入式八股文----------数组和指针
相较于其他语言来说,为什么C语言才是做嵌入式不二选。就是因为C语言的指针,可以针对内存进行操作区别于其他语言。接下来我们将介绍C语言中指针于数组。大家常说,指针就是数组,数组就是指针,但是两者还是有区别的。指针数组的难点在于一、二维数组的初始化,数组名的加法和&数组名的加法,指针数组和数组指针和一、二维数组的关系。以上就是指针与数组的部分了,感觉都没事要记得,就整合了一下(如有侵权部分,联系up主删除)。下车吃饭。
2023-11-20 18:17:51
439
4
原创 Ubunut 如何扩展空间
7、但是每次关机重启后都需要重新挂载,解决这个问题可以直接设置永久挂载。7.3按照第一个默认的UUID编写自己配置的。保存即可实现永久挂载。5、执行格式化命令,使得可以允许任何文件写入硬盘。2、选择硬盘,选择推荐SCSI安装,一路默认。1.先关闭虚拟机打开虚拟机设置选择添加。7.2将UUID写入配置文件。以前都是扩展,现在修正一下。4.1先查看是否安装了分区。
2023-10-24 21:17:06
73
原创 Linux的平台总线
介绍之前的三问:什么是平台总线?为什么要使用平台总线?如何使用平台总线?1、总线:但凡有总线,就一定有信息的传输。USB总线 IIC总线 SPI总线等 用于设备间信息的传输,并且在设备间有物理连线的。属于物理总线。平台总线也是总线的一种,但它是Linux内核虚拟出来的,抽象出来的总线,实际上不存在样的总线。2、为什么要使用总线:首先说一下总线的优点:减少重复代码,提高程序的移植性,设备挂载在平台总线上,方便管理。
2023-10-19 22:19:49
305
原创 FreeRTOS移植
2、进入一下文件夹中freertos\FreeRTOSv9.0.0 \FreeRTOS\Source\portable中,4、将FreeRTOSv9.0.0\FreeRTOS\Source中的文件复制到所需要的工程下。2、在main函数之前需要申明 开始任务,定义任务堆栈大小,优先级 和 存放任务句柄的空间。1、先准备好工程文件,和FreeRTOS源码,源码可以在官网自行下载。12、解决上述错误,在keil中打开stm32f4xx_it.c。5、打开工程,添加.c的源文件和.h的头文件路径。
2023-10-09 12:32:18
255
原创 STM32F0103按键扫描
本次编写的是STM32F103系列,4*4矩阵按键,利用扫描方式获得按键值。编写完成检测是,发了疯一样,给孩子整怕了,还以为代码哪里跑偏了,仔细想一下不至于啊,就我这小技术,不至于发生这样的事,后面发现是烧入线坏了,接口不稳定,一直在重新接入导致串口一直在打印。后面换了根线就ok了。原理图:本次测试的原理图如下,用到的应交分别为引:P5,PB4,PB3,PD2,PC12,PC11,PC10,PA15。
2023-09-18 13:20:05
640
原创 串口中断控制灯的开关
初始化串口1,中断优先级随便设置,反正只有一个函数怕啥。校验位啥的看着设,哎无所谓的。没关系,直接将打印的东西从定向到串口就是咯。近期脑子有点抽象,想一下估计也有家伙和我一样,所以就分享给抽象的大家如何串口控制LED灯。相信大家都是聪明人,都看的懂的,不懂就要去学习咯,我也是哦,不懂就去多学习。可能我比较乐意吧,大家想用也可以用,没关系,相信你自己会出手的。我反正点亮了,你们我就不管了。哎,头文件啥的,简单写一下就是了。好人做到,送佛送到西,一路写下去咯。写的不好,希望大家不要喷我。就这样了,直接ok了。
2023-09-16 21:46:09
186
原创 网络通信之多路复用和并发服务器
占用资源比较小,代码维护起来困难 pthread_create自动收尸,pthread_detach 不自动,pthread_join。服务器通过进程的方式开展可以存储很多客户端的信息,相比线程,开销比较大,每连接一个客户进来,就需要服务器开多一个进程存储该客户端。一句话简单讲就是:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力。创建一个集合,这个集合保存你关心的文件描述符。当集合中任意一个文件描述符就绪的话,就解除阻塞,向下运行。真正意义上做到一对多,但是,对系统的负担很大。
2023-09-14 05:15:00
170
1
原创 网络通信之服务器搭建
简单记录一下网络服务器客户端搭建的基本流程。1、创建socket网络套接字。网络通信搭建需要先建立服务器。2、绑定自己的IP和端口。
2023-09-14 04:00:00
160
1
原创 source insight 4美化
http://链接:https://pan.baidu.com/s/1s-l20NCsNDwhcKBuYX9-Zg提取码:pjxj 一切尽在不言中,给个点赞再走呗
2023-09-08 17:15:03
173
1
原创 sqlite3基础命令笔记
PS:通常,sqlite3_callback 和它后面的void*这两个位置都可以填NULL。填NULL表示你不需要回调。比如你做insert 操作,做delete操作,就没有必要使用回调。而当你做select 时,就要使用回调,因为sqlite3 把数据查出来,得通过回调告诉你查出了什么数据。filed ---> 表示表中每一项名字。
2023-09-07 21:17:16
3042
1
原创 网络通信之json打包
数据--->(封装)json对象--->string格式---------> ---->传输---->---->String格式---->(解析)jason对象---->取得数据(int、char..)数据,与键值成对存入json对象——>通过键值从json对象取得数据。json接口API:(注意:在json中所有数据类型(arry、int、string、char)都是一个jason对象)1、数据的封装(单对象(int、char、string)和数组(arry))(3)对象的转换(数据还原)
2023-09-07 19:40:32
290
1
原创 系统5之信号量
信号量是用来解决进程/线程之间同步或者互斥问题的一种通信机制,包括一个称为信号量的变量和该信号量下等待资源的进程等待列队。其中,信号量对应于其中的一种资源,去一个非负数的整数。系统5的信号量是由一个或多个信号灯组成的一个集合 其中每一个灯都是单独操作的。P操作:如果有可用资源(信号量值>0)则占用一个资源(信号量值-1,进入临界区代码)没有可用资源(信号值==0)则堵塞,直到系统分配资源给该任务(一直等待到有资源才会唤醒)。V操作:如果该信号量的等待队列有任务在等待资源,则唤醒一个阻塞任务。
2023-08-30 01:00:00
107
1
原创 Linux多任务编程(二)
在此概念,人们引入了线程的概念,在进程的基础上进一步细分任务,将其体型削减,让它占用空间更小,彼此之间空间相对没这么独立,实现资源共享的操作。在嵌入式开发中广泛运用。获取资源的线程进入一个条件变量的等待队列中进行等待,等待资源数据到达, 当资源数据到达的时候条件变量则可以选择从队列中唤醒线程进行读取资源(唤醒可以唤醒一个或多个)。以上两个函数用来唤醒阻塞在条件变量等待队列的线程,顾名思义:broadcast是用来唤醒全部线程,signal是用来唤醒一个等待的线程。
2023-08-29 21:50:51
117
1
原创 系统5之消息队列
消息队列就是一些消息的列表。用户可以在消息队列中添加读写信息。且消息存在内核中,由队列ID来标识,是IPC对象的一种。消息队列可以按照类型来发送/接收消息。特点:队列:先进先出。2、相关API:2.1创建或者获取消息队列:msgget()msgget功能:创建或获取消息队列参数:key:参考共享内存中key详解返回值:成功返回消息队列ID失败返回-1,并设置错误码。
2023-08-26 23:00:00
167
原创 系统5之共享内存
共享内存是一种最为高效的进程间通信方式,进 程可以直接读写内存,而不需要任何数据的拷贝。为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程将其映射到自己的私有地址空间。进程就可以直接读写这一内存区而不需要进行数据的拷贝,从而大大提高的效率。由于多个进程共享一段内存,因此也需要依靠某种同步机制,如互斥锁和信号量等。
2023-08-26 17:18:29
303
1
原创 进程之间的通信之早期通信
1、进程间的通信分为三类:早期:无名管道(pipe)、有名管道(fifo)和信号(signal)系统5 IPC对象:共享内存(share memory)、消息队列(message queue)和信号灯网路:套接字(socket)2、管道:管道是Linux中 进程通信的一种方式,他把一个程序的输出,直接接到另外一个程序的输入中,Linux的管道通信主要分为两种,有名管道,无名管道,管道文件表示符 TT。
2023-08-26 15:14:24
97
原创 守护进程制作
守护进程,也就是通常所说的Daemon进程,是 Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性的执行 某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是用守护进程实现的。在Linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会被自动关闭。
2023-08-25 08:46:52
265
1
原创 Linux多任务编程(一)
为什么学习多进程线程:在我们学习该课程之前,我们代码的执行逻辑,从上往下,一条一条语句执行: 先干什么,后干什么。学习多线程进程,可以实现多任务同时运行,互相切换互不影响,拜托传统代码逻辑执行的弊端。任务会频繁切换给用户多个任务一同运行的感觉。什么是任务:简单讲:一个任务就是一个程序的一次运行,一个任务包含一个或者多个独立功能的子任务,这个独立的子任务是进程或者线程。进程是程序执行和资源管理的最小单位,是一个动态的概念,它是程序执行的过程,包括创 建、调度和消亡。1.1.2 什么是程序。
2023-08-24 21:41:48
393
2
原创 嵌入式 IO编程
1、IO编程:数据和文件之间相互通信的过程。IO编程就是对文件的输入输出操作。2、IO编程分为标准IO,和文件IO。简单介绍一下两者区别:标准IO:由ANSIC中定义的用于I/O操作的一系列函数,引用C语言库支持C库操作应用层,,是一种高级IO,主要的操作对象是普通文件。为减轻系统开销,标准I/O使用时候会在用户区创建缓冲区,读写时先操作缓冲区,在合适的时机再通过系统调用访问实际空间,从而减少使用系统的调用次数。
2023-08-21 21:06:52
408
1
原创 内核链表的简单使用
1、内核链表常出现在系统内部,是ubuntu内部提供的一种双向循环链表。双向循环链表:所有的东西都是自定义的:数据域,prev和next指针内核链表:只有数据域是我们自定义:其他的操作在内核链表文件list.h中均有定义声明2、内核链表与普通链表的区别:1. 普通链表当中数据域和指针域,没有做到区分。数据与指针形成了一个整体,而内核链表数据与指针是完全剥离的没有直接的关系。2. 在普通链表当中所有节点的数据都是一样的类型,而内核链表中每一个节点的类型都可以是不同的。
2023-08-09 09:41:00
202
原创 一、Makefile工程管理
工程管理器,顾名思义,是指管理较多的文件目的:编译整个工程文件Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能构根据文件时间戳自动发现更新过的文件而减少编译的工作量如何编译:make通过读入Makefile文件的内容来执行大量的编译工作make运行过程在文末提供一些关于make的学习文件http://链接:https://pan.baidu.com/s/1pHnW5vTbwTuxMNPt7FXBsQ 提取码:sv5c。
2023-08-02 12:30:27
650
5
原创 Ubuntu的三协议以及Vim的美化
Samba:Samba是一种开放源代码的实现Windows文件共享协议(如SMB/CIFS),允许Linux/UNIX系统与Windows系统之间进行文件和打印机共享。通过Samba,Linux/UNIX系统可以作为文件服务器与Windows系统进行交互,使得Windows系统能够访问和操作Linux/UNIX系统上的共享文件和打印机。Samba还提供了一些额外的功能,如用户认证和安全性设置。
2023-07-28 18:00:30
302
1
原创 windows与Ubuntu实现文件互传存在两种方式
将设置为false表示禁用 Wayland 作为默认的显示服务器,而使用传统的 Xorg 作为图形显示服务器。Wayland 和 Xorg 是两种不同的图形显示协议和架构。Wayland 被设计为一种更现代、更简洁的图形显示协议,旨在取代传统的 Xorg。由于其设计上的优势,Wayland 可以提供更好的性能、更低的延迟和更好的安全性。然而,尽管 Wayland 在未来可能成为主流的显示服务器,部分应用程序和显卡驱动程序仍然可能对 Xorg 有依赖性。
2023-07-13 20:24:52
19688
16
原创 关于vsC++2022单个项目多文件单独调试
正常来说一个项目只能存在一个main()函数,main()函数是项目的起始入口,但有时个人比较懒就直接在该项目中创建c文件,运行时候就会出现一下问题。解决方法其实很简单直接将不需要运行的文件从该项目中排除在外就可以了。原因已经提示,没有找到指定文件,存在多个main函数,存在干扰。2、在常规,从中排除,右边点击选择是。在点击运用,在点击是。3、当右边文件出现小红圈时候就可以了。该文件就不会运行了。如果存在调试有关的问题个人建议在官方文档上找一下。这边建议不要偷懒,之间建立多个项目。
2023-05-13 23:30:49
756
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人