自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux应用(五)必备小技能{动态库与静态库}

如果是初学者,建议先跳过概念,对比什么的,直接看库的生成和使用,直接看用法才是初学的正确姿势;概念什么的都是复习,深入理解才要看的;天启四骑士:我愿理解为:预处理所有#代码,把所有C文件编译成汇编文件,把所有汇编文件汇编成二进制可执行文件,最后把所有二进制文件链接在一起形成一个文件;也就是说,在Linux中,命令ldd+可执行文件名,即可查看这个文件依赖的所有库;在用file+文件名,可以查看每个库的具体信息,可知是静态库还是动态库;当然在Linux当中,以.so为后缀的是动态库,以.a为后缀的是静态库,

2022-07-01 20:23:25 830

原创 Linux应用(四)socket网络编程

如果你想看编程接口,请不要看这章,本章内容繁杂直接劝退;socket有流式SOCK_STREAM和数据报SOCK_DGRAM两种,前者用于TCP模型,后者用于UDP模型;是一种可靠的、双向的通信数据流,TCP协议能够使数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送;SOCK_STREAM 有以下几个特征:数据在传输过程中不会消失;数据是按照顺序传输的;数据的发送和接收不是同步的(有的教程也称“不存在数据边界”)。数据报套接字是一种不可靠的、不按顺序传递的、以追求速度为目的的套接字

2022-06-25 12:39:28 892 2

原创 linux应用(三)多线程编程

想要编程来让linux系统“同时”执行多个任务,一种方法是使用多进程,也就是我在执行一个程序,哎,我又开一个程序,操作系统你让它俩“同时”运行;这种方式可以,但进程间的切换开销大,通信和同步较为复杂,不合适;我想实现的是,就开一个程序,这个程序的不同代码段可以“同时”运行;这就要用到多线程;线程是轻量级的进程;进程是程序的一次动态执行,但是真正执行代码的是线程;操作系统为进程分配资源,进程中的线程来执行任务代码;一个进程至少包含一个线程,即主线程;其他线程(代码创建出来的)为子线程;注:线程库不在lin

2022-06-25 12:39:01 420

原创 Linux应用(二)多进程编程

进程是程序的一次动态执行过程,是程序执行和资源管理的最小单位 。程序是静态的,是一些保存在磁盘上的指令的有序集合,没有任何执行的概念;进程是一个动态的概念,它是程序执行的过程,包括创建、调度和消亡;注意:程序一旦被运行,就会产生一个进程,并且会被每一个进程分配一个0-4G(32OS下)的内存空间,分配空间大小和操作系统的位数有关。32位系统可以对应232 个地址,那么就有232 字节=4X1024X1024X1024个字节;C语言内存分配图:进程控制块(pcb):PID,进程用户, 进程优先级,文

2022-06-25 12:38:05 807

原创 Linux应用(一)文件与IO

常规文件 r目录文件 d字符设备文件 c块设备文件 b管道文件 p套接字文件 s符号链接文件 l系统调用就是操作系统提供的接口函数。如果我们把系统调用封装成库函数就可以起到隔离的作用,提高程序的可移植性。Printf就是库函数然后调用了系统调用才在显示器上显示字符。标准I/O由ANSI C标准定义,标准I/O通过缓冲机制减少系统调用,实现更高的效率有三个预定义的流,在每个进程中自动创建:stdin;stdout;stderr;它们都是FILE流结构体;打开文件:返回值:出错返回NULL,

2022-06-25 12:12:28 319 1

原创 嵌入式arm(六)关于中断和按键中断示例

