自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 收藏
  • 关注

原创 理解-字节对齐

现代计算机中,内存空间按照划分,理论上可以从任何起始地址访问任意类型的变量。但实际中在访问特定类型变量时经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序一个接一个地存放,这就是对齐。变量存的起始地址必须具备某些特性----“对齐”,比如4字节的int型,其起始地址应该位于4字节的边界上,即起始地址能够被4整除。

2024-06-03 16:45:12 668

原创 大端模式和小端模式

在计算机中,我们知道数据是按字节存储的,如果字节是单字节就不会涉及到存储顺序的问题,但是,大多数情况下,数据不是按照单字节的方式存储的例如:int short double等等,这样就涉及到存储顺序的问题了。大端模式和小端模式只是针对于数据存储,但是读数据的话永远是从低地址开始的。我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。

2024-06-03 11:54:23 250

原创 传输协议TCP-原理部分

传输控制协议TCP(Transmission Control Protocol)一种基于的的的的传输协议。

2024-06-03 10:39:59 795

原创 Linux的库文件

静态库实际上就是一些目标文件的(一般是以.o结尾)的集合,静态库一般是以.a结尾,只用于链接生成可执行文件阶段。以.c为后缀的源文件经过编译生成.o文件的目标文件以.o为后缀的目标文件经过链接生成最终的可执行文件。我们可以在链接的时候直接链接.o的目标文件,也可以将这些.o文件打包集中起来,统一链接,而生成的打包集成了所有.o文件,也就是静态库。静态库只在程序连接的时候时候,连接器会将程序中使用到函数的代码从库文件中拷贝到应用程序中,

2024-02-05 00:15:05 984

原创 Linux 文件IO

在Linux下的一切接文件(Everything is file in Unix/Linux)。IEEE制定了一套POSIX标准,用于统一Unix系统对文件的接口操作。

2024-01-30 19:48:53 1098

原创 MakeFile的使用

在前边的文章中我们提到了GCC编译器如何去使用,但是在编译的时候都是一条的指令对已知的文件进行编译,但是对于工程文件数目较大的项目,如果修改了多个文件就需要对多个文件进行预编译、编译、汇编、链接,需要执行多条gcc命令尤其麻烦,这里引出。

2024-01-26 17:44:00 948

原创 ARM_Linux中GCC编译器的使用

什么是GCC:gcc的全称是GNU Compiler Collection,它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器(GNU C Compiler),现在除了c语言,还支持C++、java、Pascal等语言。gcc支持多种硬件平台。gcc是一个可移植的编译器,支持多种硬件平台。例如ARM、X86等等。gcc不仅是个本地编译器,它还能跨平台交叉编译。所谓的本地编译器,是指编译出来的程序只能够在本地环境进行运行。而gcc编译出来的程序能够在其他平台进行运行。

2024-01-22 16:58:02 1969

原创 ARM_Linux的交叉开发以及交叉编译器

因为咱的电脑一般都是X86架构的但是咱的开发板是ARM架构的不同的CPU所支持的指令集不同,一个.c文件在编译的时候会生成.s的汇编文件,在汇编文件里会生成不同的指令集(gcc编译过程会在下一篇文章里),所以在ubuntu系统下使用gcc 或者 g++编译生成的可执行程序不能运行在ARM平台上。g)上图中的文件便是一些交叉编译器,“arm-poky-linux-gnueabi-g++”就是用来编译.cpp文件的,“arm-poky-linux-gnueabi-gcc”是用来编译 .c 文件的。

2024-01-22 14:29:35 1104

原创 ARM_Linux的NFS网络文件系统的搭建

NFS是network filesystem的简称,可以不同的主机通过网络访问远端的NFS服务器共享出来的文件,这样主机通过网络访问NFS服务器,我们就可以在开发板上通过网络访问主机的文件。

2024-01-21 15:01:48 1207 1

原创 VI编辑器

现场调试没有gui形式的编译工具,vi是唯一的选择(vim也可以不过需要另行下载)在Desktop路径下建立test1.txt文件:打开终端进入Desktop目录创建文件:vi + 文件名进入vi的一般模式,点击i进入编辑模式在光标处插入数据输完数据后,点击ESC退出编辑模式回到一般模式在一般模式下输入 :wq (保存退出回到终端命令行)如果不想保存输入“:q!”即可强制退出。

2024-01-21 12:43:08 914 1

原创 C++编译器对临时对象的优化

C++编译器对临时对象的优化

2023-11-14 18:40:49 140

原创 通过GIT将本地项目上传到gitee(非常实用)

通过GIT将本地项目上传到gitee(非常实用)

2023-10-24 21:16:37 100

原创 uCOSIII实时操作系统 十一 消息传递

