自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Exp.Joker

该博客是用来向韦东山和唐佐林老师学习中,所记录的笔记,特此声明。

  • 博客(122)
  • 收藏
  • 关注

原创 Linux 网络开发必学课程(十四)物联网服务模块实现

I2C即: Inter - Integrated Circuit , —种两线式串行总线I2C常用于连接微控制器及其外围设备(如:用于连接传感器)I2C可通过两个GPIO 引脚实现物理连接及数据通信如:GPIO0对应I2C1_SDA:I2C数据传输线GPIO1对应I2C1_SCL:I2C时钟信号线。

2023-08-17 21:04:23 220

原创 Linux 网络开发必学课程(十三)客户端服务端交互实现

存储服务命令与设备地址之间的映射(命令字符串→地址字符串)字符串空格处理,分割获取命令与参数。字符串预处理,分割获取服务命。

2023-08-17 20:29:21 134

原创 Linux 网络开发必学课程(十二)客户端设计与初步实现

Response Task和Service Task的业务逻辑如何实现?

2023-08-17 20:21:18 142

原创 Linux 网络开发必学课程(十一)智能家居服务发现实现

设备端运行服务端,客户端连接,数据收发功能。通过网络调试助手验证TCP数据收发。通过网络调试助手验证UDP数据收发。设备端接收广播,并回复数据。

2023-08-17 20:10:57 77

原创 Linux 网络开发必学课程(十)物联网设备WIFI模块实现

