自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 嵌入式学习硬件I.MX6ULL(七)串口

默认480MHz,6分频后为80MHz。不用设置,但最好还是看下时钟树。

2025-08-23 01:34:14 801

原创 嵌入式学习硬件I.MX6ULL(六)时钟树 EPIT GPT

增强型周期中断定时器,(1)时钟源可选的 32 位向下计数器;(2)12 位的分频值;(3)当计数值和比较值相等的时候产生中断,(1)这是个多路选择器,用来选择 EPIT 定时器的时钟源,EPIT 共有 3 个时钟源可选择,ipg_clk、ipg_clk_32k 和 ipg_clk_highfreq,ipg_clk我们之前已经配置好了——66MHz;(2) 这是一个 12 位的分频器,负责对时钟源进行分频,12 位对应的值是 0~4095,对应着1~4096 分频;

2025-08-22 23:06:04 1019

原创 嵌入式学习硬件I.MX6ULL(五)按键 中断 GIC OCP原则

2. PPI(Private Peripheral Interrupt),私有中断,我们说了 GIC 是支持多核的,每个核肯定有自己独有的中断。这些独有的中断肯定是要指定的核心处理,因此这些中断就叫做私有中断;3. SGI(Software-generated Interrupt),软件中断,由软件触发引起的中断,通过向寄存器GICD_SGIR写入数据来触发,系统会使用 SGI 中断来完成多核之间的通信。<c>是条件可以省略,<Rt>是目标寄存器,读协处理器<coproc>的某个寄存器的值到<Rt>中。

2025-08-18 12:52:27 1219 1

原创 嵌入式学习硬件I.MX6ULL(四)LED C和SDK BSP管理工程

一个imx6ul文件夹,用来保存NXP提供的相关库,如cc.h、fsl_common.h、fsl_iomuxc.h 和 MCIMX6Y2.h 这四个文件;在bsp文件夹中创建led.c和led.h,将有关led的函数分别放在这两个文件里定义和声明;到目前,我们将所有的源码文件都放到工程根目录下,即使这个工程只是完成了一个简单的流水灯的功能,但是其工程根目录下的源码文件就已经不少了。库的意义在于将寄存器和对寄存器的操作用结构体和对应的函数加以封装,大大提高开发的效率,提高程序可读性等。

2025-08-18 01:34:31 847

原创 嵌入式学习硬件I.MX6ULL(三)ARM启动代码 LED汇编

默认在Supervisor模式,我们先切换至Irq模式下,初始化sp,然后再切换至System模式,初始化sp,以后我们在System模式运行。(1)切换到模式cpsr,r0(2)切换到system模式。

2025-08-17 23:23:14 1081

原创 嵌入式学习51(二)串口 ds18b20

复位 -> 跳过ROM(CCH) -> 启动温度转换(44H) -> 延时等待 -> 复位 -> 跳过ROM(CCH) ->读取温度(BEH) -> 接收温度数据。(4)主机必须在读周期开始的15us内检测总线电平的高低,若检测到总线为低电平,则ds18b20发送了'0',为高电平,则ds18b20发送了'1'2、半双工:两个主机之间通过一根数据线传输,通信的主机可作为发射方也可以作为接收方,数据的传输方向是双向的,(同一时刻数据的传输方向单向)异步通信是指无需额外时钟线。

2025-08-16 02:28:48 901

原创 嵌入式学习51(一)led 按键 中断 定时器 PWM 蜂鸣器

中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的;当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而丢处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。2.中断源的定义请示CPU中断的请求源称为中断源(打断当前工作的事件)。51单片机的5个中断源​。

2025-08-16 00:19:50 776

原创 嵌入式学习硬件(二)汇编指令 模式切换 软件触发中断 ARM启动代码

