自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【知识点复习】结构体与共用体

2) 结构体每个成员相对结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节{trailing padding}。概况起来就是三对齐:首地址对齐(按最大)、总大小对齐(按最大)、成员对齐(按成员类型)1、结构体中每一个成员都有自己的内存空间,计算结构体大小的时候要注意内部字节对齐;BOOL b_val;int i_val;

2023-06-12 15:42:12 979 1

原创 Git仓库相关操作

版本控制+多人协作初始化Git仓库新建文件夹,在右键菜单中选择:创建版本库注意:不要直接在桌面点击创建版本库,因为本身桌面也是一个文件夹,创建也是生效的。如果把桌面做成版本库,可以把windows文件夹中隐藏项目选项打开,然后把桌面上的隐藏文件夹.git删除即可恢复。提交工作区的内容到版本库注意:工作区如果没有修改,是无法触发提交动作的。查看版本记录版本回退先找到版本日志,然后选择某个版本进行回退版本前进。

2023-06-09 16:26:53 1152

原创 驱动--自动创建设备节点

static void __exit hello_exit(void)//出口。@class :目录名字 cls(向用户空间提交目录信息时产生的返回值)注意:MKDEV(major,0)为一个宏,用于配置主设备号和次设备号。@devt :设备号 MKDEV(major,0)返回值:成功返回struct class *指针。//出口-》这里写了卸载时注销的函数。功能:向用户空间提交目录信息。//自动创建设备节点。

2023-06-08 15:03:51 543

原创 驱动开发--创建设备文件--控制LED灯

sudo mknod hello(路径:任意的) c/b(C代表字符设备 b代表块设备)主设备号 次设备号。在驱动代码中操作的虚拟地址就相当于操作实际的物理地址。@from:内核空间的首地址 __user需要加作用是告诉编译器这是用户空间地址。返回值:成功返回0,失败返回未拷贝的字节的个数。返回值:成功返回0,失败返回未拷贝的字节的个数。返回值:成功返回虚拟地址,失败返回NULL;参数:@offset :要映射的物理地址。(读写的方向是站在用户的角度来说的)启动之后,在使用地址的时候操作的全是。

2023-06-07 23:33:04 724

原创 驱动开发--字符设备驱动

字符设备驱动:1、注册驱动register_chrdev(unsigned int major, const char *name,const struct file_operations *fops)major=0 自动分配设备号 name:驱动的名字 fops:结构体2、声明结构体-》注册驱动时第三个参数3、open、read、write、release-》按照内核的格式自己写的4、把自己写的这些函数->给到结构体里-》.open .read .write .release。

2023-06-06 23:56:47 667

原创 驱动开发--根文件系统

--------------------------------系统调用(软中断)---------------------------------------7) ubuntu下(sudo insmod lcd.ko)开发板下(cp自己的驱动.ko nfs路径)insmod lcd.ko。字符设备:LED(0/1)、鼠标(坐标点)、键盘(按压)、LCD(控制灯0/1)、摄像头。广义:单片机开发属于嵌入式开发---(嵌入式微处理器开发) 一般不带mmu(地址映射)

2023-06-05 20:50:30 1105

原创 Linux内核源码的配置和编译