LwlP是轻量化的TCP/IP,是一个小型开源的 TCP/IP协议栈LwIP的设计目标是用较少的资源实现较完整的TCP/IP协议栈LwlP能在操作系统中运行,也能在无操作系统的情况下独立运行LwIP提供了Socket API和 Netconn API(2)LwlP的主要特性支持ARP,ICMP,IGMP支持UDP,TCP,IP(可移植网络通信框架)支持 DNS,PPP,SNMP支持 DHCP,可动态分配IP地址(WIFl支持。。

2023-08-17 20:01:48 446

原创 数据结构实战开发教程(八)选择排序和插入排序、冒泡排序和希尔排序、归并排序和快速排序、排序的工程应用示例

排序是计算机内经常进行的一种操作,其目的是将一组 “无序” 的数据元素调整为 “有序” 的数据元素。 按总评排序后为什么张无忌的排名比郭靖靠前呢?因为采用的不稳定排序法。 多关键字排序是否比单关键字排序更复杂?对于多关键字排序,只需要在比较操作时同时考虑多个关键字即可!!!class Sort;每次(例如第i次,i = 0,1,..., n-2)从后面n-i个待排的数据元素中选出关键字最小的元素,作为有序元素序列第i个元素。当插入第i(i≥ 1)个数据元素时,前面

2022-06-25 23:30:53 516 1

原创 数据结构实战开发教程(七)字符串类的创建、KMP 子串查找算法、KMP 算法的应用、递归的思想与应用

C++中的原生类型系统是否包含字符串类型?没有,通过标准库。 String.hString.cppstring.hstring.cpp思考:如何在目标字符串中查找是否存在指定的子串?如何在目标字符串S中,查找是否存在子串P ?示例: ABCDABD如何在目标字符串中查 找是否存在指定的子串?string.hstring.cpp第一轮,从主串的首位开始,把主串和模式串的字符逐个比较:显然,主串的首位字符是a,模式串的首位字符是b,两者并不匹配。第二轮,把模式串后移一位,从主串的第二位开始,把主

2022-06-25 23:17:00 933

原创 数据结构实战开发教程(六)栈的概念及实现、队列的概念及实现、两个有趣的问题

StaticStack.hLinkStack.h使用单链表对象实现链式栈时,为什么选择在单链表的头部进行操作?如果选择在尾部进行操作是否也能实现栈的功能?先进先出( First In First Out )StaticQueue.hLinkQueue.h使用LinkList类实现链式队列是否合适,是否有更好的方案?时间复杂度较高LinkQueue.h栈和队列在实现上非常类似,是否可以用栈实现队列?用栈实现队列等价于用“后进先出”的特性实现“先进先出”的特性!反之,是否可以用队列实现栈?本质为,用队列“先进先

2022-06-25 22:54:26 267

原创 数据结构实战开发教程(五)再论智能指针、循环链表的实现、双向链表的实现、双向循环链表的实现、Linux内核链表剖析

再论智能指针、循环链表的实现、双向链表的实现、双向循环链表的实现、Linux内核链表剖析

2022-06-25 22:46:27 625

原创 数据结构实战开发教程(四)线性表的链式存储结构、单链表的具体实现、单链表的遍历与优化、典型问题分析(Bugfix)

顺序存储结构线性表的最大问题是:插入和删除需要移动大量的元素!如何解决? 为了表示每个数据元素与其直接后继元素之间的逻辑关系;数据元素除了存储本身的信息外,还需要存储其直接后继的信息。 头结点在单链表中的意义是:辅助数据元素的定位,方便插入和删除操作;因此,头结点不存储实际的数据元素 1. 从头结点开始,通过current指针定位到目标位置 2. 从堆空间申请新的Node结点

2022-06-25 22:29:30 568

原创 数据结构实战开发教程(三)线性表的本质和操作、顺序存储结构的抽象实现、顺序存储线性表的分析、数组类的创建

幼儿园老师总会让小朋友以同样的排队秩序出行。 线性表只是一个单纯的概念吗?如何在程序中描述和使用一个线性表?线性表是数据元素的有序并且有限的集合 线性表中的数据元素必须是类型相同的 线性表可用于描述排队关系的问题 线性表在程序中表现为一种特殊的数据类型 线性表在C++中表现为一个抽象类线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表中的数据元素。 ...

2022-06-25 22:09:18 651

原创 数据结构实战开发教程(二)泛型编程简介、智能指针示例、异常类构建、顶层父类的创建

如何为数据结构的学习选择合适的语言?支持泛型编程的语言最适合数据结构课程的学习?模板是泛型编程理论在C++中的实现函数模板支持参数的自动推导和显示指定 类模板在使用时只能显示指定类型 类模板非常适用于编写数据结构相关的代码九、智能指针示例1、内存泄漏(臭名昭著的Bug ) 动态申请堆空间,用完后不归还 C++语言中没有垃圾回收的机制(...

2022-06-25 09:43:10 290

原创 数据结构实战开发教程(一)数据的艺术、理解程序的本质、算法的时间复杂度

为什么要学习数据结构这门课程? 现代的程序设计语言开发包中都有数据结构和常用算法的完整实现,是不是掌握如何使用就可以了?为什么会有各种各样的程序存在?程序的本质是什么? 如何判断问题求解步骤的好坏?优秀的开发者追求高质量的代码!1968年,由高纳德教授(Donald E.Knuth )开创一同年,在计算机科学的学位课程中出现(必修) ...

2022-06-25 09:25:23 478

原创 教你玩转makeflie(九)模块独立编译的支持、第三方库的使用支持

模块独立编译的支持23.1 问题一般而言,不同工程师负责不同模块的开发;编译环境中如何支持模块的独立编译?23.2 问题背景23.3 解决方案23.4 关键技术点23.5 编程实验:模块的独立编译make module23.6 思路23.7 编程实验:makefile中的代码复用自定义函数23.8 小结第二十四部分 :第三方库的使用支持24.1 问题当需要使用第三方库文件时,编译环境中的makefile 改如何修改?24.2 经验假设24.3 第三方库在项目中的位置24.4 第三方库的编译阶......

2022-06-20 10:40:17 568

原创 教你玩转makeflie(八)打造专业的编译环境

打造专业的编译环境(上)20.1 大型项目的目录结构(无第三方库)20.2 项目架构设计分析20.3 需要打造的编译环境20.4 解决方案设计第1阶段︰将每个模块中的代码编译成静态库文件第2阶段︰将每个模块的静态库文件链接成最终可执行程序20.5 第一阶段任务20.6 关键的实现要点20.7 模块makefile 中的构成20.8 编程实验:模块的编译makefile20.9 To be continued ...思考︰如何编写项目makefile使其能够触发模块makefile 的调用,并最.......

2022-06-20 10:40:10 467

原创 教你玩转makeflie(七)make 中的路径搜索、路径搜索的综合示例

make 中的路径搜索(上)17.1 问题在实际的工程项目中,所有的源文件和头文件都放在同一个文件夹中吗?17.2 常用的源码管理方式项目中的makefile必须能够正确的定位源文件和依赖的文件,最终编译产生可执行程序。17.3 下面的makefile能够成功编译吗? 17.4 特殊的预定义变量VPATH(全大写)17.5 make 对于VPATH值的处理方式17.6 注意事项17.7 编程实验:VPATH的使用makefile.1OBJS := func.o main.oINC := in......

2022-06-20 10:39:55 3572

原创 教你玩转makeflie(六)make的隐式规则

makefile 中出现同名目标时依赖︰所有的依赖将合并在一起,成为目标的最终依赖命令∶当多处出现同一目标的命令时,make发出警告所有之前定义的命令被最后定义的命令取代当使用include关键字包含其它文件时,需要确保被包含文件中的同名目标只有依赖,没有命令;否则,同名目标的命令将被覆盖!若去掉一部分会编译成功吗?会的当依赖的目标不存在时,make 会极力组合各种隐式规则对目标进行创建,进而产生意料之外的编...

2022-06-18 11:49:11 525

原创 教你玩转makeflie(五)自动生成依赖关系

当func.h发生改变,理应重新编译,但makefile只检查两个源文件,发现无改动是最新的,所以不会重新编译,导致错误。OBJS := func.o main.ohello.out : $(OBJS)@gcc -o $@ $^@echo "Target File ==> $@"$(OBJS) : %.o : %.c func.h@gcc -o $@ -c $...

2022-06-18 11:44:43 1608

原创 教你玩转makeflie(四)条件判断语句、函数定义及调用、变量与函数的综合示例

ifxxx (arg1,arg2)# for tureelse# for falseendif条件判断语句只能用于控制make 实际执行的语句;但是,不能控制规则中命令的执行过程。不相同,右边的var2在编译阶段就无法确定,是否被赋值当前工作目录下逐个对工作目录中的文件进行,与6.4相对应.反编译:objdump -S hello-makefile.out 上为生成调试信息,下为不生成调试信息...

2022-06-18 11:37:31 576

原创 教你玩转makeflie(三)预定义变量的使用、变量的高级主题

预定义变量的使用5.1 在makefile中存在一些预定义的变量5.2 自动变量的意义5.3 自动变量的使用示例注意:1、“$”对于makefile有特殊含义2、“$@”对于 Bash Shell有特殊含义5.4 编程实验:自动变量的使用.PHONY : all first second thirdall : first second third@echo "\$$@ => $@"@echo "$$^ => $^"@echo "$$< => $...

2022-06-18 11:32:18 1160

原创 教你玩转makeflie(二)伪目标的引入、变量和不同的赋值方式

伪目标的引入makefile 中的目标究竟是什么?3.1 默认情况下3.2 下面的代码有什么意义?3.3 编程实验:有趣的目标 makefile.1hello.out all : func.o main.ogcc -o hello.out func.o main.ofunc.o : func.cgcc -o func.o -c func.cmain.o : main.cgcc -o main.o -c main.cclean :rm *.o hello.out解释:当makefile同目录下,有...

2022-06-18 11:26:32 412

原创 教你玩转makeflie(一)make和makefile、初识 makefile 的结构

eg: 编译10000个源文件,第9999个,出错了,改好后重新编译,make自动跳过前9998个;注意:目标后的命令需要用Tab键('\t')隔开!否则报错。make -f mf.txt hello功能说明:以hello关键字作为目标查找mf.txt文件(-f 后),并执行hello处的命令。make hello功能说明:以hello关键字作为目标查找makefile或Makefile文件,并执行hello处的命令。make功能说明:查找makefile或Makefile文件中最顶层目标。并执行最顶层目标

2022-06-18 00:22:32 656

原创 Linux调试私房菜(十二)项目开发的前期设计

开发流程的定义平台与框架的选择目录结构及源码管理嵌入式产品的开发效率开发流程的定义平台与框架的选择目录结构及源码管理嵌入式产品的开发效率开发流程的定义平台与框架的选择目录结构及源码管理嵌入式产品的开发效率开发流程的定义平台与框架的选择目录结构及源码管理嵌入式产品的开发效率......

2022-06-18 00:02:38 339

原创 Linux调试私房菜(十一)程序异常处理的设计

采用整数分区域的方式对异常进行表示 demo1 demo2To be continued …当前的设计中,直接输出异常号的方式易于问题定位吗?是否更好的异常输出方式?1. 每个模块的异常枚举定义于独立的文件2. 异常枚举的定义遵循固有的编码规范3. 编写独立程序处理异常枚举定义文件,生成对应的字符串数组4. 当项目中出现异常时 err2str.cpp......

2022-06-18 00:02:25 364

原创 Linux调试私房菜(十)系统模块管理的设计

硬件层,系统层,平台层,框架层,应用层同一层中的模块根据依赖关系能够继续分级源码分析module.c module.h 管理模块Dll.c Dll.h

2022-06-18 00:02:13 242

原创 Linux调试私房菜(九)设计,软件质量之本

注释应该起到画龙点睛的作用,用于简要的描述代码意图;避免使用注释描述程序的运行流程。让设备B定时重发RSP消息

2022-06-18 00:01:46 1988 1

原创 Linux调试私房菜(八)混淆指针与数组的问题、volatile,让我保持原样

main.cdefine.ctest.cglobal.hmain.cdevice.c未优化已优化main.cdevice.c如何理解const和volatile同时修饰变量?在语义上是否矛盾?

2022-06-17 14:41:41 367

原创 Linux调试私房菜(七)缔造程序兼容的合约

为什么下面的代码能够以0作为退出码结束程序运行?Linux下对于位域的存储方式是压缩存储。windows下对于位域的存储方式是非压缩存储。函数调用时,参数如何入栈?函数返回时,返回值在哪里?13. 问题当返回值类型为结构体时,如何将值返回到调用函数中?...

2022-06-17 14:36:34 419

原创 Linux调试私房菜(六)深入理解程序的结构

静态分析工具多半都是通过文件头来获得信息。局部变量存储在栈上。同是全局变量和静态局部变量,为什么初始化的和未初始化的保存在不同段中?.bss段中的变量不用在程序文件中保存初始值,从而减小可执行程序文件的体积,并且提高程序的加载效率。编译器默认四字节对齐查看.data的初始值 objdump -s -j .data test.out查看.rodata的初始值 objdump -s -j .rodata test.out...

2022-06-17 14:31:08 366

原创 Linux调试私房菜(五)调试利器 GDB

ulimit -c unlimited 程序崩溃时,产生core文件。gdb test.out corefile test.out set args D.T.Softwarerunps auxrun 运行程序start 运行后暂停watch.cframe.csp和bp在栈上保存tricks.c

2022-06-17 14:17:15 315

原创 Linux调试私房菜(四)揭开链接器的面纱、汇编语言的内嵌编程

源文件被编译后生成目标文件,这些目标文件如何生存最终的可执行程序?链接器的主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确的衔接。main()函数是第一个被调用执行的函数吗?链接选项-nostartfiles的意义是什么?链接时不要使用标准的系统启动文件。标准的系统库通常使用,除非使用-nostdlib或-nodefaultlibs。链接器根据什么原则完成具体的工作?在Linux中,进程代码段(.text)的合法起始地址为[0x08048000,0x08049000]8-1.lds8-

2022-06-17 14:10:52 896

原创 Linux调试私房菜(三)开发中的辅助工具

开发中的辅助工具1. 什么是开发环境?2. 嵌入式开发中的时间分配3. 问题:如何提高开发效率?工欲善其事,必先利其器!4. GNU为GCC编译器提供了配套的辅助工具集(Binutils)Binutils- GNU Project - Free Software Foundation5. addr2lne6. addr2line示例:定位0地址访问ip寄存器访问地址时出现段错误7. stripstrip test.out8. 注意事项9. ar10. nm 段标识说明由于未链接,所以地址都是相对偏移地址..

2022-06-17 14:06:14 1898

原创 Linux调试私房菜(二)嵌入式 C 语言编译器

嵌入式 C 语言编译器. GCC与gcc有什么不同

2022-06-17 14:01:21 497

原创 Linux调试私房菜(一)深入浅出处理器

从软件工程师的角度来看,只需要对不同的IO端口读写就可以操作外设;读写IO端口时候的具体值和意义需要查询具体的硬件手册。通过具体的硬件设计,可以使得地址总线上的值在某个范围时,片选信号为“真”,即︰使能连接的设备,从而读取相应地址中的数据!地址:0xFFFF1234printf 是IO操作,非常耗时同时结合日志调试法和断点调试法的优点,使得实时系统调试时,能够任意查看指定代码...

2022-06-17 13:18:33 475

原创 C++ 深度解析教程(十八)拾遗:令人迷惑的写法、技巧:自定义内存管理、异常处理深度解析、函数的异常规格说明、动态内存申请的结果

统计对象中某个成员变量的访问次数new关键字创建出来的对象位于什么地方?如何在指定的地址上创建C++对象?如果析构函数中抛出异常会发生什么情况?如何判断一个函数是否会抛出异常,以及抛出哪些异常?...

2022-06-17 11:01:42 505

原创 C++ 深度解析教程(十七)C 语言异常处理、C++ 中的异常处理、C++中的类型识别

C 语言异常处理1、异常处理2、编程实验:除法操作异常处理3、异常处理的方式4、编程实验:除法操作异常处理优化5、异常处理的方式6、实例分析:异常处理代码分析7、问题C++中有没有更好的异常处理方式?8、小结六十四、C++ 中的异常处理(上)1、C++异常处理2、编程实验:C++异常处理初探3、C++异常处理4、编程实验:异常类型匹配5、小结六十五、C++ 中的异常处理(下)1、C++中的异常处理2、问题为什么要在catch中重新抛出异常?3、C++中的异常处理4、编程实验:异常的重新解释5、C++...

2022-06-17 10:52:47 620

原创 C++ 深度解析教程(十六)函数模板的概念和意义、深入理解函数模板、类模板的概念和意义、类模板深度剖析、数组类模板、智能指针类模板、单例类模板

C++中有几种交换变量的方法?定义宏代码块 VS 定义函数C++中有没有解决方案集合两种方法的优点?对于Swap函数可以考虑下面的泛型写法Swap泛型写法中的T不是一个具体的数据类型,而是泛指任意的数据类型。当函数重载遇见函数模板会发生什么?在C++中是否能够将泛型的思想应用于类?类模板特化与重定义有区别吗?函数模板可以特化吗?当需要重载函数模板时,优先考虑使用模板特化;当模板特化无法满足需求,再使用函数重载!......

2022-06-16 23:52:52 511

原创 C++ 深度解析教程(十五)C++ 对象模型分析、C++ 中的抽象类和接口、被遗弃的多重继承、关于动态内存分配、关于虚函数

单继承某个类+实现(多个)接口new和malloc的区别是什么?delete和free的区别是什么?构造函数是否可以成为虚函数?析构函数是否可以成为虚函数?构造函数中是否可以发生多态?析构函数中是否可以发生多态?...

2022-06-16 23:43:53 474

原创 C++ 深度解析教程(十四)父子间的冲突、同名覆盖引发的问题、多态的概念和意义

子类中是否可以定义父类中的同名成员? 可以如果可以,如何区分?如果不可以,为什么? 可以子类中定义的函数是否能重载父类中的同名函数?在编译这个函数的时候,编译器不可能知道指针p究竟指向了什么。但是编译器没有理由报错。于是,编译器认为最安全的做法是调用父类的print函数,因为父类和子类肯定都有相同的print函数。编译器的处理方法是合理的吗?是期望的吗?...

2022-06-16 23:32:58 495

原创 C++ 深度解析教程(十三)继承的概念和意义、继承中的访问级别、不同的继承方式、继承中的构造与析构

继承的概念和意义1、思考:类之间是否存在直接的关联关系?2、生活中的例子3、实例分析:组合关系的描述4、类之间的组合关系5、生活中的例子6、惊艳的继承7、编程实验:继承初体验8、惊艳的继承9、继承的意义继承是C++中代码复用的重要手段。通过继承,可以获得父类的所有功能,并且可以在子类中重写已有功能,或者添加新功能。10、编程实验:继承的强化练习11、小结四十四、继承中的访问级别1、值得思考的问题子类是否可以直接访问父类的私有成员?2、思考过程3、编程实验:继承中的访问级别4、继承中的访问级别5、编程...

2022-06-16 23:26:26 450

Linux 网络开发必学课程(十四)课代码

Linux 网络开发必学课程(十四)课代码

2023-08-17

Linux 网络开发必学课程(十三)课代码

Linux 网络开发必学课程(十三)课代码

2023-08-17

Linux 网络开发必学课程(十二)课代码

Linux 网络开发必学课程(十二)课代码

2023-08-17

Linux 网络开发必学课程(十一)课代码

Linux 网络开发必学课程(十一)课代码

2023-08-17

空空如也

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

TA关注的人

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