自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (1)
  • 收藏
  • 关注

原创 字幕循环显示原理

/* 移动显示方法 */核心思想其实就是反过来思考,现将想要显示的buffer填充好,然后移动屏幕,就好像我们小的时候玩的那种比色卡,中间有一段镂空,屏幕就代表了这个角色。/* 本例子以Lcd1602举例,单实现方法通用 如有更好的办法,欢迎交流讨论 *///首先创建一个数组,数组的两边设置缓冲区,缓冲区大小即为屏幕宽度char movebuffer[16 + strlen(str) + 16];char index = 0,i = 0;char str[] = "Welcome"; //对数

2021-01-05 15:14:26 417

转载 Linux 添加环境变量的五种方法

对所有用户所有shell都生效, 需要root权限(管理员常用)只对某个用户的所有shell生效,只需要用户权限即可(用户常用)修改PATH变量,在变量字符串末尾加:和 YOUR_PATH。在登录界面进入命令行模式:按组合键 alt +ctrl+f1。只对当前shell生效(shell脚本中常用)修改为正确配置,或者直接删除为空。打开environment文件。

2023-04-26 19:29:49 11109

原创 嵌入式学习笔记-uboot第一阶段分析

1.通过链接脚本,我们可以定位到_start:这个标号,这个标号位于Start.s文件中以下是 _start:的部分代码.globl _start_start: b reset ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ldr pc, _data_abort ldr pc, _not_used ldr pc, _irq ldr pc, _fiq2.之后程序进入

2022-05-25 23:11:16 207

原创 在linux下搭建tftp服务器遇到的一些问题

最近在学习uboot系统移植,总结下过程中遇到的问题开发板通过tftp服务器 读取主机中的内核文件 完成将内核加载到开发板flash的过程1.开发板ping通主机这个阶段遇到的主要问题就是虚拟机的联网问题,在通过/etc/networking/interfaces 设定好虚拟机的ip地址,网关,子网掩码,完成开发板ping通主机的环节后,将虚拟机网络连接选项切换回nat模式无法征程上网解决方法是,将网络连接设计设定为自定义模式,并选择自定义模式中的nat模式,重启网卡,解决解决过程先是尝试pin

2022-04-30 11:05:57 683

原创 c++学习笔记

1.namespace 命名空间1.1命名空间的三种声明方式using namespace;using namespace::func1;namespace::func1();

2022-03-16 10:16:16 1179

原创 2021.1.25学习总结

1.python部分了解了函数定义,函数返回值,函数的参数和默认参数的概念def func(int a,int b=2)return a,b//如果想创建一个空函数,则在函数缩进部分打上pass//在函数返回多个值时,实际上返回的是一个元组类型的数据2.编程部分未进展3. 嵌入式系统部分仅完成了数据拷贝,没来的及完成makefile部分...

2022-01-25 00:33:41 67

原创 嵌入式学习笔记-如何反汇编分析问题

文件类型汇编文件的后缀名一般是.s,反汇编文件的文件后缀名为。dis文件这两个的后缀名是取其对应英文单词的首字母 汇编 assemble 反汇编 disassemble 因.a 被用作静态链接库类型使用,所以取.s为文件名后缀反汇编文件必须从可执行文件.elf文件中的出, bin文件虽然也是二进制文件,但是在编译的过程去除了例如像_start这样的文件标号,无法被反汇编成汇编程序反汇编程序的指令为objmp?...

2021-07-15 22:11:58 530

原创 嵌入式学习笔记-shell是个什么东西

shell是什么shell是一种脚本语言什么是脚本语言脚本是由单词script翻译来的,在用到计算机前这个词的意思是剧本,由于脚本语言与非脚本语言的最大区别就在于是否要编译后执行,脚本语言在执行前是一句一句解释着运行的,这就有点像在拍摄时剧本的作用,一句话对应着一个动作的感觉,所以也回称脚本语言是解释运行的但实际上程序都需要转化称二进制才能被机器所理解,其他语言是先将写好的程序全部编译连接完成,然后把他们全部放到芯片里去,而脚本语言则大部分是调用已写好的程序来执行,了解shell发明的历史可以发现