本文只供参考按键中断程序示例,arm裸机编程始终不是最终的目标,能够完成简单的外设驱动,能理解裸机编程流程即可,要不求甚解,最后的目标还是系统移植,还是在linux下编程,所以不要对学不会裸机编程过于烦躁。异常的相关概念和响应,到底哪个放在前面好理解呢?我认为先知道异常的相应原理再去看概念容易被接受,但是不知道有哪些概念,又无法知道响应时到底在干嘛。所以本文还是按先概念再相应原理的顺序来安排,但是本文读者应该是有基础的开发者,因此可以自由翻阅,或者先大致浏览概念,仔细看过异常相应之后再来详细看概念。概述:

2022-06-03 16:29:25 1016

原创 嵌入式arm(五)裸机编程之简单的使用{看门狗}{PWM}{ADC}快速练习

使用开发板:FS4412,Soc:Exynos4412,内核型号:cortex-A9,架构:armv7;文档:开发板原理图,Soc数据手册;环境:文件编写及编译:Linux;下载程序:超级终端hypertrm;串口下载编译器:交叉编译器arm文章目录一 看门狗定时器1 什么是看门狗定时器1.1 看门狗是啥?1.2 看门狗有什么用?2 看门狗的使用2.1 查硬件电路2.2 查寄存器2.3 编程二 PWM驱动无源蜂鸣器1 粗略提一点概念2 查硬件电路3 查寄存器4 编程三 ADC的简单使用1 简单描述2

2022-06-03 16:29:10 656

原创 嵌入式arm(四)arm的UART串口知识与裸机编程

文章目录1 UART知识1.1 概念1.2 单工、半双工、全双工1.3 同步和异步1.4 串口通讯协议1.4.1 通信协议1.4.2 串口通讯帧数据格式1.5 波特率1.6 Soc中的串口框图2 UART裸机编程流程2.1 整体流程2.2 看原理图,查引脚2.3 看数据手册,查寄存器用法2.3.1 查GPIO2.3.2 查UART相关寄存器2.4 用C语言来编程2.4.1 使用串口向上位机发送数据2.4.2 使用串口回显并控制灯的亮灭1 UART知识1.1 概念Universal Asynchrono

2022-05-28 23:52:07 1323

原创 嵌入式arm(二)涉及的汇编指令及相关知识

arm开发中需要掌握一些汇编语言的知识,如:指令的格式,作用和用法;但不是要求用汇编去编程,而是通过学习汇编来掌握:机器指令的格式,指令在内存中是如何存储的,指令的执行过程,寄存器的变化。文章目录一 汇编语言是什么二 汇编语言的注释三 汇编语言的基本语法1、一 汇编语言是什么二 汇编语言的注释用@注释符;三 汇编语言的基本语法1、...

2022-05-28 15:49:22 528

原创 嵌入式arm(三)arm裸机程序点灯+流水灯+环境文件解释

本节我们用点灯来体验一下arm的裸机程序开发;cortex文章目录一 环境介绍二 简略了解SFR特殊功能寄存器三 裸机开发点灯的流程1 看硬件的原理图2 查手册配置Soc的引脚3 编程四 点灯1 查原理图1.1 查引脚连接1.2 看驱动方式2 查手册2.1 查找到的信息2.2 查找过程(手册截图)2.2.1 GPX1_02.2.2 GPF3_4、GPF3_53 编程3.1 点灯的C文件3.2 Makefile文件3.3 start.s文件3.4 map.lds一 环境介绍使用开发板:FS4412,So

2022-05-27 10:54:52 1283

原创 嵌入式arm(一)学ARM要掌握的预备知识(本篇文章持续更新)

文章目录一 关于arm1 arm的三种含义2 两种指令集2.1 CISC2.2 RISC3 arm公司4 arm型号4.1 什么是soc4.2 cortex二 计算机系统基本组成1 总述2 通过公交车理解总线3 两种总线结构3.1 单总线结构3.2 多总线结构3.2.1 DMA3.2.2 AHB高速总线 APB(外设)总线3.2.3 高速缓冲器cache4两种FlashNorFlashNandFlash一 关于arm1 arm的三种含义(1) 一个公司的名称 Advanced RISC Ma

