- 博客(24)
- 资源 (1)
- 收藏
- 关注
原创 第十三课: C数据结构--队列
什么是队列 队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将最后被删除的元素,因此队列又称为“先进先出”(FIFO—first in first out)的线性表。队列的特征特殊的线性表,先进先出(FIFO).1)数据:对于非空的队列,表头没有直接前驱,表尾没有直接后继,其
2021-07-18 18:24:45
150
原创 U-BOOT移植
善用对比软件beyond选取官方源码版本下载,配置编译1)指定交叉编译工具链2)指定CPU和board(参考最类似配置)3)编译实现串口数据信息输出跟踪运行路径串口输出网卡移植寄存器地址参数设置FLASH移植...
2021-07-18 16:30:54
111
原创 u-boot启动流程
uboot启动流程如下:第一条指令如何执行从FLASH执行,cpu不需要初始化,从固定内存读代码;初始化硬件,先后顺序如何1)关看门狗2)关中断3)关mmu,初始化各个bank4)设置时钟频率5)进入board_init_f()函数 (初始化定时器,GPIO,串口等,划分内存区域)如何加载内核先将flash的代码拷到内存(自搬移uboot到内存)性能提升汇编语言和C语言开发的;汇编阶段:设置为SVC模式,关闭中断、mmu、看门狗基本硬件设备初始化 // 时钟、串口、flash
2021-07-18 13:17:21
139
原创 bootloader移植相关概念
1、基本概念什么是BootLoader?BootLoader是硬件启动的引导程序,是运行操作系统的前提;在操作系统内核或应用程序运行之前运行的一小段代码。对软硬件进行相应的初始化和设定,为最终运行操作系统准备好环境。在嵌入式系统中,整个系统的启动项加载任务通常由BootLoader来完成。BootLoader 的特点BootLoader不属于操作系统,一般采用汇编语言和C语言开发。需要针对特定的硬件平台编写。在移植系统时,首先为开发板移植BootLoader。BootLoader不但依赖于C
2021-07-18 12:30:23
220
原创 第十二课: C数据结构--链式栈
链式栈 链式栈是一种数据存储结构,可以通过单链表的方式来实现,使用链式栈的优点在于它能够克服用数组实现的顺序栈空间利用率不高的特点,但是需要为每个栈元素分配额外的指针空间用来存放指针域。链式栈实现函数举例如下:typedef int datatype;typedef struct node{ datatype data; struct node *next;}listnode, *linklist;linklist linkstack_create();int linkstack
2021-06-27 20:48:30
167
1
原创 第十一课: C数据结构—栈
栈栈是在一端进行插入操作和删除操作的线性表(俗称堆栈),允许进行操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素称为“空栈”。特点:后进先出(LIFO)。顺序栈:顺序栈是栈的顺序实现。顺序栈是指利用顺序存储结构实现的栈。采用地址连续的存储空间(数组)依次存储栈中数据元素,由于入栈和出栈运算都是在栈顶进行,而栈底位置是固定不变的,可以将栈底位置设置在数组空间的起始处;栈顶位置是随入栈和出栈操作而变化的,故需用一个整型变量top来记录当前栈顶元素在数组中的位置。基本运算:创建空栈:
2021-06-27 19:33:45
78
原创 第十课: C数据结构—线性表的应用
线性表的应用多项式表示与相加结点类型描述typedef struct{float coef;int exp;}data_t;typedef struct node_t{data_t data;struct node_t *next;}linknode_t, *linklist;举例请参考下面链接:https://blog.csdn.net/weixin_42107106/article/details/82817061?ops_request_misc=%257B%2522requ
2021-06-27 17:29:57
92
原创 第九课: C数据结构—双向循环链表实现
**双向循环链表实现 ****1、双向循环链表的创建 **typedef struct node{ int data; struct node *prior; struct node *next;}distnode;dlistnode *dlist_create();void dlist_show(distnode *H);dlistnode *dlist_create(){}void dlist_show(distnode *H){}int ma
2021-06-27 16:58:38
81
原创 第八课: C数据结构—循环链表及线性表的应用
1、单向循环链表如果把单链表的最后一个节点的指针指向链表头部,而不是指向NULL,那么就构成了一个单向循环链表,通俗讲就是把尾节点的下一跳指向头结点。eg:设ra 和rb分别为两循环链表的尾指针,设计算法,实现表ra和rb的简单连接。2、双向循环链表...
2020-08-23 21:24:05
234
原创 第七课: C数据结构—单链表(三)
3、单链表的删除list_delete 删除第I个链表,我们需要先找到他的前一个结点(即他的前驱)。list_delete(linklist H,int pos){ linklist p, q; if(pos == 0) { p = H; } else { p = Getlinklist(H, pos-1); } if(p == NULL || p->next == NULL) {
2020-08-09 20:59:08
149
原创 第六课: C数据结构—单链表(二)
1、单链表查找第一种方法按照结点的位置查找;linklist_t GetLinklist(linklist_t h, int pos)linklist_t GetLinklist(linklist_t h, int pos){ int i = 0, j = -1; linklist_t p = h; if(pos < 0) return NULL; while(p->next && i < pos) {
2020-08-02 21:33:35
115
原创 第五课: C数据结构—单链表
1、线性表与单链表联系单链表是线性表的一种链式存储结构。2、单链表的结构因为链表是离散存储的,每一个结点之间通过指针来链接。所以要想创建一个非循环单链表,应当首先确定一个头结点,在确定一个尾结点,在中间不断的开辟新的结点并存储相应的内容。注意:本文中提到的头结点中不存储有效数值,尾结点的指针域为空,开辟新节点使用malloc函数实现。为了简便,在数据域中仅仅存储整型数据。开辟后的链表如图所示:线性表的链式存储结构typedef struct node_t{ data_t data;
2020-08-02 12:53:17
109
原创 第四课:C数据结构—顺序表实现
1、线性表的顺序存储结构线性表作为一种基本的数据结构类型,在计算机存储器中的映象一般有两种形式,一种是顺序映象,一种是链式映象;2、顺序表的存储特点(1)逻辑上相邻的元素ai,ai+1,其存储位置也是相邻的;(2)对数据元素ai的存取为随机存取或按地址存取;(3)存取密度高。3、顺序存储的实现在C语言中,一维数组中的元素也是存放于一片连续的存储空间中,故可借助于C语言中一维数组类型来描述线性表的顺序存储结构:#definde N 100typedef int data_t;typedef
2020-07-26 15:51:39
102
原创 第三课:C数据结构—线性表
1、线性表定义线性表就是零个或多个相同数据元素的有限序列。2、线性表的表示方法线性表记为:L=(D, R)3、线性表特征(1)在非空的线性表,有且仅有一个开始结点a1,它没有直接前趋,而仅有一个直接后继a2;(2)有且仅有一个终端结点an,他没有直接后继,而仅有一个直接前趋an-1;(3)其余的内部结点ai(2in-1)都有且仅有一个直接前趋ai-1和一个直接后继ai+1。4、线性表基本运算(1)构造一个空的线性表L:InitList(&L) 或者CreateList(L);(2
2020-07-26 11:59:10
276
原创 第二课:C数据结构—算法的基本概念
1、算法的定义算法是解决特定问题的的步骤的描述,在计算机中算法是一个有穷规则(或语法、指令)的有序集合。2、算法是解决问题的步骤、程序是计算机语言的具体实现。3、数据结构 + 算法 = 程序算法的设计:取决于选定的逻辑结构算法的实现:依赖于采用的存储结构4、算法的特性(1)有穷性(2)确定性(3)可行性(4)输入(5)输出5、算法的分析(1)正确解决问题(2)时间足够短、存储足够小(3)可读性高...
2020-07-26 10:40:42
601
原创 第一课:走进C数据结构—数据结构基本概念
1、数据结构的基本概念数据结构是研究组成数据的数据元素的关系的学科。2、数据结构的研究目的通过研究数据元素的关系,帮助我们在开发软件的时候更好的组件数据模型,让数据在内存中的操作更加的流畅高效。逻辑关系 存储关系 运算关系3、数据数据即是信息的载体,是能够输入到计算机中并且能被计算机识别、存储和处理的符号的总称。数据是集合的概念,存在内存的数据。4、数据元素是数据的基本组成单位,又称之为记录。5、数据项数据元素由若干数据项组成,数据项是数据中的最小单位。6、数据类
2020-07-26 10:04:05
168
原创 python 3.7 安装 win32 win32com win32ras模块
目前安装 win32有两种有效方式可以实现,用pip工具安装和官网下载安装包安装。第一种方法:用pip工具安装命令如下:python -m pip install pypiwin32。这条命令在安装过程中可能会报错,多尝试几次即可安装成功。第二种方法:打开win32下载网址:https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/;下载对应python版本的win32软件,下载后直接点击安装即可。安...
2020-07-21 14:04:36
2781
原创 深入浅出C语言内存管理用法
C语言中定义了4个内存区间:代码区/全局变量与静态变量区/局部变量区即栈区/动态存储区,即堆区。代码区: 程序被操作系统加载到内存的时候,所有的可执行代码(程序代码指令、常量字符串等)都加载到代码区,这块内存在程序运行期间是不变的。代码区是平行的,里面装的就是一堆指令,在程序运行期间是不能改变的。函数也是代码的一部分,故函数都被放在代码区,包括main函数。静态区 静态区存放程序中所有的全局变量和静态变量。栈区 栈(stack)是一种先进后出的内存结构,所有的自动变量、函数形参都存储在栈中,
2020-07-19 16:50:17
144
原创 c语言中共用体及typedef用法
1、共用体的定义 通过前面的讲解,我们知道结构体(Struct)是一种构造类型或复杂类型,它可以包含多个类型不同的成员。在C语言中,还有另外一种和结构体非常类似的语法,叫做共用体(Union),它的定义格式为:union 共用体名{ 成员列表};共用体有时也被称为联合或者联合体,这也是 Union 这个单词的本意。结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。结构体占用的内存...
2020-07-19 13:32:44
698
原创 c语言中的结构体定义和常见用法
1、结构体简述和概念 结构体是C语言中一种重要的数据类型,该数据类型由一组称为成员(或称为域,或称为元素)的不同数据组成,其中每个成员可以具有不同的类型。结构体通常用来表示类型不同但是又相关的若干数据。结构体类型不是由系统定义好的,而是需要程序设计者自己定义的。C语言提供了关键字struct来标识所定义的结构体类型。2、结构体的定义3、Example4、特点5、注意点...
2020-07-19 12:09:22
9507
原创 GDB调试工具 详解
1、调试器--GDB调用流程第一步编译源文件,生成带调试信息的可执行代码gcc -g test.c -o test第二步启动gdb进行调试gdb test2、GDB常用命令查看文件 -(gdb) l设置断点-(gdb)b value(6)查看断点情况 -(gdb)info value(6)运行代码-(gdb)r查看变量值-(gdb)p n单步运行-(gdb)n or s恢复程序运行-(gdb)c帮助-(gdb)help [command]...
2020-07-19 10:53:01
187
原创 GCC编译器用法常见错误及过程 介绍
1、Gcc最基本的用法是∶gcc [options] [filenames] 其中options就是编译器所需要的参数,filenames给出相关的文件名称。-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。 eg: gcc -o test
2020-07-19 10:33:57
1448
原创 git commit 文本编辑器设置为vim编辑器
git commit 文本编辑器设置为vim编辑器,只需以下命令,如下:git config --global core.editor vim修改后可以在home目录下.gitconfig中可以查看。再次用到git commit会发现,已变成vim编译器模式。
2020-06-16 22:12:48
1924
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人