2021-07-11 09:49:58 356

原创 LCD屏幕驱动原理

从接口上看,屏幕可以分为并口屏和串口屏,从显示上有LCD和OLED屏并口屏,有8bit,16bit,24bit等,代表了数据线的个数,每根数据线表示一位数据,由屏幕接收并显示,RGB并口屏(8080)驱动:并口屏是一次传输一个字节,共8个数据接口,每个端口传输一个字节的一位,这样一次可以传输一个字节,串口屏则是通过时序单线传输屏幕的命令和数据均通过并口传输,并通过设定RS引脚电平高低选定此次输入的是命令还是数据...

2021-06-03 21:30:07 2955

原创 嵌入式学习笔记-Makefile的制作和使用

首先我们需要知道makefile是什么makefile是一个用于帮助我们编译的文件,使用makefile可以简化我们每次的操作makefile的组成目标依赖命令目标决定了那条命令将被执行,依赖就像原材料,是输入的参数不过最终完成工作的还是makefile中已经写好的指令通过使用make指令,便可以实现指定目标下的命令一个makefile中可以有多个目标,可以使用make命令执行当前目录下的makefile,在使用makefile的过程中只需要在后面加上目标便可以执行对应程序在没有特意指.

2021-05-20 12:14:17 216

原创 嵌入式学习笔记-虚拟机环境搭建

虚拟机与Ubuntu系统Ubuntu系统是一款以linux为内核设计的一款操作系统共享文件夹 VMTools 与samba服务器共享文件夹是一个可以实现在windows和linux之间进行文件交流的文件夹,当想要windows中的文件传到linux中时,就可以使用这个文件夹不过在某些情况,可能存在无法使用的情况,这种情况可能就需要使用vmTools这个工具了?共享文件夹可以直接在虚拟机内进行设置,在设置中选择开启共享文件哎i你家...

2021-05-06 06:56:39 225

原创 嵌入式学习笔记-使用交叉编译工具链的几种方法

1.当想要通过已安装好的交叉编译工具链进行编译时,可以使用文件名使用但是每次都需要输入文件路径这点又比较麻烦,所以在实际使用中,往往会通过在PATH中添加环境变量的方式来实现只需要输入文件名就可以直接使用所谓环境变量,实际上就是操作系统环境下的全局变量,如果想要添加环境变量,则需要在PATH下添加所需文件的绝对路径...

2021-05-04 10:13:17 269

原创 嵌入式学习笔记-关于刷机的二三事

主要需要的刷机方式有两种,一种是使用SD卡启动,一种是通过USB启动SD卡的启动需要先将原有程序中的uboot破坏,破坏之后要先通过九鼎的下载软件将uboot的bin文件加载到SD卡中这样当开发板上电后,210在boot选择阶段无法从emmc中...

2021-05-03 10:42:47 349

原创 嵌入式学习笔记-linux基础知识

apt -get指令apt -get install 安装软件apt -get remove 卸载软件通过系统内部的网址下载对应版本的软件该指令需要管理员权限,并且需要联网使用lsls -l 显示当前目录下的所有文件,并显示文件属性...

2021-04-18 21:32:26 91

原创 c语言学习笔记-关键字

auto定义变量为局部变量,在函数中定义变量时默认为autostatic定义静态局部变量,使用static修饰的变量将被放置到数据段定义函数类型,被static修饰的函数只能被本文件内的函数调用register告知编译器将尽可能变量存放到寄存器中,linux中就有一个变量被此关键字修饰-gd,被此关键字修饰的变量不一定能被放进extern外部声明,作用是告知编译器该变量、函数已经在别的文件中被定义了,类似于汇编中的EXPORTtypedefrestrict..

2021-03-19 23:37:03 119

原创 c语言学习笔记-内存管理-linux的内存映像