一个任务或者中断有时候需要和另一个任务交流信息,这个就是消息传递的过程就叫做任务间通信,任务之间的信息传递有两种途径,一是使用全局变量,二是通过发布消息。使用全局变量的时候,每一个任务或者中断服务程序都必须保证气全局变量的独占访问,(通常解决方式:关中断、临界区、信号量)。消息也可以通过消息队列作为中介发布给任务。

2023-10-24 18:17:49 483

原创 uCOSIII实时操作系统 十 事件标志组

任务等待的条件可以使标志组里任意一个标志置位或者清零,也可以是所有事件标志都置位或者清零。如果任务等待的事件标志组不满足设置的条件,那么该任务被置位挂起,直到等待的事件标志组满足条件,指定的超时时间到,事件标志被删除或者被另一个任务终止了该任务的挂起状态。: bit序列,任务需要等待事件标志组的哪个位就是把这个序列对应的位置1.根据设置这个序列可以是8bit,16bit,32bit比如任务需要等待事件标志组的bit0或者bit1(无论是等待置位还是清零)flag的值就是0x03。

2023-10-22 16:09:14 309

原创 uCOSIII实时操作系统 九 信号量和互斥信号量

先粘出正点原子对信号量的解释:使用信号量的最初目的是为了给共享资源设立一个标志。我们可以将其想象成我们裸机中经常使用的标志位。只不过该标志位代表的是共享资源被占用的情况罢了。:所谓互斥是同一时刻只能有一个线程可以对共享资源进行访问其他线程无法进行访问。

2023-10-20 09:57:12 644

原创 uCOSIII实时操作系统 八 软件定时器

在学习单片机的的时候,会使用定时器来做很多事情,这个定时器时单片机自带的也就是硬件定时器,而UCOSIII内核提供了一个模拟定时器的机制类似于任务,但是占用资源少,只能做一些简单的定时控制,如可以定时器喂狗控灯。在软件定时器中绝对不能添加事件管理函数,阻塞等待函数。

2023-10-17 20:35:55 569 1

原创 uCOSIII实时操作系统 七 中断与时钟管理

参数如果是0则不会阻塞任务。中断是一个硬件机制,主要用来向CPU通知一个异步事件发生了,这时CPU就会将当前CPU寄存器的值入栈,然后转而执行中断服务程序,在CPU执行中断服务程序的时候有可能有更高优先级的任务就绪,那么当退出中断服务程序的时候,CPU就会直接执行这个高优先级的任务。为0时,UCOSIII使用中断的方式来保护临界段代码,当设置为1的时候,就会采用给调度器上锁的方式来保护临界段代码。函数在任务中使用的非常多,每个任务都必须是死循环,并且必须需要有阻塞的情况,否则低优先级的任务就无法被运行了,

2023-10-16 20:07:22 830

原创 uCOSIII实时操作系统 六 内部任务(空闲函数)

是UCOSIII必须创建的一个任务,任务优先级使用宏OS_CFG_TICK_TASK_PRIO来定义,一般时钟节拍的任务应该,设置一个相对较高的优先级。● OSIdleTaskHook()叫做钩子函数,钩入用户自定义的钩子函数实现用户自定义的功能等,但是需要注意的是,在钩子函数中用户不允许调用任何可以使空闲任务阻塞的函数接口,空闲任务是不允许被阻塞的。在uCOSIII中,空闲任务是系统在初始化的时候创建的优先级最低的任务,空闲任务。在uCOSIII中有一个提供运行时间统计的任务,也就是统计任务。

2023-10-12 21:14:59 413

原创 uCOSIII实时操作系统 五 任务API(时间片轮转API调度)

时间片轮转法:主要用于分时系统中的进程调度。为了实现轮转调度,系统把所有就绪进程按照先入先出的原则排成一个队列的队首进程,让CPU上运行一个时间片的时间。时间片是一个小小的时间单位,通常为5~10ms数量级。当进程用完分给他的时间片后,系统的计时器发出时钟中断,调度程序便停止该进程的运行,把它放在就绪列队的末尾,把CPU分给就绪队列的队首进程,同样也让它运行一个时间片,如此往复。

2023-10-12 09:31:13 379

原创 uCOSIII实时操作系统 五 任务API(任务挂起与恢复)

将任务阻塞,也就是被剥夺CPU的使用权而暂时终止运行,转到阻塞状态,将任务转到阻塞态被挂起称为任务挂起。被挂起的任务得不到CPU的使用权,也不会参与调度,它相对于调度器而言是看不见的,除非他从挂起态中解除。被挂起的任务不能运行,直到其他任务以该优先级作为参数调用来恢复他,才能将该任务的状态重新设置为就绪状态。

2023-10-11 19:20:01 450

原创 uCOSIII实时操作系统 五 任务API(任务创建和删除)

引入:一个任务的三要素是任务主体函数,任务栈,任务控制块,那么怎样吧这个三要素联系在一起呐?