测试uImage是否可以正常启动,并且挂载根文件系统(重启开发板,自动方式:先将uImage下载到内存里面,然后bootcmd启动内核,然后给内核传递参数。错误的原因:找不到mkimage命令,根据提示分析出来mkimage应该存在uboot源码目录中。将arch/arm/boot/目录下的uImage拷贝到tftpboot目录下,拷贝到到ubuntu的/use/bin目录下:绝对路径。将uboot源码的tools目录下的mkimage,拿到内核源码之后,应该先清除,内核源码中的中间文件。

2023-06-02 21:40:49 1534

原创 uboot源码结构、配置、编译

它这个makefile是层层调用的每个文件夹下都有,使用make命令后总的makefile文件会调用每层的马克file文件来共同编译出uboot镜像。fs:文件系统,这里面每个文件夹内都是文件系统的源代码和makefile文件这里面ext4是嵌入式领域常用的文件系统。它的更新是非常频繁的。由于uboot的源码特别多所以是由很多个文件夹组成的,同类型的源码放到一个文件夹里。为了保证uboot适用所有的开发板,uboot把所有的开发板都写出来了,需要哪个编译哪个。uboot是一个开源的软件。

2023-06-02 20:24:20 930

原创 uboot的使用

uboot启动后若没有用户介入,倒计时结束后会自动执行自启动,环境变量(bootcmd)中设置的命令(一般作加载和启动内核)cnt: 读取的扇区的个数 mmc write。mmc write 将内存中指定地址中的内容写入到EMMC中指定的扇区。mmc read 将EMMC中指定扇区中的内容读取到内存中指定的地址。自启动模式下uboot就会按照bootcmd中命令的顺序逐条执行。服务器的IP地址(即ubuntu的IP)查看uboot支持的所有命令。设置指定的环境变量(保存在RAM中),

2023-06-02 14:27:16 663

原创 系统移植-uboot

在基于ARM处理器的开发板上安装Linux系统。

2023-06-02 00:54:40 411

原创 ARM-LED灯--蜂鸣器

我们的SOC(片上系统、系统芯片)型号是S5P6818(三星),对应的芯片用户手册为:S5P6818X 用户手册V0.00,其中一章是:Memory map或Memory Controller 中的一张表中可以看地址隐射关系。9、设置GPIOA28引脚为GPIO功能: GPIOAALTFN1[25:24]

2023-05-31 11:59:31 1320

原创 ARM-伪操作

协处理器指令数据运算内存访问与主处理器通信协处理器指令1.协处理器数据运算指令CDP2协处理器储存器访问指令STC 将协处理器中的数据储存到存储器LDC 将存储器中的数据读取到协处理器中3.协处理器寄存器传送指令MRC 将协处理器中寄存器的数据传送到ARM处理器中的寄存器MCR 将ARM处理器寄存器中的数据读取到协处理器寄存器中协处理器CP15CP15管内存的如果ARM直接操作内存,就操作到物理内存了。ARM不直接操作内存,arm找一个助理,这个助理是CP15。

2023-05-30 16:32:47 779

原创 ARM微架构与程序编写

目录1.流水线2.指令流水线 3. 多核处理器​编辑4. 工程搭建4.1为Keil软件配置编译工具链5.程序编写 5.1 数据处理指令5.2 带标志位的加法ADC ADDS5.3 跳转指令B\BL5.4 单寄存器内存访问5.5 批量寄存器内存访问5.6 满减操作 4.1.1创建新工程4.1.2设置工程保存的路径和工程的文件名字,在这里我将工程保存到 ARM-ASM 文件夹下,将工程命名为 arm-asm。 4.1.3 设置我们工程支持哪款 CPU,这里我们选择 Samsung 的 S3C2440A 芯片 4

2023-05-29 19:29:42 939

原创 ARM体系结构与异常处理

1.ARM的含义ARM(Advanced RISC Machines)有三种含义 :一个公司的名称、一类处理器的通称、一种技术2. ARM公司> 成立于1990年11月,前身为Acorn计算机公司> 主要设计ARM系列RISC处理器内核> 授权ARM内核给生产和销售半导体的合作伙伴,ARM公司并不生产芯片> 提供基于ARM架构的开发设计技术软件工具、评估板、调试工具、应用软件、 总线架构、外围设备单元等。

2023-05-28 16:07:41 1141 2

原创 ARM--计算机基础知识

通用寄存器(R0-R12):存储普通的数据,例如a=2,b=3,c=a+b ,ab存在通用寄存器中,+在指令寄存器IR中。应用层通过调用函数实现相应的功能。把其他信号转换成计算机能识别和处理的信号(电信号),如键盘、鼠标、摄像头等。CPU中用各种各样的数字电路搭配成各种各样的运算电路,如:加法、减法等。速度、价格、容量介于Cache与辅存之间、断电数据丢失、的部件,是实现“存储程序控制”的基础,如内存、硬盘等。速度最慢、价格最低、容量最大、断电数据不丢失、速度最快、价格最高、容量最小、断电数据丢失、

2023-05-26 19:25:56 1302

原创 时钟、SysTick定时器、PWM、ADC

【1】STM32的时钟系统1.时钟基本概念1) 时钟是嵌入式系统的脉搏,处理器内核在时钟驱动下完成指令执行,状态变换等动作,外设部件在时钟的驱动下完成各种工作,例如:串口数据的发送、AD转换、定时器计数等因此时钟对于计算机系统是至关重要的,通常时钟系统出现问题也是致命的,比如振荡器不起振、振荡不稳、停振等。时钟信号推动单片机内各个部分执行相应的指令,时钟就像人的心跳一样。2)时钟系统的组成:时钟源(振荡源)、唤醒定时器、倍频器、分频器时钟源:Tips:晶体振荡器和RC振荡器的区别?

2023-05-23 19:43:40 1789

原创 单片机--中断实验练习