2022-05-24 00:08:46 2650

原创 python基础(阅读需要C&C++基础){注释}{input}{切片}{基本数据类型}

文章目录一 python注释二 input()1 返回的值是string类型,运算需要强转1.1 输入时强转1.2 运算时强转2 提示字符串2.1 input里只能放一个参数3 一次性输入多个变量3.1 用split()获得字符串列表3.2 用map() 一次性强转列表三 切片1 python中的索引1.1 正向索引1.2 负向索引2 怎么切片/切片的表达式2.1 操作会切出包含起始元素,不包含终止元素的序列,2.2 索引方向和步进方向的问题2.2.1 两个索引的正负一样2.2.2 两个索引的正负不一样2.

2022-05-22 23:34:24 275

原创 C++多态中的动态多态:虚函数(前置要求:掌握C++基本语法)

文章目录概念(复习用)什么是多态什么是虚函数怎么实现(多态)多态代码及讲解(学习用)虚函数工作原理参考概念(复习用)什么是多态多态:在面向对象编程中,一种接口(函数)的多种实现(函数内容,作用域)即为多态;多态分静态和动态;静态是指在编译时就可以确定选择哪种实现,动态是运行时才确定选择哪种实现;静态有函数重载和泛型编程,如add()根据数据类型重载,在编译时就能选好哪一个;动态是虚函数,比如父类和子类中有同名函数delete_data(),在运行时通过基类指针指向的不同对象来选择到底调用哪个;C+

2022-05-22 23:32:08 205

原创 C++的重载函数和重载运算符(前置要求:掌握C语言)

文章目录一 为什么引入重载(一)函数重载(二)运算符的重载二 重载的定义(一)函数重载(二)运算符重载三 重载的代码举例(一)函数重载一点注意事项(二)运算符重载四 重载原理(一)函数重载原理五 参考一 为什么引入重载(一)函数重载对于功能相同但是处理的数据类型不同时,我们需要针对不同类型分别写不同函数;但是C语言中函数名不能重复,还需要花式起不同的名字;比如两个数相加的函数,int和int,int和flo

2022-05-22 23:31:52 222

原创 C++中的etc__C语言语法扩展{默认参数}&{new和delete}&{命名空间}\\\(前置要求:掌握C语言)

文章目录一 默认参数1、理解定义2、注意点二 new & delete一 默认参数1、理解定义在定义函数时,可以在形参后面加上赋值;表示这个形参有一个默认值,如果调用函数时不传实参,则形参取默认值;#include <iostream>using namespace std;int add(int a = 1, int b = 2){ return a+b;}int main(){ cout << add() << endl;;

2022-05-22 23:30:51 307

原创 C++基础__类的基本组成{访问权限}{this指针}{构造函数}{析构函数}{static静态成员}

文章目录一 this指针类成员初始化问题:方案一:不在构造函数中初始化,而在主函数中访问;方案二:使用this指针二 构造函数一 this指针在一个类中有成员变量和成员函数,在成员函数中,因为无法在定义类的时候事先知道实例化对象的对象名,也就无法对将来的对象操作,也就是说,类定义一个对象,在这个对象的成员函数中无法操作对象本身。例如类成员初始化问题:先看下面的代码using namespace std;class a{public: int b; a(int b) {

2022-05-22 23:29:53 250

原创 C++中“引用”的使用说明(前置要求:掌握C语言)

1、引用是变量的别名,没有新变量,只是多了一个新的名字;我的理解是:定义一个变量,是向内存中申请一块空间,比如int a;则申请一块int类型大小的空间,这个空间有一个地址,用a这个名字去映射这个地址,于是使用a就能操作这个地址上的数据,看下面的代码,先定义变量a;再定义b引用a;再定义c引用b;#include <iostream>using namespace std;int main(){ int a = 10; int &b = a; int

2022-04-20 19:45:42 1335

空空如也

空空如也

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

TA关注的人

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