8bit 常数范围(0~255),位移的步进值是以2为单位(即实际位移 2 * rotate 位),可以表示循环有以(0~30)偶数位: 0、2、4、6、8、10、12、14、16、18、20、22、24、26、28、30。V:该位是针对有符号数的操作,会在下面两种情形变为1,两个最高有效位均为0的数相加,得到的结果最高有效位为1;两个最高有效位均为1的数相加,得到的结果最高有效位为0;CMP比较指令用于比较两个寄存器的值或者比较一个寄存器和立即数的值,其原理是对待比较的两个数求差,看结果是否为0,

2025-08-08 00:25:58 1314

原创 嵌入式学习硬件(一)ARM体系架构

V:该位是针对有符号数的操作,会在下面两种情形变为1,两个最高有效位均为0的数相加,得到的结果最高有效位为1;两个最高有效位均为1的数相加,得到的结果最高有效位为0;注:汇编指令的s后缀,几乎所有的汇编指令都可以在指令后面加上s后缀,s后缀的含义是在指令执行过程中会更新cpsr寄存器的N,V,C,Z位。(1)ARM公司的ARM架构(收费) 该公司不生产芯片,只设计芯片,卖给别人授权。减法中运算结果的最高有效位从更高位借位时C=0。N:在结果是有符号的二进制补码情况下,如果结果为负数,则N=1;

2025-08-07 12:23:23 1273

原创 嵌入式学习系统编程(八)TCP

TCP : 传输控制协议 传输层。

2025-07-23 02:49:54 925

原创 嵌入式学习系统编程(七)网络基础 UDP

(4)传输层:传输的方式 UDP TCP 端口号 什么样的传输方式。(6)数据链路层:封装成帧,点对点通信(局域网内通信),差错检测 交换机 ARP 从这个目的地到下一个目的地。(1) 应用层:要传输的数据信息,如文件传输,电子邮件等 什么快递。HTTP:超文本传输协议(实现超文本(集视频、图片、文字于一体的文件类型)传输)

2025-07-23 02:06:20 675

原创 嵌入式学习系统编程(一)文件操作 标准IO

FILE本质是个结构体,包含文件的各类信息(多大,谁创建的,谁最后一次修改的)。eg : ====》stdio.h ===>stdio.c==>libc.so ==>/usr/lib so 动态库。man 3 xxx ===》查看xxx对应的标准库函数 所有C语言用的标准c库函数(win linux通用)man xxx == man 1 xxx ===>查看当前xxx命令。写到终端屏幕显示,如果是fp的普通文件则会写入到文件中。nmemb 要获取的数据块的个数,拷贝的数据块个数。

2025-07-21 03:08:56 1106

原创 嵌入式学习系统编程(四)进程

/进程创建 --- fork运行//1.跟父进程类似 事情//2.独立运行一个新程序 ---exec函数//3.运行多个不同任务结束正常结束//2.exit//3._exit异常结束//4.abort //信号//5.signal //发其它信号进程结束是两种特殊状态孤儿进程僵尸进程 --- wait/waitpid。

2025-07-19 03:16:08 1258

原创 嵌入式学习C语言(十六)结构体 共用体 枚举 typrdef 位运算

4.赋值和初始化赋值。

2025-07-12 00:49:16 912

原创 嵌入式学习C语言(十五)指针函数 动态内存分配 函数指针 指针数组 指针指针

拼接在后面,释放掉第一次申请的内存空间,输出拼接的字符串后释放掉第二次申请的内存空间。void sort(int *a,int len,int(*pfn)(int)) //第三个参数用来说明,你要比较 数的平方 还是其本身。2. int (*compar)(const void *, const void *))是一个函数指针。if(pfn(a[i]) > pfn(a[j])) //调用的函数比较。(*p)(a,b);返回的是一个指针,指向申请的内存空间(内存空间未初始化全是随机数)。

2025-07-11 18:59:22 1305

原创 嵌入式学习C语言(十四)字符型指针 void memcpy 数组指针

但不能对其进行修改,因为p指向的是字符串常量区,该区不能被修改。ps 对于char s[]="Hello";s在栈区,“Hello”在字符串常量区,该句代码会将"Hello"复制一份传递给s(在栈区),后边对其修改的都是在栈区的复制品。2.“Hello”本身也代表字符串常量首元素的地址,可以直接当参数进行传递。