程序在内存中的存储形式程序存储在flash中程序在内存中主要分为以下几段:代码段,数据段,只读数据段,bss段,堆,栈,文件映射区,内核映射区(操作系统内核)程序一般存放在代码段,在linux中又称为文本段数据段存放的一般是静态变量和被初始化为非零值的全局变量bss段存放的是被初始化为零的全局变量和未被初始化的全局变量有些添加了const的变量会被放到只读数据段(rom中,具体视编译器决定)文件映像区,系统会将线程需要的文件从外存中加载到文件映像区,例如在加载word时,如果改动后不保存,..

2021-03-16 22:42:51 112

原创 c语言学习笔记-静态库与动态库

函数库实质上就是没有经过链接的二进制文件,是开发人员编写的实现特定功能的多个函数一般函数库会包括两种格式的文件.a/.so 和.h编译后已经转化为二进制文件,将库添加到工程中,在静态库类型为.a动态库类型为.so静态库和动态库都属于函数库,两者的区别在于,当使用静态库时,调用库内函数时,编译器会从库中找到该函数并将其链接到调用的位置,在使用动态库时,当使用库内函数时,编译器会从库中找到函数然后连接到代码段的某一块位置,调用处会跳转到加载的哪一处运行字符串库以及数学库//自己实现me..

2021-03-13 15:51:55 225 1

原创 c语言学习笔记-字符串

c语言中的字符串c语言中没有字符串类型,所以c中的字符串均是通过指针或数组使用的,在数组中字符串是以字符的形式存储的,字符串的内容在编写程序时是定好的,存储在内存的代码段,字符串的起始和结束通过指针访问,以\0结束,\0并不属于字符串内容,仅作为结束符使用‘\0’ ‘0’ 和 0文本格式和二进制格式\为转译字符,作用是将?文本格式转换为二进制编码格式所以’\0’和0是相同的,在内存中都是以二进制存储的0'0’是文本格式的0,是以二进制存储的48...

2021-02-27 21:41:14 149

原创 c语言学习笔记-函数

函数的实质函数实质上就是一段能完成特定功能的程序,这段代码是连续的,起始地址由函数名给出为什么要发明函数c语言是一种高级语言,已经有了程序模块化的雏形,通过函数,可以完成指定的功能,只要这个函数不涉及到全局变量和硬件相关,都是只要复制粘贴即可使用的函数的使用方式使用函数有三要素,声明,定义和调用函数声明,是指将函数原型放在调用前的做法,目的是为了让编译器知道有这个函数,在函数进行编译的过程中,编译器的声明记录表会将遇到的函数声明都记录下来,这样在函数调用的时候,就在表中查询是否存在此函数,如果.

2021-02-27 21:26:34 178

原创 c语言学习笔记-预处理

编译的几个阶段我们平时使用的编译器,其实准确来讲应该叫编译工具链,因为其中包括了不止一种编译器,他们之间相互衔接,完成将程序转化为二进制代码的功能主要分为4个阶段,预处理 .c 汇编.s 编译.o 链接 四个过程预处理指令#include ,#if,#end,#define都是预处理指令预处理作为编译的第一个阶段,其作用是将文件中的包含指令添加到文件中宏定义...

2021-02-26 23:12:25 102

原创 c语言学习笔记-共用体,大小端,和枚举

共用体是c中的一种数据结构,他的定义方法和使用方法与结构体相同,只需要在定义类型时将struct换为union即可与结构体不同的是,联合体中的内存空间是所有成员共用的,公用体的大小取决于共用体中最大的成员大小,共有体没有对齐机制,即使当联合体最大成员大小不足4字节的倍数,编译器也不会自动填充对齐使用联合体一般只是为了方便开发者阅读,其成员类型代表了将会以何种方式解析这段内存数据,同样的使用强制类型转换也可以做到...

2021-02-24 20:30:19 160

原创 C语言学习笔记-结构体和内存对齐

结构体是一种数据结构,其特点是可以包含多种类型的成员,结构体的数据对齐在结构体内,不是每个成员都只占其自身类型大小的,原因是结构体为保证运行效率

2021-02-22 17:49:40 258

原创 c语言学习笔记-内存02