实验要求:主程序发送一句字符串“helloworld”,当这条字符串发送完成时触发中断事件,调用中断服务程序发送“UART Transmit completed!当串口发送完“helloworld”之后产生发送完成事件触发中断,执行中断服务程序,并输出“UART Transmit completed!1. 显示屏显示计时时间,格式为00:00:00,时间以秒为单位自加,当检测到按键按下之后,时间归零,继续从0开始计时。响应优先级->在两个中断同时触发时,且这两个中断的优先级相同,响应优先级高先执行。

2023-05-23 00:49:24 1199

原创 单片机--STM中断系统

在处理器中,中断相当于对于突发事件的处理过程。当遇到内部/外部的紧急事件需要处理时,暂时中止当前程序,转而去处理紧急事件,待处理完毕后,再返回被打断的程序继续向下运行。示例:1 看电影 正在执行的主程序2 来电话 中断信号3 暂停电影 压栈。

2023-05-19 17:21:52 644

原创 单片机--SPI协议

SPI模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是MISO(主设备数据输入)、MOSI(主设备数据输出)、SCLK(时钟)、CS(片选)。(1)MISO– Master Input Slave Output,主设备数据输入,从设备数据输出;(2)MOSI– Master OutputSlave Input,主设备数据输出,从设备数据输入;(3)SCLK – Serial Clock,时钟信号,由主设备产生;

2023-05-19 17:15:16 1430

原创 单片机--USART

在两个设备正常通信时,由于处理速度不同,就存在这样一个问题,有的快,有的慢,在某些情况下,就可能导致丢失数据的情况。串口发送ON开LED,发送OFF关LED或者(0X550X440XFF表示开灯,0X550X660XFF表示关灯)注:包头 0X55 包尾:0XFF 数据:0X44表示开灯 0X66表示关灯。异步通信:通信双方有自己的独立系统时钟,大家约定号通信的速度。发送过程:由CPU和DMA向数据发送寄存器(TDR)中写入要发送的数据,由发送移位寄存器将数据按位移到发送端口输出。

2023-05-18 21:21:32 775

原创 单片机--实战练习

问: 单片机上电后第一个执行的程序是?1、初始化堆栈指针SP=_initial_sp2、初始化PC 指针=Reset_Handler3、初始化中断向量表4、配置系统时钟SystemInit5、调用C 库函数_main 初始化用户堆栈,从而最终调用main 函数去到C 的世界【1】GPIO1.定义在嵌入式系统中,经常需要控制许多结构简单的外部设备或者电路,这些设备有的需要通过CPU控制,有的需要CPU读取其输入信号,因此在嵌入式微处理器上提供了一种“通用可编程I/O端口”,也就是GPIO。

2023-05-17 17:19:06 1261

原创 单片机--STM32

所以这部分水(电能)可以被这些容器保存下来,这是电容的储能作用,另外很明显,无论前面的水流多么湍急,到了湖泊就要先灌满它,湖泊开口再向下游流水,自然流水就缓慢一些,所以它也有。因为后面的元件需要是稳定的水流, 你可以这样想象我们拿着水桶往水缸里倒水的时候,水面上起的水花是很大的,这样的水花,对后面的器件是有损伤的。电流表实际就可以看成是水流表,就是计算水的流量,电的流量的意思。一般我们把电子知识想复杂了,实际电就可以理解为是水,电的特性和水的特性是类似的,因为电是看不见的,所以我们理解起来有困难。

2023-05-16 21:11:13 1147

原创 Qt--项目打包

只需要把exe文件与dll文件放置到同一个目录中即可,在这种发布的结构下,这个目录被称为软件的根目录,充当了开发过程的工作目录与构建目录的角色,这代表了根目录中要包含图片文件、qrc文件、.db文件等。之所以能在Qt Creator中运行项目代码,实际上是因为Qt的开发环境中包含了Qt的源代码文件,开发者的编写程序,通过API调用了这些源代码,从而保证各种功能的正常执行。此模式适合发布给用户使用,通常不包含调试信息,但是生成的可执行文件体积小,并且编译器会做专门的优化,运行速度比Debug模式快。

2023-05-12 16:21:59 1674

原创 Qt--基于TCP客户端与服务器的聊天程序(半双工通信)

本次要实现一个基于TCP的聊天程序,需要使用的类有:QTcpServer服务器管理类:管理服务器的多个连接,直接继承了QObject,因此不具备IO能力。QTcpSocketTCP连接类:进行网络IO操作,间接继承QIODevice类。文本流类:是一种高效地文本数据IO的辅助类。

2023-05-12 12:00:20 1043