2023-10-11 14:42:20 512

原创 uCOSIII实时操作系统 四 任务管理

如果分别建立了优先级3,5,8,11这个四个任务,任务创建成功之后,调用CPU_CntLeadZeros()我们可以计算出 OSPrioTbl[0] 第一个置 1 的位前面有 3 个 0,那么这个 3 就是我们要查找的最高优先级,至于后面还有多少个位置 1 我们都不用管,只需要找到第一个 1 即可。就绪任务列表OSRdyList[]通过上一步我们已经知道了哪一个优先级的任务已经就绪,但是UCOSIII支持时间片轮转调度,同一个优先级下可以有多个任务。而。

2023-10-10 20:20:07 825

原创 uCOSIII实时操作系统 三 移植

同样复制 Micrium 官方移植好的工程中的相关文件到 UCOS_BSP 文件下,需要复制的文件路径为Micrium\Software\EvalBoards\Micrium\uC-Eval-STM32F107\BSP将下边两个文件移植到自己的所建的UCOSIII_BSP的目录当中。主要内容是基于评估板(厂商的板子)的应用实现,在我们移植中有部分文件是可以用来使用的,在路径红色方框中我们可以看到官方移植的评估板芯片是STM32F107,但是不影响我们在STM32F103开发板上进行移植。

2023-10-08 21:00:33 1195 2

原创 uCOSIII实时操作系统 二 同步与通信

同步概念:互斥概念:临界区概念:任务时间概念:信号量概念:互斥信号量概念:事件标志组概念:消息邮箱和消息梯队概念:内存管理概念:如何从裸机开发转跳到OS编程:轮询系统:前后台系统:多任务系统:

2023-10-05 11:27:54 594

原创 WINDOWS与LINUX的文件文件共享

出来虚拟机设置,咱们点击选项->有个共享文件夹点击->选择总是启用->点击添加。此处选择一个windows下与虚拟机共享的一个目录。那怎么在虚拟机Linux中访问共享文件呐。在文件的其他位置选择计算机->mnt目录。进去之后就看到咱们共享的文件了。点击虚拟机->点击设置。

2023-10-02 11:37:15 205

原创 uCOSIII实时操作系统(重入函数,调度算法,嵌入式系统中断)

内核本身也增加了应用程序的额外负荷,代码空间增加ROM的用量,内核本身的数据结构增加RAM的用量,但更重要的是,每个任务都有自己的栈空间,这一块吃内存是相当厉害的因此,STN89C51,52等性能有限单片机一般不能运行实时内核,因为单片机的RAM很有限。如果是中断服务子程序使一个高优先级的任务进入就绪态,中断完成时,中断了的任务被挂起,优先级高的那个任务。μC/OS总是调度就绪了的,优先级最高的任务获得CPU的控制权,不管这个任务是什么,执行什么样的功能,也不管该任务是否已经等了很久。

2023-09-28 09:46:36 190 2

原创 UCOS-III操作系统(操作系统、任务)

实时操作系统(RTOS)是指当外界事件或者数据产生的时候,能够接收并以足够快的速度给与处理,其处理的结构又能在规定的时间内来控制产生过程或者对处理系统作出快速的相应,并控制所有实时任务协调一致运行的操作系统。(Linux和Windows等都是分时操作系统)。整理成一句话“如果逻辑和时序出现偏差将会引起严重后果的系统!!硬实时操作系统和软实时操作系统。硬实时操作系统规定某个动作必须在规定的时刻内完成或发生,比如汽车生产车间,焊接机器必须在某一时刻内完成焊接,焊接的太早或者太晚都会对汽车造成永久性伤害。

2023-09-26 20:23:24 427

原创 C++类和对象——面向对象的内存模型

(该指针在C++中叫做this指针原型int(C2 * const this)),这是因为C++编译器会将成员函数的第一个形参设计为this指针,this指针指向调用成员函数的首地址,指向成员函数的得对象,在成员函数执行的过程中,正是通过“this指针”才能找到对象所在的地址,在调用c2.getK()的时候相当于getK(&c2);将函数的地址传递了过去。2、性质:在静态成员函数内不能够访问除静态成员变量以外的其他成员变量。2、在对象的内存模型中,“数据”和“处理数据的函数”是如何存储的。

2023-07-04 17:15:42 227

原创 C++类和对象——引用作为函数形参

【代码】C++类和对象——引用作为函数形参。

2023-07-01 12:53:40 642

原创 C++类和对象——深拷贝和浅拷贝