栈特性1. 自动分配2. 脏内存3. 反复使用4. 临时性堆在有操作系统的平台上面,堆由对内存管理器管理特性主动申请脏内存需要释放临时性大块内存使用流程申请-检查是否申请成功-存入数据-释放使用这段内存空间前,最好先用memset将内存清一下零再使用在使用堆内存的过程中,一定不要丢掉申请的内存指针,否则这块内存得不到释放,就会发生内存泄漏堆中的内存是按块分配的,在gcc中,最小可申请的空间是16字节,而且在c语言中,越界使用堆内存是不会报错的,除非申请的空间超过.

2021-02-13 18:18:53 138

原创 c语言学习笔记-二重指针与二维数组

二重指针二重指针本质上也是指针变量,其占用空间大小也为4个字节,只是指向的对象必须是一重指针,这种特性是由编译器决定的,以避免出现错误使用而不自知的情况,并减少开发者辨识的复杂度二重指针经常用于传参中,改变一重指针的指向地址二维数组二维数组从内存上来看,与同等大小的一维数组没有什么区别二维数组由n个一维元素构成,而一维元素又由j个二维元素构成例如a[2][5] 救赎由两个元素构成,这两个元素每个都包括5个元素二维数组的指针表示方法了解了上面二维数组构成,就可以对照一维数组的方.

2021-02-13 10:14:17 557 1

原创 c语言学习笔记-指针02

变量定义的判断方法优先级最高的运算符 . -> () []int *p[5]; / int (p)[5]; / int (p[5]);由于[] 的优先级要高于 所以第一个和第三个都是指针数组,第二个由于使用了小括号,变量先与结合,所以该类型是数组指针,即指向一个有五个int型元素的数组的指针int (*p)(void); / int *p(void); / int (p[5])(void) / int ((*p)[5])(void)第一二个可以明显看出都是函数指针,第三个是一个函数指针..

2021-02-12 17:45:41 139

原创 C语言学习笔记-指针

指针的实质就是变量普通变量中存储的是各种类型的数据,指针变量中存储的是指向变量的地址,普通变量通过内存地址进行访问并改写内存中的数据,指针的目的是实现间接访问,就是实现CPU的间接寻址使用指针的三个步骤,声明,关联变量,解引用左值与右值,左值代表内存空间,右值代表值...

2021-02-10 23:06:11 205

原创 嵌入式学习笔记-汇编常用符号与伪指令

@:.伪指令前面通常都带一个点,以显示出于指令的不同.globe.start.short/.long/.word.end.include.ldr ldr既有指令也有伪指令,区别在于使用ldr指令有一些需要注意的点,如合法立即数非法立即数,而使用伪指令则不存在这种问题,因为编译器会将你输入立即数的转换成为合法的方式加载到寄存器补充:合法立即数与非法立即数,由于一条指令只有32位,而指令又要存放其他数据,所以不能所有为位数都用来存放立即数,arm规定只能附带8位立即数,但这个..

2021-01-26 20:34:16 857 1

原创 嵌入式学习笔记-汇编指令03