2025-07-10 23:54:18 879

原创 嵌入式学习C语言(十三)指针 递归 迭代器 快速排序算法

2.具体实现过程: 第一轮,以a[0]为基准值,p同begin,q同endend从右往左找第一个比a[0]小的值,找到了就停下。二者指向的变量的值交换。(*p) ++:先得到*p指向的变量a[0],a[0]++的值没有变,但a[0]的值变了。* p ++ :使p指向下一个元素,即a[1],再指向*p,得到的还是a[0]的值。*(++p):先指向a[1],再取*p,输出结果为a[1]的值。++*p:先指向a[0],++a[0]和a[0]的值都加1;而++p,不仅表达式指向a[1],p也指向a[1]。

2025-07-10 21:08:36 925

原创 嵌入式学习C语言(十二)预处理命令 初识指针

1. #define 标识符 表达内容末尾没有分号2.无脑的文本替换,只换不算。3.大多具有全局作用域。4.为避免优先级问题尽可能多的加括号。return 0;1.#define 宏名(形参表) 宏的内容2.带参宏的每个参数不用指定数据类型。3.为避免优先级问题尽可能多的加括号。4.带参宏与函数的实现有本质区别(宏无脑替换,函数要保护现场恢复现场);5.带参宏是以消耗大量代码区空间来提高执行效率,代码没有复用性。

2025-07-10 03:01:29 650

原创 嵌入式学习C语言(十一)二维数组作为函数参数传递 作用域 可见性等 static auto register extern

1.不使用全局变量传参的原因:程序耦合性过高。2. 多次使用同一个数组时,可以将该数组定义在全局作用域中。3.

2025-07-09 23:32:54 1079

原创 嵌入式学习C语言(十)递归 一维数组作为函数参数 相关函数的等效封装

eg4 汉诺塔 该程序不崩溃是因为move函数不递归,只有hanoi函数才会递归。4.有些情况必须要用递归:遍历一个目录的所有文件以及所有文件的子目录,子子目录......。数组作为参数传递时传递的是数组的首元素地址,是指针传递,可在被调函数中修改主调函数。2.递归是特殊的循环,但会消耗大量的栈上的空间,使用时注意栈空间的消耗。分为直接递归调用和间接递归调用。3.递归的思路:要解决问题n,就先解决问题n-1.eg4 选择冒泡插入排序算法 二分查找算法的封装。eg9 atoi函数。

2025-07-08 23:16:34 692

原创 嵌入式学习C语言(九)函数及底层原理 五大区

1、一般形式:类型说明符 函数名(形式参数表列)//函数首部声明部分语句部分}//函数体类型说明符(返回结果类型),可以为所学的任何类型但不能为数组,即 int[]。,也可为void(无返回值).函数名命名规则同标识符命名规则。形参可以为void(无参数)。形参的个数无论多少,都要用逗号隔开,且每个都要单独说明类型。多个形参进行传递时,从右向左的次序传递。对于返回值:(1)如果函数无返回值,此时返回值是类型标识符,一般设计为void。

2025-07-08 21:26:32 454

原创 嵌入式学习C语言(八)二维数组及排序算法

/此时,a[0],a[1],a[2]为一个一维数组的数组名。2.a[0]为一维数组数组名,等价&a[0][0](整型变量的4个字节首地址);// 可理解为,有三个元素,每个元素都是一个二维数组。

2025-07-08 17:41:22 550

原创 嵌入式学习C语言(七)字符数组及相关函数

目录一、字符数组二、puts函数三、gets函数四、fgets函数五、scanf函数用作字符串的输入六、strlen函数七、strcpy函数八、strcat函数九、strcom函数十、练习 用来存放字符数据的数组是字符数组。 也具有连续性,有序性,单一性的特点。 char 数组名[元素个数] []为类型说明符 字符数组的初始化 char a[100]="helloworld";未被初始化的会被赋值为0. 数组名就是一个“容器”,可以不装

2025-07-08 03:24:05 889

