- 博客(20)
- 资源 (4)
- 问答 (1)
- 收藏
- 关注
原创 新手集合--嵌入式linux学习路线--三大阶段
微信公众号:二进制人生 专注于嵌入式linux开发。本文持续更新,第一版先面世,转发请保留出处:二进制人生。这个学习路线是遵照大多数人的认知规律来的,第一阶段1.1 C语言入门入门选一本简单的、薄一点、不要出错的书就可以了,例如谭浩强老爷子的书,选太厚的容易打击你的信心和学习兴趣,谭老爷子的书虽然被很多人喷,但对于初学者来说还是比较合适的。在入门之后才建议去看C语言的经典教程:《C Primer Plus》这本书比较厚,知识点比较全,可以用于查漏补缺。《C程序设计语言》(Th.
2020-07-30 23:26:21 22592 4
原创 Linux C高阶(2)linux下程序编译链接过程
动态链接程序将根据可执行程序中记录的信息找到相应的函数代码。链接程序的主要工作就是将有关的目标文件彼此相连接,也即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够按操作系统装入执行的统一整体。了解了这四个过程中所做的工作,对我们理解头文件、库等的工作过程是有帮助的,而且清楚的了解编译链接过程还对我们在编程时定位错误,以及编程时尽量调动编译器的检测错误会有很大的帮助的。静态链接库实际上是一个目标文件的集合,其中的每个文件含有库中的一个或者一组相关函数的代码。
2020-07-26 14:53:02 6334 1
原创 Linux C高阶(11) 多线程变量自增问题分析
微信公众号:二进制人生专注于嵌入式linux开发。更新:2020/05/08,内容整理自网络。考虑变量i++的操作,实际上可以分解为以下3步:(1)从内存单元读入寄存器;(2)在寄存器中对变量做增量操作;(3)把新的值写回内存单元。如果两个线程试图几乎在同一时间对同一变量做增量操作而不进行同步的话,结果可能就不一致了,在上述代码中,我们传进线程函数的是变量的地址,那么变量i自增后,可能还没有写回内存单元,就被另一个线程读取了。好了,我们现在提出一个问题,假设一个全局变量a = 0,创建了.
2020-07-26 14:50:50 8125 1
原创 Linux C高阶(3)封装一个可靠的system函数
微信公众号:二进制人生专注于嵌入式linux开发。更新:2019/12/25在代码中执行Linux命令的这个需求在嵌入式开发中很常见,好在Linux已经提供了这样的系统函数:system()。初级工程师可能会直接拿来使用,但为了在该函数执行出问题时能够收集错误信息,我对这个函数进行了封装。/* 封装system系统函数,打印记录错误 */int My_System(const char *cmd){ int status = -1; char logbuf[128] = {0.
2020-07-26 14:43:06 6259 2
原创 Linux C高阶(6)C语言写一个漂亮的位图
Bitmap翻译成中文就是位图。所谓bitmap,就是用每一位来表示一个事物的某种状态,由于只有一位,所以这个状态值只能是0或者1,很多个同类事物的状态就构成了一个状态位图。这个二值状态常用来表示存在或不存在,使用了或者没使用。举一个通俗的例子,开会签到,会有一个签到名单,哪个同学来了就在他名字后面打钩。在偷懒的时候可以用一个数组来表示同学的签到状态,为了节省空间,我用1个字节来表示该状态,96。
2020-07-26 14:38:36 6302 1
原创 历史or技术科普(1)unix和linux你所不知道的历史
微信公众号:二进制人生专注于嵌入式linux开发。更新:2019/12/14转载自:http://c.biancheng.net/view/707.html,排版作了优化,文章目录UNIX 的坎坷历史C语言的诞生AT&T和BSD的纠纷开源领袖斯托曼GNU简介历史Solaris 和 FreeBSDLinux 的那些往事UNIX与Linux的亲密关系总结一下 Linux 和 UNIX 的关系/区别UNIX/Linux系统结构Linux的发行版本UNIX 与 Linux 之间的关系是一个很有.
2020-07-26 14:35:44 6365
原创 历史or技术科普(2)什么是glibc
微信公众号:二进制人生专注于嵌入式linux开发。更新:2020/5/16,转载请注明出处。glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万象。在 GNU/Linux 系统中,用 glibc 作为系统的C函数库,是GNU/Linux演进的.
2020-07-26 11:30:42 7180 3
原创 Linux C高阶(18)用C写一个项目级动态数组
微信公众号:二进制人生专注于嵌入式linux开发。更新日期:2020/1/9,转载请注明出处。最近在收集轮子或者造轮子,意在写一个嵌入式linux通用库,包含常用的各种数据结构和接口。文章目录前言数据结构和接口实现创建销毁初始化去初始化获取元素插入元素测试代码前言本文动态数组的设计思想和代码搬自nginx。nginx是一款优秀的开源web服务器,其源代码100%由C编写。在百度上搜索一下nginx的市场份额,得到以下结果:这几年各大服务器的市场占有走势折线图:足见其地位。今天我们来.
2020-07-26 11:21:23 6026 1
原创 Linux C高阶(9)写一个项目级别的线程池
微信公众号:二进制人生专注于嵌入式linux开发。更新日期:2020/1/19,转载请注明出处。愿你有所收获…快过年了,应该会停更一段时间,提前祝我的各位读者们新年快乐,2020年会有更好的发展!最近在收集轮子或者造轮子,意在写一个嵌入式linux通用库,包含常用的各种数据结构和接口。文章目录什么是线程池基本数据结构项目级封装什么是线程池线程池是一种高并发下常用的任务后台处理模型,主要是避免为短时间处理的任务进行频繁的线程创建和销毁,以及系统中过多的线程导致过度调度,而这些都.
2020-07-26 11:15:28 7620 1
原创 arm汇编(1)arm32寄存器介绍
在所有的寄存器中,有些是各模式共用同一个物理寄存器,有些寄存器是各个模式自己拥有独立的物理寄存器,所以导致arm一共有37个寄存器。任何处理器模式下arm只有一个cpsr,而spsr有多个,不同的异常模式对应一个,由于用户模式(User)和系统模式(sys)不属于异常模式,所以spsr只有5个。这样算起来只有16个,一般的cpu都会有状态寄存器,还记得51单片机吗,它也有一个程序状态寄存器,叫 PSW。程序状态寄存器通常用来保存指令执行后的状态,比如加法操作产生了进位,会置位进位状态位。
2020-07-25 22:55:53 6624 1
原创 Linux C高阶(19)C语言隐式类型转换的陷阱
微信公众号:二进制人生专注于嵌入式linux开发。更新:2020/05/21,转载请注明出处。隐式类型转换是C语言的一大诡异之处,语句或表达式通常应该只使用一种类型的变量和常量。然而,如果你混合使用类型,C使用一个规则集合来自动完成类型转换。这可能很方便,但也很危险。当出现在表达式里时,有符号和无符号的char和short类型都将自动被转换为int类型,在需要的情况下,将自动被转换为unsigned int(在short和int具有相同大小时)。这称为类型提升。提升在算数运算中通常不会有什么.
2020-07-25 22:39:56 5991 2
原创 Linux C高阶(14)C语言宏定义你所不知道的事
微信公众号:二进制人生专注于嵌入式linux开发。问题或建议,请发邮件至hjhvictory@163.com。更新日期:2020/1/24,内容整理自网络,转载请注明出处。文章目录规避语法错误什么时候使用宏定义规避语法错误众所周知,C语言支持宏定义,并且功能强大。举个例子:#include <stdio.h>#define swap(a,b) {int t=a;a=b;b=t;}int main(){ int x = 1, y = 2; swap(x, y); pri.
2020-07-25 22:36:58 5943 1
原创 Linux C高阶(12)结构体位域10大罪名
微信公众号:二进制人生专注于嵌入式linux开发。更新:2020/05/20,内容整理自网络。有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示.
2020-07-25 22:34:18 5998 1
原创 Linux C高阶(1)大话C语言函数指针
微信公众号:二进制人生专注于嵌入式linux开发,内容整理自网络。文章目录什么是函数指针如何定义函数指针如何用函数指针调用函数用typedef定义函数指针类型高级用法--将一块地址转为函数指针,并进行调用函数指针的实际应用--回调函数什么是函数指针如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。如何定义函.
2020-07-25 22:25:08 5995 1
有初学C++ C linux 嵌入式的吗,这里集合,有大量系统学习的博客教程
2021-04-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人