
Linux开发基础篇
文章平均质量分 52
嵌入式 LINUX C/C++
C_IS_ALL
嵌入式、视频、软件开发、硬件开发
展开
-
13-网络篇-局域网与外网通信
NAT路由器把内网中不同的源IP地址都转换为相同的全球IP地址。但对源主机所采用的端口号,则转换为不同的新的端口号,从而完成映射与转发。(2)NAT路由器将源地址192.168.0.3转化成172.38.1.5,并发包给服务器213.18.2.4。首先我们要明确一个概念,2个IP必须都是外网IP才能相互建立起外网通信。2.上面是路由器网络内一个电脑与服务器通信,假如多个主机呢。比如我们电脑是在局域网内,如何能让它与外网服务器通信。在这里,我们可以用NAT路由器来完成通信过程,(1)电脑发包给NAT路由器。原创 2023-10-14 17:03:24 · 402 阅读 · 0 评论 -
09-基础篇-一步一步写MakeFile
另外在实际的开发过程中,一整个系统,不可能是一个公司能够做完成,A公司和B公司同时做项目,一般A公司不可能对B公司开源自己的代码,因而需要有一种方式将代码屏蔽,而只将功能抽象出来,这种方法就是库。从上面的Makefile看出,首先print.c和hello.c分别编译和汇编生成print.o,hello.o的机器指令,然后gcc将print.o和hello.o链接成目标程序hello。如下目录,我们重新创建了3个目录,src用于放所有c文件,obj用于放所有的.o文件,inc用于放所有的.h文件。原创 2023-10-12 13:47:54 · 166 阅读 · 0 评论 -
01-基础篇-常用的命令
表示此操作系统的根目录,根目录是一切目录的源头,后面的目录分级用/隔开,如/home/my/test:根目录下有一个home目录,home目录下有一个my目录,my目录下有一个test的目录或文件。本栏目是在Ubuntu操作系统进行编译与运行,代码编译和目标文件运行均是在终端完成,下面介绍一些常见的指令,用于更方便的使用终端的功能。若操作文件夹,要加上-r 或-rf。若操作文件夹,要加上-r 或-rf。若操作文件夹,要加上-r 或-rf。比如下载安装gcc交叉编译器。原创 2023-10-08 15:29:43 · 165 阅读 · 0 评论 -
00-基础篇-教程内容
笔者有一个正在读大学计算机应用专业的弟弟,之前在他大一,大二时反复提醒他,一定要学好专业知识,但是感觉没有任何效果,了解了一下学习情况,发现他的专业学习了解太差,眼看正读大三,再不增加一下自己的能力,大四找工作又会是很难的事情,因而笔者就想写一个简单的教程让他一点点的学习,让他了解他这个专业到底应该学什么,怎么学,以及未来怎么发展。在所有计算机外设的应用中,最常用的肯定是网络外设,因而本栏目会对网络编程进行详细描述,在网络应用中,专门选择视频,同样也是因为视频应用在现在的移动互联网中应用最广泛。原创 2023-10-05 19:39:53 · 140 阅读 · 0 评论 -
嵌入式LINUX应用之系统、网络与视频开发总结
了解网络和视频开发的入门参考原创 2023-10-05 10:03:56 · 523 阅读 · 0 评论 -
08-基础篇-字符串
字符串在应用程序编写中使用的频率很高,下面对字符串常用的函数进行举例。原创 2023-07-05 09:40:18 · 118 阅读 · 2 评论 -
07-基础篇-文件IO
linux系统会将所有的资源均抽像成文件,针对应用程序编写时,对资源的操作就变成了对文件的操作,操作文件主要有打开fwrite、读文件fread、写文件fwrite、和关闭文件fclose 4种操作。另外要注意 open完一个文件后,当文件使用结束后,一定要close该文件,不然会引发内存泄露的问题。下面针对这4种操作方式,如下例。原创 2023-07-03 12:31:01 · 91 阅读 · 0 评论 -
06-基础篇-缓存与内存泄露讨论
环形缓存区的原理和使用并没有普通的链表队列直观,为什么在视频场合推荐环形缓存区,原因是普通队列的出队,入列操作存在malloc和free操作,malloc的频繁操作会引起内存的另一个问题,内存碎片。两个线程的速率并不是一样的,为了让两个不同任务的线程均工作最合理,我们在两个线程之前加入了缓存的概念,也就是生产者 采集线程采集帧后,将数据暂存到缓存中,而消费者 网络传输线程从缓存中取数据并消费。通过malloc分配内存后,就可以对内存块进行使用,当使用完内存后,必须采用free函数对内存进行释放。原创 2023-07-03 11:55:47 · 142 阅读 · 0 评论 -
05-基础篇-线程同步
其实,自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。信号量也可用于线程同步,信号量不一定是锁定某一个资源,而是流程上的概念,比如:有A,B两个线程,B线程要等A线程完成某一任务以后再进行自己下面的步骤,这个任务并不一定是锁定某一资源,还可以是进行一些计算或者数据处理之类。前面描述了互斥锁的概念,若使用互斥锁的线程有消费者和生产者,消费者必须不断循环来查询生产者是否生产了产品,这种循环方式对CPU消耗大,若生产者生产产品后,通知消费者,消费再处理,这种方式可以解决对CPU消耗过大的问题。原创 2023-06-27 14:56:08 · 117 阅读 · 0 评论 -
04-基础篇-关于线程的创建、终止和线程泄露讨论
使用线程的pthread相关函数时,需要加入头文件#include,并在gcc编译时指定线程库-pthread 或 -lpthread。可任意位置调用此函数,哪个线程调用,就会退出哪个线程;tid为一个指定线程的id,指定哪个线程就退出哪个线程。线程在默认情况下,线程退出也不会回收资源,容易产生线程泄露,避免线程泄露有如下两种方法。(2).pthread_detach() 子线程主动脱离主线程。(1). pthread_join() 主线程等待子线程。2.线程终止(退出线程)原创 2023-06-20 10:53:09 · 160 阅读 · 0 评论 -
03-基础篇-进程、线程
由于网络并不是完全稳定,存在有的时候网络好,发送的快,有时网络差,发送慢或异常的情况,为了让帧产生和发送这两阶段相互不干扰,我们在此种情况下可以创建两个线程,一个专门用于接受处理器采集的帧信息,另一个线程专门发送帧信息于网络,两个线程之前的时间不匹配问题由缓存(队列,环形存储)解决。线程:线程是程序执行时的最小单位,它是程序执行的一个流,是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。进程是CPU,内存等分配的基本单位。原创 2023-06-19 20:02:31 · 135 阅读 · 0 评论 -
02-基础篇-编译器
具体原因是由于电脑是属于X86-64架构,而我们的开发板是arm架构,两种架构对应的汇编指令或机器语言并不一样,所以我们写一个C文件的程序后,将程序翻译成机器指令,所需要的翻译官不一样。而普遍使用的arm类嵌入式开发板,其内存,磁盘都很小,在开发板上装对应的gcc很消耗开发板的资源,因而我们将arm开发板所对应的gcc编译器(比如:arm-himx200-gcc)安装在电脑上。这种编译过程放在电脑上,而执行过程放在嵌入式开发板的过程,就叫做交叉编译,而开发板所对应的gcc或g++等编译器,叫做交叉编译器。原创 2023-06-17 09:49:04 · 244 阅读 · 0 评论