原创 嵌入式学习C语言(六)一维数组的排序和查找

类型说明符 数组名[常量表达式];类型说明符可以是除 void 类型以外的任意类型,数组中至少有一个元素。[]仅仅为类型说明符,仅说明其为数组后边的数为0,而不是随机数仅定义未赋初值,全部为随机数。数组的长度可以省略。

2025-07-08 00:44:26 998

原创 嵌入式学习C语言(五)循环控制

2.for语句的一般形式中的“表达式1”可以省略,此时应在for语句之前给循环变量赋初值。注意,省略表达式1时,其后的分号不能省略。eg 与if构成循环 loop位语句标号,通过goto语句,可以到达loop所在代码的地方。3.continue是短路本次循环,跳过循环体下边未执行的语句,接着进行下一次是否执行循环的判定。2.可通过再次判断循环条件来判断一个循环是正常结束还是break跳出的 如下eg。1.goto语句为无条件转向语句,一般形式为:goto 语句标号;eg2 九九乘法表。

2025-07-07 18:40:45 273 1

原创 嵌入式学习C语言(四)选择结构程序设计

2、C语言逻辑:非零即为真(只有0表示逻辑假),例:i=-3,j=-6;输出结果为0(假),('<'结合方向自左向右),1、任何表达式都有数据类型,例:printf(“%lu”,sizeof(4>3));对于“或”,左操作数为真,不计算右操作数(提高程序执行效率);(2)无论多少个运算符,不管“与”“或”优先级,表达式自左向右看遇到一个可以得到结果的,后面的直接截断。(2)表达式1为真结果为表达式2,表达式1 为假结果为表达式3;eg i<0为真,++j为真,j>0为假,故t=0。

2025-07-07 17:06:32 758

原创 嵌入式学习C语言(三)输入输出函数

由于IO设备与cpu之间存在传输与接收速度不匹配,因此在IO设备中会存在一个缓冲区来接收cpu所传输的数据,该缓冲区以队列的数据结构形式存在,按照先进先出(FIFO)的原则,因此当输入数据格式不匹配时,则数据进入缓冲区队列,并且无法出队,此时就会进入死循环。2、scanf(“%d%d%d”,&a,&b,&c)该函数的作用是按照a、b、c在内存中的地址将a、b、c的值存进去,(&a,&b,&c必须用,隔开)。%s:输出字符串,例:printf("Hello %s\n","World!

2025-07-07 07:41:11 845

原创 嵌入式学习C语言(二)数据类型转换

t 它的作用是在输出中插入一个制表位(通常等同于4或8个空格),常用于对齐文本、创建表格化输出或分隔内容。1、左值leftvalue(又名:locatiable可定位的):能获得地址的为左值,所有的变量被称为左值,只能放在赋值运算符左边;2、右值rightvalue(又名:readable只可读的):不能被取地址的一定为右值,所有的常量被称为右值,只能放在运算符右边;(5)有符号短数据类型short向长数据类型long赋值会发生符号位扩展:原数为正数高位补0,原数为负数高位补1;

2025-07-07 05:17:46 460

原创 嵌入式学习C语言(一)数据类型

一、常量和变量常量是指在程序运行过程中,其值不能被改变的量。(define)变量是指在程序运行过程中,其值可以被改变的量。原因是在定义任意变量时,系统会为该变量在RAM中分配一段内存空间,当作该变量的实体,该空间会在变量用完之后销毁。标识符规则:由数字、字母和下划线3种字符组成,且第一个字符不能数字,区分大小写,不能为关键字(关键字会高亮)。

2025-07-07 02:04:38 821

原创 嵌入式学习ubuntu基本操作

ctrl shift t 新开一个终端 ctrl shift + 放大终端窗口 ctrl - 缩小终端窗口/有根目录和分隔符的两种意思 sudo加在命令前给超级用户权限相对路径:从当前路径出发来看 cd ../Music cd ../../xxxx绝对路径:从根目录开始 cd /home/linux/Music。

2025-07-06 22:04:49 193

空空如也

空空如也

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

TA关注的人

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