协处理器(coprocessor)协处理器是用来减轻cpu负担只执行特定指令的处理器arm微处理器可支持多达16个协处理器,用于协处理操作但是一般只附带最后一个处理器cp15通过这两个指令mcr/mrc 与协处理器进行指令传输访存指令详解 在只需要进行单字传输时,用ldr和str进行访存即可当需要与内存见的大量信息传输时就需要用到ldm/stm两条指令了ldm/stm r0,{r1,r2,r3}指令后缀ia (increase after) 先将数据写入,再偏移地址ib (i..

2021-01-21 20:32:29 289

原创 C pime plus《字符串与字符串函数》学习总结

字符串的声明形式数组char p[]={“Hello”};或char p[6]={‘H’,‘e’,‘l’,‘l’,‘o’,’\0’};指针 char* p=“Hello”;字符串的特点使用指针声明字符串时,字符串存放于程序的代码段,且为只读形式,所有指向该字符串的指针的地址都相同...

2021-01-21 15:06:08 110

原创 嵌入式学习笔记-汇编基础02

数据处理指令cpsr指令分支跳转指令访存指令ldr/strldm/stmswp软中断指令

2021-01-15 22:31:58 256

原创 嵌入式学习笔记-汇编基础

汇编的指令与伪指令指令是cpu机器指令的助记符,通过编译会得到机器码伪指令是编译器为辅助引导编译过程而加入的指令,没有实际作用两种风格的ARM指令官方推荐的大写风格 同时也是windows平台用的风格gcc风格则是小写风格arm通过寄存器名寻找通用寄存器ARM汇编特点读-改-写 LDR与STR架构RISC架构是无法直接读取内存内的数据的,这也是与CISC不同的一点,所以RISC的芯片想要读取数据就要通过芯片内部的寄存器通过“读改写”的方式间接访问内存,即cpu先让寄存器先将对应的内.

2021-01-12 22:27:51 444 2

原创 嵌入式学习笔记-1.2节以学部分回顾

1.2.1:讲解了程序是如何演化的并一步一步演化到今天的多种语言的,从01纸条打孔,到汇编指令替代二进制,到C语言,再到如今的java,python, c++,其语言效率递减,但编程复杂度降低,可合作性移植性提高1.2.2 &1.2.3:RISC精简指令集,CISC复杂指令集,复杂指令集的硬件复杂,因为要通过硬件开发实现大部分的功能,而程序员只需对流出的指令惊醒变成即可,逻辑部分少于精简指令,而RISC的指令集可能只有二十几条,其余的可能都要通过程序实现,灵活度更高...

2021-01-09 18:31:06 174 2

原创 RGB565 YUV转换程序

由于RGB565为16位数据,故每个像素点占用两个字节大小,所以在使用第一个函数时,需要将图片像素的当前地址和下一位的地址都送到函数中,或者可以使用第二个封装后的函数,只需要设定图片的显示范围即可void RGB5652YUV(uint16_t source1, uint16_t source2, uint16_t *dest1, uint16_t *dest2){ uint8_t R, G, B, Y0, Y1, U0, V0, U1, V1; R = ((source1 &

2021-01-09 14:23:39 998 1

原创 FreeRTOS学习笔记-静态任务的创建-0105

当FreeRTOS使用静态内存分配方式创建任务时,必须实现两个函数vApplicationGetIdelTaskMemory()和vApplicationTimerGetTaskMemory(),这两个函数用于实现用户设定的空闲任务与定时器任务的栈大小,必须有用户自分配,内存分配方式可以通过宏configSUPPORT_STATIC_ALLOCATION来配置动态创建会自动分配 需要定义的也只有 任务栈大小,优先级大小,任务句柄这里主要整理的是静态任务的建立方法 1.需要从创建的全局变量有 任..

2021-01-07 20:51:58 292

原创 嵌入式学习笔记-0104

外部存储器接口篇外部存储器分两种 1.Flash NandFlash/oneNand/NorFlash/DDR/SSD /emmc/SD card/TF card 2.硬盘 SATA硬盘,SATA是接口,机械式存储

2021-01-05 10:37:24 75

原创 FreeRTOS学习笔记-0104

FreeRTOS任务的基本概念:任务是竞争系统资源的最小单元在任何时刻都只有一个任务会得到运行,而运行那个任务则由调度器来决定调度器会在任务切入和切出时保存上下文环境,将任务当前的状态和各种变量参数及寄存器值进行压栈,这样当任务再次运行时就能正确回到切出时的状态由于栈是SRAM上的一块空间,所以一个实时操作系统能运行多少任务取决于系统可用的SRAM。任务的栈与栈之间是相互独立的,系统可以决定任务的状态,同事还能运用内核的IPC(进程间通信)资源,实现任务之间的通信FreeRTOS可对任务

2021-01-05 10:26:14 184

原创 C语言自学笔记—typedef与#define的区别

定义的类型不同,typedef定义的是类型,而非变量,define却正好与之相反typedef的解释是由编译器,而非处理器执行typedef虽执行范围有限,但在范围内比define要更加灵活,例如在指针类型的定义上,typedef可以定义一个指针类型,而define只能定义一个指针...

2020-04-10 10:21:12 347

空空如也

空空如也

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

TA关注的人

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