一般情况下浅拷贝没有任何副作用,但是当类中有指针,并且指针指向动态分配的内存空间,将会导致两个对象的指针变量指向同一块内存空间,当对象被销毁的时候调用析构函数,因为在析构函数中会释放指针所指向的堆空间,造成同一块堆空间被释放两次从而导致程序运行出错。两个对象中的指针变量不会指向同一块内存空间,然后再将右值对象指针所指向的空间的内容拷贝到新的对象向指针当中所指向的堆空间中。同一类型的对象之间可以赋值,使得两个对象的成员变量的值相等,两个对象仍然是两个对立的对象,这种情况叫做浅拷贝。提出的第一个问题的)。

2023-07-01 12:36:17 319 1

原创 C++类和对象——(对象的赋值拷贝构造函数)

发现:在执行delete t1语句前和执行后t2->sum[1]的值是不一样的,因为在t1->sum和t2->sum指向的是同一块内存空间当执行delete t1语句的时候会调用析构函数,在析构函数中之前申请的sum空间被释放了,所以s2->sum[1]的值就和原来的不一样了。也就是类似于两个对象名称共用一个内存空间。1、提出问题:能否使用一个已经构造好的对象去初始化另一个对象,C++编译器又是如何处理这些操作的呐。这样的坏处是当只改变t2的成员变量值的时候相应t1的成员变量也会改变。

2023-07-01 01:40:11 832

原创 C++类和对象——(对象的析构和动态建立和释放)

C++中的类可以定义一个特殊的成员函数清理对象,这个特殊的成员函数叫做析构函数* 语法:~ClassName()析构函数没有参数也没有任何返回类型的声明析构函数在对象销毁的时候被自动调用析构函数的调用机制:C++编译器自动调用假如类中有成员变量为指针:例如上图代码中的int *p;

2023-06-27 21:21:36 479

原创 C++类和对象——(对象的构造)

在C++中的类可以定义与类名同名的特殊成员函数,这种与类名相同的成员函数叫做构造函数构造函数在定义时候可以有参数,也可以没有参数没有任何返回类型声明//在类中调用类class Cpublic:C(int i)private:int a;class Boxpublic://无参的构造函数,,构造函数都目的,对类内的某些成员变量经行初始化_h=10;_len=10;_w=10;#if 0//有参的构造函数。

2023-06-27 20:14:23 246

原创 C++之类和对象

属性:变量行为:函数、方法class 类名访问控制符:成员变量 //属性;成员变量 //方法访问控制符有三种:public,private,protected实例:定义一个描述一种动物class Boxpublic://属性//名字int age;//年龄//方法void jiao(char *voice) //描述动物叫的行为,voice为叫的声音。

2023-06-04 14:34:18 29

原创 C++对C的拓展1

对C语言的拓展1。

2023-05-22 15:33:30 61

原创 数据结构——树

/描述二分查找树的一个结构//数据域//左指针//右指针1}Node;5.2、定义一个二叉树//描述一颗二分查找树Node *root;//定义一个指向二分查找树根节点的指针}Tree;

2023-05-20 10:39:26 147

原创 数据结构——队列

队列一种先进先出(FIFO)的数据结构,是一种只能在一端进行插入在另一端进行删除操作的特殊线性表。

2023-05-16 23:36:56 403

原创 数据结构--栈的应用2括号匹配

假设表达式中允许出现两种括号:圆括号()和方括号[],其嵌套的顺序随意,即( [ ( ) ( ) ] )或者 [ ( [ ] [ ] ) ]等为正确的表达式,但是 ( [ ( ] ) 或者 [ ( [ ) ] 或者 ( [ ( ] ) )等为错误的表达式。

2023-05-15 10:47:20 135

原创 数据结构--栈的应用1:数据转换

注意:栈的的数据类型为字符类型,将十进制转化为对应的其他进制就是在这个十进制的数的基础上连续除以10取余,然后以此存放到栈中入栈,直到取余为0时,出栈打印出对应的值,即为对应的。将输入的十进制数转换为对应的2位8位16位进制的数。//链表栈,顺序栈的基本操作请参考之前的文章。

2023-05-15 09:37:35 175

原创 数据结构——栈

栈是一种基于先进后出(FILO)或者后进先出(LIFO)的数据结构,是一种只能在一端经行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进的数据被压入栈底,后进女的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。压栈(入栈):数据进入到栈的动作。弹栈(出栈):数据从栈中出去的动作。

2023-05-15 09:15:34 127

MakeFile的实例

韦东山老师的一个对Makefile讲解的实例

2024-01-26

HAL-17-2022年第十三届嵌入式模拟题第一套

HAL_17_2022年第十三届嵌入式模拟题第一套

2023-12-26

HAL-20-2022年第十二届嵌入式第二场真题

本人的第十二届蓝桥杯嵌入式赛道第二场真题,G4板子

2023-12-26

uCOSIII实时操作系统 五 任务API(时间片轮转API调度)

uCOSIII实时操作系统 五 任务API(时间片轮转API调度)

2023-10-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除