原创 Qt--数据库--增删改查操作

1. Qt数据库简介Qt只是作为媒介去操作数据库,本身不具备数据库的功能,因此除了Qt以外,还需要在计算机中安装对应的数据库软件,但是由于SQLite数据库比较轻巧,因此Qt集成了SQLite数据库,此数据库是嵌入式中最常用的数据库。实际上Qt支持以下类型的数据库产品:在Qt项目中使用数据库必须在.pro项目配置文件中增加sql模块。2. 连接与关闭连接成功后会生成数据库文件。3. 建表QSqlQuery主要用于执行SQL语句,相关函数如下。

2023-05-11 16:04:35 3263 1

原创 Qt 文件IO

1. QFileDialog 文件选择对话框操作系统会提供一个统一样式的文件选择对话框,QFileDialog类可以直接调用系统自带的文件选择对话框。QFileDialog继承自QDialog,这样的类直接使用静态成员函数调用。示例代码dialog.hdialog.cpp。

2023-05-10 16:59:33 1168

原创 Qt使用星空图作为窗口背景,点击键盘的WASD控制小飞机在上面移动。

事件函数的使用依托于Qt的事件机制,一个来自于外部事件的传递机制模型如下所示信号槽虽然好用,但是无法包含所有的情况,事件函数可以起到对信号槽无法覆盖的一些时机进行补充,事件函数的使用无需连接。常用的事件函数如下所示。

2023-05-10 13:40:47 1079

原创 Qt--多窗口编程

1. QMessageBox 消息对话框(掌握)QMessageBox继承自QDialog,是一种用于通知用户或询问用户一个问题的对话框窗口,这种窗口是模态的,会抢占窗口焦点,必须优先处理。

2023-05-09 18:26:02 2735

原创 Qt--设计电子相册(上一张、下一张、开始播放、结束播放)

设计一个电子相册,点击上一张,切换到上一张图片,点击下一张,切换到下一张图片。使用QList存储各个图片的资源路径,QTimer定时器控制循环播放间隔时间。点击开始播放,图片循环播放,点击结束播放,图片停止播放。添加图片到项目目录中。

2023-05-09 15:06:20 914

原创 Qt--QString字符串类、QTimer定时器类

1. QString 字符串类QString是Qt中的字符串类,与C和C++不同的是,Qt的字符串使用。每一个字符使用一个16位的QChar,而不是之前8位的char,所以Qt处理中文没有问题,并且每个中文算作一个字符。Qt是基于C++的开发框架,因此很多类会尽可能地兼容C++的API,QString支持绝大多数std::string的API,例如append、size、length、at、push_back等。除此之外,也有修改和新增的部分。

2023-05-09 14:26:27 714

原创 UI--基本组件

1. Designer 设计师Designer是一款独立的用于设计Qt界面的应用程序。Designer程序保存的文件格式为.ui,这是Qt中的界面文件格式,可以非常快速的开发用户界面。当使用Qt Creator新建项目时,如果在第五步,选中了创建界面的选项,这样的项目会自带一个.ui界面文件。在Qt Creator中双击界面文件,可以直接通过内置的Designer程序打开。Designer程序的区域划分如下图所示。2. Layout 布局。

2023-05-09 11:26:56 2049

原创 【UI】QWidget类--点击按钮实现触发效果

