- 博客(66)
- 资源 (1)
- 收藏
- 关注
原创 AD19原理图绘制_学习笔记
PCB中对某特定网络进行颜色设置时,一般是基于类来设置,新建类并添加网络,Panels—PCB---选择类—右键—选择changr Net color设置颜色。在Board insight modes选项下,当我们在PCB编辑环境下,移动鼠标时,在左上角会显示鼠标等坐标等抬头信息,推荐不勾选。在拖拽选项卡下,有两项相关的设置“取消选择过孔/导线”设置为Move,效果是直接提起过孔移动时,过孔的布线不会跟随移动。“选择过孔/导线”设置为Drag(拖拽),效果是选择过孔后再移动时导线跟着过孔移动。...
2022-08-14 09:57:00
2072
1
原创 设备树基础知识
什么是设备树设备树device tree,简称dt在linux中用来做参数的表示和传递。在早期的linux版本其实也有参数的表示和传递的行为,例如uboot给kernel通过bootages传参,只不过那种做法并不太好,而设备树则更巧妙的解决了这种问题。设备树是一个合集,主要包含了dts(device tree source)设备树源文件、dtc(device tree compiler)设备树编译/反编译/调试工具、dtb(device tree blob)二进制设...
2022-05-18 22:16:17
1384
原创 开发板qt移植和交叉开发环境搭建学习笔记
tslib移植准备工作 开发板有uboot 搭建tftp服务器,开发板可通过服务器下载内核并启动; nfs工具,开发板可通过nfs工具加载到主机(电脑)的rootfs; 触摸屏可使用,在cat触摸屏设备,有触摸动作时能获取到反馈信息。 查看输入设备:ls /dev/input/event1 测试输入设备:cat /dev/input/event1安装tslibTslib是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能。tslib本来是一个用...
2022-05-10 23:40:54
573
原创 编辑器vim基础
vi打开文件命令格式:vi 文件名.扩展名目录下有相同文件名就打开,没有时自动创建。vi的两种模式:命令模式:当vi打开时默认为命令模式,在命令模式下,此时键盘上输入的所有东西都被vi当作命令来对待。输入模式:命令模式下按a或者i键要切换成输入模式,屏幕下方显示 -- INSERT –输入模式用来向文件输入内容。输入完成后按ESC键退回到命令模式。保存命令:wq...
2022-03-20 18:37:16
225
原创 containers详解
containers概述container容器控件,用来放置容纳其它的控件,主要有2个作用,外观上给GUI分区,逻辑上给GUI分组,container往往伴随Layaout使用,结合起来构成GUI设计和布局,完成漂亮好用的GUI。GroupBox分组框 外观上是组合框,内部可容纳Label、pushButton、Radiobutton等,常用功能如下:title:设置groupBox的名称alignment:设置名称的对齐方式flat:边框隐藏checkable:...
2022-02-10 22:27:53
4451
原创 DisplayWidget详解
LabelQLabel是qt最简单的控件之一,他的典型功能就是显示文字,实际上QLabel还有些不一样的地方,他支持超链接,当我们将label设置为超链接文本,在我们点击字符时就可以实现跳转到网页,超链接支持2种方式。直接跳转超链接显示设置:setText("<a href = 'https://zhulaoshi.taobao.com/'>朱老师淘宝店</a>"),格式是固定的,绿色部分位链接网址,黄色部分为在label显示的字符。允...
2022-02-10 22:22:47
856
原创 Button详解
pushbutton是常见的一种GUI的按钮,常见的如密码输入键盘等,qt的所有控件都可以在GUI设置进行静态设置,当我们希望在运行过程中动态调整或更新就只能写代码,在运行时来更改显示状态,关于按键的函数如下 函 数 功 能 备 注 setText("按钮") 设置按钮显示字符 - setFont(QFont("宋体",20))...
2022-02-08 18:44:17
1033
原创 控件GUI属性
label(标签)QObject objName 控件实例对象的变量名,可以修改为对应功能名,便于记忆 QWidget windowModality 窗口的模式 enabled 控制是否使能,失能后控件显示为灰色,不能操作。 geometry (x、y、宽度、高度) 控件原点坐标,宽度,高度 sizePolicy(大小策略)
2022-02-08 18:31:26
620
原创 QT安装教程
工具介绍常见的编译器 常见的c++译器MSVC(微软)、windows下的MinGW(开源)、linux下开源的GNU(gcc g++),其实MinGW其实就是GNU的封装。QTcreatorqtcreator是专为qt开发而生的,他本身也是用qt开发的。但他本身也是一个独立的IDE,qt可以开发qt的gui项目,也可以开发非qt的纯c++项目。qtcreator完整运行需要kits(构建套件),包括编译器、调试器、工程管理等。qmake ...
2022-02-08 18:20:11
4187
原创 qt上手
空工程源码介绍Ui_MainWindowUi_MainWindow是xml文件转换而来的类,主要是描述图形ui界面,如下代码,该类中包含setupUi函数来初始化界面。还定义了一个命名空间ui,ui命名空间声明了一个MainWindow类,并继承Ui_MainWindow类。对外接口就是MainWindow。class Ui_MainWindow{public: void setupUi(QMainWindow *MainWindow) ...
2022-01-21 09:56:45
399
原创 内存基础
SRAMSRAM静态随机存储,不需要初始化,可直接运行使用。与Norflash类似。具有容量小,价格高等特点。SDRAMSDRAM动态随机存储,需要初始化才能使用,DDR是SDRAM的升级。DDR被称为块(bank)设备,即以块为单位访问,芯片引脚BA0-BA2用来选择bank,再通行线(row_addresss)14位 、列线(column_address)10位;来定位bank内的具体地址,210开发板的ddr技术手册(NT5TU64MGG-DDR2-1G...
2022-01-17 09:57:38
332
原创 重定位的实现
概念dbug版本 & release 软件编译过程为 预编译、编译、链接,链接后的文件已经是二进制文件,cup已经可以运行,此时的版本被称为dbug版本,但是dbug版本的二进制信息中有很多的符号信息,如函数名,目的是用于调试,反汇编时就可以显示出符号,实际符号cpu是不需要的,所以可以使用strin工具将其符号信息去掉,就变成了release发布版,程序中通常有三分之一的空间是符号,所以release可以节约空间。程序段编译器把一个程序分成多个段(代...
2022-01-12 10:46:25
318
原创 makefile编译指令解释
先编译后链接,与gcc不同(编译链接执行),编译使用gcc,链接器ld;write1sd 脚本文件说明:led.bin: start.o // :前的内容为目标(可直接做指令使用)也是默认目 //标,:后面的是依赖;arm-linux-ld -Ttext 0x0 -o led.elf $^ //链接,将.O文件链接成可执行程序led.elf。系统能...
2022-01-11 09:51:18
596
原创 C++学习总结
序言今天是2021年12月31日,也是2021年的最后一天,时间过得很快,也很慢,回想年初在江边玩耍的时候定下学习目标,仿佛就是昨天的事,细想来从定下目标的那一天至今我已完成了很多课程的学习,复盘今年,好像我走哪都只有学习的那种感觉给我留下的印象最深刻,我都怀疑如果不是学习,也许我现在根本想不起今年都去到了哪里,干了些什么。今年出了两趟远门,去了趟上海出差,在酒店的桌子上学习链表。去了趟河南的丈母娘家,在书桌上学习动静态库的引用和作用域、链接属性等。年初时周末为了不被家里小孩打扰,在弟弟的新房里学...
2022-01-10 09:40:05
1155
原创 QT基础课程
前言QT本质上是用c++语言编写的一套GUI类库及相关的工具和资源。目的是帮助用户快速开发GUI程序。最早的QT由奇趣科技公司于1990年着手开发,95年发布1.0版本,2008年被诺基亚收购,在2012年诺基亚出售给了digia公司,2014年digia公司将QT独立成子公司运营。QT的一大特点是可跨平台编译使用,如在windows、linux等各种嵌入式环境下,由于QT本身是使用了c++来做的开发,所以效率高,占用内存少,也是因为使用了c++,所以在运行时,不需要...
2022-01-10 09:28:22
1101
原创 C++ 智能指针
智能指针是为了解决内存泄漏问题,与普通指针相比,他能够自动释放malloc或者new的内存的空间。智能指针本质上的实现是函数连带自动释放,先来看段代码:class smartp {public:smartp(T size) { p=new T(size); } ~smartp() { if(p !=NULL) delete[] p;}pri...
2022-01-02 11:25:11
531
原创 STL其它容器-下
mapmap释义“映射”,和set类似,是一个典型的有序关联容器,不同的是map是成对的(key,value)且一对一映射,一个key对应一个value,key不能重名,但value是不做限制的,而set只有key,map和set用法很类似,map中的元素由pair构成。pairpair释义“对”,也就是(key, value),本质上是一个只有两个元素的结构体,pair中的两个元素类型可以相同,也可以不同,两个元素的名字是固定的,前者叫first对应key,后者叫second对...
2021-12-28 09:29:38
518
原创 C++ STL其它容器 (上)
STL的三种容器适配器容器适配器:queue、priority、stack有序关联容器:set、map、multiset、multimap无序关联容器:unordered_se和unordered_map/unordered_multiset和unordered_multimap什么是容器适配器适配器adapter,本质是添加一个中间层来转换要适配双方,c++有三种适配器:函数适配器、容器适配器、迭代适配器。函数适配器我们在...
2021-12-26 10:51:01
875
原创 c++类型萃取
类型萃取类型萃取,可简单理解为类型获取,萃取的典型应用是在模板函数中区分T的类型是原生类型POD,还是自定义类型,POD全称plain old data,简单理解就是c++从c继承来的基本数据类型,如int、double等。之所以需要区分类型,主要是因为POD类型与自定义类型的很多处理方法不同,典型的就是copy,POD可以直接使用c库提供的memcpy,它主要是实现内存层面的拷贝,而非POD类型需要使用for循环挨个拷贝,因为涉及到深拷贝与浅拷贝的问题,所以在模板中...
2021-12-24 11:55:10
2506
原创 C++模板特化
模板特化在学习模板的时候我们用模板来解决了一个add模板函数,实现不同类型的传参相加,实践证明,模板函数比普通函数好用。那么现在如果我们要新增一个需求,就是如果传入的是两个string类型的参数,我们不要简单的拼接,我们要在两个字符串之间添加一个空格,显然模板函数已经无法满足我们的要求,解决方法就是使用模板特化,简单说就是模板的一个特殊化,当传参为两个string类型的时候,不调用模板函数,而是调用特化模板函数,传入其它类型的时候,仍然使用模板函数,如下示例:template &l...
2021-12-24 11:26:26
1455
1
原创 c++ STL泛型算法
什么是泛型算法软件分数据和计算两部分,前面我们学的容器是对数据的封装,被称为数据结构。关于这些数据结构的计算在容器内部包含了一部分,如sort用来排序,但是没有提供更多,每一个容器内的的sort的实现方法不同,因为他们面对的是不同的容器,泛型算法是独立于容器类的一些操作方法,可以通用于多种容器,所以叫泛型,泛型算法有更高的抽象,实现起来难度更大,这也是STL的核心技术。使用STL算法库进行升序排序,示例代码如下。vector<int> bb{4,2,1,3,5};so...
2021-12-23 17:04:24
625
原创 STL容器类和迭代器
STL容器类介绍容器,顾名思义就是盛放东西的东西,如盛饭的饭碗就是一个容器,这样的容器c++库也为我们提供了,只是不能用来盛饭。在程序中只有数据和数据处理方法,数据和方法结合在一起就形成了类或对象,在面向对象的语言中流行一切皆是对象,要有对象首先肯定要有类,用来存放对象的类就叫容器类,简称容器。计算机的运行时数据只能存放在内存中,而容器类就是用做容器的内存管理方法。容器的内涵就是数据结构(数据打包的方法)+算法(数据处理方法)。容器其实我们早就接触...
2021-12-18 21:01:09
303
原创 x210_imge.c校验头
校验头的作用:是为BL1(裸机中的源代码如led.bin)添加校验头。除了usb启动和uart启动外,其余的启动方式BL0都会对可执行文件进行校验。 以0x20000000为起始地址的前16个字节(结束地址0x20000010)用于存放校验头。 实际不管是usb还是sd卡,被拷贝到SRAM中都有校验头,只是usb方式启动时,bl0不管,字节跳到20000010开始执行。 校验头各地址的作用:第一个字节(0x20000000):校验头的大小,固定为16byte...
2021-12-16 09:12:44
122
原创 ARM汇编指令集
汇编特点LDR/STR架构:CPU不能直接处理内存,只能读寄存器,因此需要将内存的内容拷贝到寄存器后再处理。LDR(load register):内存->寄存器;STR(store register):寄存器->内存;8种寻址方式寄存器寻址: mov r1, r2 //把r2的内容移动到r1; 立即寻址: mov r0, #0xff00 //把数字0xff00移动到r0; 寄存器移位寻址: mov r0,r1,lsl#3 //把...
2021-12-15 10:02:23
378
原创 s5pv210的工作模式
为什么需要多种模式, 操作系统需要。在s5pv210CPU中有1个用户(user)模式、6个特殊模式(systerm-系统模式,FIQ高级中断,IRQ-普通中断,supervisor-复位时进入该模式 ,abort异常模式;undef未定义指令模式);s5pv210寄存器:s5pv210内部共37个寄存器,除了通用寄存器外,在不同的模型下有自己特有的寄存器,这些寄存器用来保护本模式的运行状态,使其cpu跳转后不会复位,每个模式的寄存器配置如下:普通模式:R0-R1...
2021-12-15 09:34:32
396
原创 存储类型学习笔记
存储器分类RAM:数据存储器,使用CPU总线连接,访问速度快,仅次于内部寄存器;ROM:程序存储器,使用特定协议进行访问,访问速度较慢。Norflash Cpu总线访问,价格高,容量小,一般用来用做启动,如BIOS,启动类的存储器容量要求不高;Nandflash :容量大,价格低,不能上电直接读取,需要初始化。EMMC(类似于SD卡)外形呈现芯片;iNand也是emmc的一种,只是生产厂家不一样;...
2021-12-14 10:25:21
323
原创 九鼎Study210嵌入式开发板刷机笔记
本刷机笔记是基于S5PV210的九鼎Study210嵌入式开发板。准备电脑通过串口线连接到开发板的UART2(靠近电源,与裸机不同)。usb线连接到开发板OTG端口。开发板接入电源,串口助手打开,开机,只要连接成功,无论开发板是否启动了uboot都可以收到板子串口打印的信息。破坏uboot开发板出厂时,板载inand内烧录有uboot,开发板上电后会默认读取inand的程序执行,如果想从sd卡启动需要先破坏inand的程序,使其启动失败后,...
2021-12-14 10:10:43
829
原创 c++模板编程
模板引入模板主要是用来解决类库与类库使用不是一个人,编写类库时,不能确定使用类库的人会传入什么类型的数据,而做的一个类型抽象,编译器根据具体调用类库的时候,调用者传入的参数自动推导出数据类型,来替换类库中的数据类型。template关键字定义一个模板,typename关键字指定模板类型抽象名称。示例如下:template<typename T> void myswp(T &a,T &b) //交换数据{ T temp; temp=a;...
2021-12-13 10:22:31
3269
原创 uboot基础
为什么需要uboot嵌入式linux的启动与android启动阶段相同,上电后开始执行BootLoader(bootloader的种类有很多但99%都是使用的uboot),uboot初始化ddr和flash,将flash中的系统(OS)读取到ddr中,再跳转到ddr中启动OS,完成后uboot就停止了。uboot到底要干什么自己要能启动,所以uboot以汇编开始,后去构建c的环境;终极目标就是启动操作系统内核,并给内核传参,由于两则工作的时间段...
2021-12-10 09:21:32
2278
原创 嵌套与局部类
嵌套类嵌套类,就是类中再定义了一个类,外面的叫外围类,内部的叫内部类,如下示例,外部类与内部类各有自己的权限,且遵守传统权限规则,两者的友元函数仅在自己的类中有效,嵌套类可以用来隐藏类名,减少全局标识符,限制用户使用内部类来创建对象,以提高抽象能力,还可用来强调两个之间的主从关系。class a{ public: class b { public: void func(); }}局部类...
2021-12-09 10:29:05
432
原创 C++的友元函数和友元类
友元函数在c++中对类的成员设置了保护,如private和protected是不允许外部访问的,有时候有一个外部函数就是需要访问,为了解决这个问题,c++开了个后门,就是友元函数,友元函数就是将外部函数在类中进行申明,声明时前面添加friend关键字,将其声明为类的友元函数后就可以任意访问类中成员。示例如下:class person{ public: string name; private: i...
2021-12-09 10:17:56
757
原创 C++静态成员
staticstatic这个关键字在c中有两个完全不相干的两种语义,在函数局部用来修饰局部变量,函数前面用来将函数的作用域限定在本文件中。为了尽可能的减少关键字,所以c++又给static定义了第三种完全不相干的语法,在类中用来修饰静态成员。static用在成员变量,那么就是静态成员变量;static用在成员函数,那么就是静态成员方法;static成员实例化经过static修饰后的成员属于类本身而不属于对象,在定义对象的时候不会去实例化静态成员...
2021-12-09 09:40:08
254
原创 运算符重载
从函数重载说起函数重载是在一定的作用域内,多个名称相同,但是参数不同的函数重载,在编译时由编译器根据给的参数类型来决定调用哪一个函数,这个过程被称为“重载决策”,重载的本质还是多个独立的函数,函数重载发生在编译过程,与运行无关,函数重载的意义就是避免我们给函数乱起名,也是为了方便编写类库覆盖各种操作,函数重载也是一种语法糖。什么是运算符重载我们平时用到的算数运算符如+、-、×、÷和关系运算符>、 =、 < 就是典型的可以运算符重载的符号,然而并不是...
2021-12-06 09:49:30
202
原创 c++继承与多态(下)
派生类同名处理隐藏redifine当我们在派生类中写了一个与基类同名、同参的成员方法时,编译器不会报错,当我们通过派生类定义的对象去访问重名函数时,会访问到派生类的那个函数,这种现象叫做“重定义”有时候也叫“隐藏”,实际上在派生类中两个函数都存在,只是在不同类域名中,新成员方法会隐藏掉旧方法,这个是当然,如果旧方法隐藏新方法,那还要新方法干嘛。访问被隐藏成员的方法 如果想要访问被隐藏的方法,可以将派生类强制转换成基类的类型,再去调用,编译器会以为是...
2021-12-03 11:52:04
161
原创 linux常用命令
快速打开终端快捷键:ctrl+Alt+T可执行文件运行./文件名.扩展名(必须有可执行权限)source 文件名.扩展名lslist使用列表把当前文件夹下所有文件显示出来ls -a 显示所有文件,包括隐藏文件ls -l 以详细信息显示ls -a -l、 ls -l -a、 ls -la、ls -al 四种方式都是可以注意:显示的大小不是文件内容的大小,需使...
2021-12-02 09:27:09
159
原创 linux基础
什么是linuxLinux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由芬兰人林纳斯于1991年10月5日首次发布,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版,如debian、ubuntu、centOSlinux中权限表示&管理Windows中有普通用户和Administrator,linux有普通用户和root用户,特权用户是系统的管理员,对系统内所有文件具有操作权限。每个普通用户只能处理自己的文...
2021-12-02 09:11:33
1287
原创 nfs服务器搭建
概述NFS:Network File System(网络文件系统),NFS只是一种文件系统,本身并没有传输功能,是基于RPC协议实现的,为C/S架构。也就是说,NFS也只是文件系统而已,与jffs2,yaffs,ext4等是一类东西。但是NFS的特殊之处在于,它可以通过网络来挂载文件系统,而不用烧写到设备上,从而方便我们调试。这就跟早期的网吧里使用PXE启动来搭建无盘系统一样:每台电脑并没有安装硬盘,而是直接通过PXE启动服务器上的系统,看起来每台电脑都有硬盘,其实都是挂载服务器上的...
2021-11-30 10:37:56
423
原创 c++继承与多态(上)
什么是继承儿子继承父亲的财产,父亲的东西就是儿子的东西,这就是继承,在c++的类中把父亲叫做基类或父类,儿子叫做派生类或叫子类,继承是c++原生支持的一种语法特性,是c++的面向对象的一种表现。就像儿子继承父亲的财产一样,派生类可以瞬间拥有基类的所有(有权限的情况下)属性和方法,继承的出现本质上是为了解决代码的复用,类在c中可以理解为结构体,派生类可以理解为结构体包含结构体。继承语法如下:class 派生类名:权限控制 基类1,访问控制 基类2,访问控制 基类3{成员变量和成员...
2021-11-29 09:48:53
275
原创 类的权限控制
拷贝构造函数当我们定义一个普通类型的变量时,可以直接赋初值,也可以间接赋初值,如下:int a = 7;//直接赋初值初始化int b=a; //间接赋初值初始化c++极力想让我们在操作类的时候也有操作普通变量一样的感觉,所以类的初始化也给了直接初始化和间接初始化,示例如下:class person p1(“hdz”,32,ture); //直接初始化class person p2=p1; class person p2(p1); //间接初始化,...
2021-11-25 11:50:19
469
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人