样式是一个QWidget的属性:通过其setter可以设置内容,内容使用QSS语法,类似于前端中的CSS语法,下面是一个已经预设好了的样式表效果,可以自行更改尝试使用。/*按钮普通态*/\{\/*字体大小为20点*/\/*字体颜色为白色*/\/*背景颜色*/\/*边框圆角半径为8像素*/\}\/*按钮悬停态*/\{\/*背景颜色*/\}\/*按钮按下态*/\{\/*背景颜色*/\/*左内边距为3像素,让按下时字向右移动3像素*/\

2023-05-08 09:28:43 1092

原创 C++构造函数与析构函数

若类中没有显式定义析构函数,则编译器会给出一个默认的析构函数,函数体为空,在对象生命期结束时默认的析构函数被执行。如果不显示的给出构造函数,会有一个默认的构造函数,如果给出任意构造函数,默认无参的构造函数就不存在了。,这个工作由析构函数完成。:用于创建对象时初始化对象中的属性。1.析构函数没有参数,所以不能重载。调用构造函数进行初始化。对象生命期结束前应该完成。2.对象销毁时自动调用。参数为空,函数体为空。

2023-04-30 19:47:18 47

原创 【Qt】项目新建与介绍

这种方式可以直接定位到光标处的文档内容,需要注意的是不同品牌的电脑F1键点法不太一样,联想需要同时按Fn键。在Qt Creator的代码中,光标定位到要查询的内容,双击键盘F1。6. 在项目管理界面,直接点击完成。可以运行项目程序,运行后弹出一个空白的对话框窗口。2. 在弹出的窗口中,按照下图所示进行操作。3. 在弹出的窗口中设定项目名称和工作目录。5. 在弹出的窗口中,按照下图所示进行操作。1. 启动Qt Creator程序,点击。这种方式可以调用一个内置的帮助文档。在Qt Creator中,点击。

2023-04-30 18:55:18 35

原创 基于Webserver的工业数据采集项目

主要是完成网页对Modbus设备(寄存器)信息的读取(例如光照强度、加速度等)以及通过网页点击开关对Modbus设备(线圈)的控制,用Modbus slave来代替Modbus设备。嵌入式Web server,是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境。具有非常低的内存开销,cpu占用率低,效能好,以及。当Web服务器接收到一个HTTP请求,会返回一个HTTP响应,例如送回一个HTML页面。CGI是Web服务器和一个独立的进程之间的协议,它通过。

2023-04-28 18:25:11 496

原创 Modbus编程实现采集传感器数据和控制设备

编程实现采集传感器数据和控制硬件设备(传感器和硬件通过slave模拟)传感器:2个,光线传感器、加速度传感器(x\y\z)硬件设备:2个,led灯、蜂鸣器要求:多任务编程:多线程、多进程循环1s采集一次数据,并将数据打印至终端同时从终端输入指令控制硬件设备0 1 :led灯打开0 0:led灯关闭1 1:蜂鸣器开1 0 : 蜂鸣器关。

2023-04-27 20:38:37 598

原创 Modbus函数接口及编程流程

功能:读取保持寄存器的值,可读取多个连续保持寄存器的值(对应功能码为。功能:读输入寄存器的值,可读取多个连续输入寄存器的值(对应功能码为。功能:读取线圈状态,可读取多个连续线圈的状态(对应功能码为。功能:读取输入状态,可读取多个连续输入的状态(对应功能码为。功能:写入多个连续线圈的状态(对应功能码为。功能:写入单个线圈的状态(对应功能码为。功能:写入多个连续寄存器(对应功能码为。功能: 写入单个寄存器(对应功能码为。返回值:成功:读到寄存器的个数。返回值:成功:读到寄存器的个数。

2023-04-27 19:59:47 453

原创 网络高级--工具软件的使用

过滤ip地址:ip.addr == 192.168.50.15 (根据自己Windows下的ip地址设置)如果只是在本机上的通信,选择NPCAP Loopback apdater。读保持寄存器:函数参数(寄存器起始地址、寄存器个数、从机ID)注意协议发送正确,注意寄存器类型要匹配,先连接后发送。windows如果连接有线网络,选择本地连接/以太网。分别封装函数实现对保持寄存器的读取和对单个线圈的控制。注意先开启Slave端,后启Poll端。如果连接无线网络,选择WLAN。1.下载软件,默认安装。

2023-04-27 19:33:48 94

原创 网络高级--ModbusTCP协议

Modbus协议是现在国内工业领域应用最多的协议,不只PLC设备,各种终端设备,比如水控机、水表、电表、工业秤、各种采集设备。|-事务处理标识符-|-协议类型-|-字节长度-|-从机ID-|-功能码-|-起始地址-|-寄存器个数-||-事务处理标识符-|-协议类型-|-字节长度-|-从机ID-|-功能码-|-数据长度-|-寄存器数据-||-事务处理标识符-|-协议类型-|-字节长度-|-从机ID-|-功能码-|-数据长度-|-置为1-|读传感器数据,读1个寄存器数据,写出主从数据收发协议。

2023-04-27 16:55:56 995

原创 进程间通信--无名管道与有名管道

无名管道有名管道使用场景亲缘关系不相关进程特点半双工固定的读端和写端被看作特殊的文件,通过文件IO进行操作在文件系统中可见,数据存放在内存文件IO操作不支持lseek()操作,遵循先进先出函数pipe()直接read、writemkfifo()先open打开,在进行read、write读写特性当无名管道无数据,读阻塞当无名管道中写满64k,写阻塞读端关闭,继续写数据会造成管道破裂只写方式,写阻塞,直到另一个进程把读打开只读方式,读阻塞,直到另一个进程把写打开。

2023-04-27 11:58:02 185

空空如也

空空如也

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

TA关注的人

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