自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(117)
  • 资源 (7)
  • 收藏
  • 关注

原创 跟涛哥一起学嵌入式 21:一个static关键字引发的思考

今天有个学员问了一个C语言的static静态变量的细节问题,以前自己也没怎么注意过,感觉挺有意思,就跟大家分享下。 在上面的程序中,分别定义了一个静态变量 i 和全局变量 j,然后在main函数中循环调用10次后,再分别打印 i 和 j 的值,不用纠结地去想,答案分别是 i=...

2019-10-22 13:52:29 164

原创 嵌入式C语言自我修养 14:10 道C语言笔试题

1.分析下面的C代码,它的运行结果可能是: #include<stdio.h> int main(void) { int i = 0; if (i = 1) printf("i > 0\n"); else if (i = 0) printf ("i = 0\n"); else print...

2019-10-06 00:43:21 464

原创 跟涛哥一起学嵌入式18:嵌入式开发,有必要考研吗?

我觉得还是很有必要的,但不是必须。原因简单说3个 1)随着行业的发展,公司招人的要求、门槛会慢慢提高 举一个简单的例子:高校的老师招聘,早期可能本科毕业生就可以直接到高校当老师了,后来慢慢门槛提高到硕士,博士,985硕博、海归、海归博士、Top100海归博士、常春藤博士、常春藤本硕博......,就以马老师为例,当年杭师毕业后,就可以直接到杭电当英语老师了,现在杭师...

2019-09-23 03:52:57 1324 1

原创 跟涛哥一起学嵌入式 15:Linux进程间通信10分钟快速入门

在Linux环境下运行程序,无论是点击桌面上的一个图标,还是在命令行下敲击一个shell命令,Linux系统都会把我们的程序“包装”成一个进程的形式,然后调度运行:每个进程轮流占用CPU一段时间去执行,时间到了就让给其它进程,时间片轮转,只要轮转得速度足够快,就会给用户一种错觉:我们在电脑上一边听歌,一边打字,感觉多个程序在同时运行。不同进程在运行过程中,根据业务需要,进程相互之间也会通信:比如传...

2019-08-04 06:31:59 259

原创 Linux进程间通信10分钟快速入门

原文链接: http://mp.weixin.qq.com/s?__biz=MzIzNjA0OTExNQ==&mid=501836476&idx=1&sn=3a80191192efd685576912c523795fcd&chksm=70c00d0847b7841edd62497ed2aa0edfe7753bb12c8428f4bac6387...

2019-08-03 13:14:06 293

原创 零基础扫盲:什么是人工智能

原文地址: http://mp.weixin.qq.com/s?__biz=MzIzNjA0OTExNQ==&mid=501836342&idx=1&sn=2cb6eefaef10e395abe75731ecebc25e&chksm=70c00d8247b784942d7c0a3e6d48c3cb54b8d368eed779d2444b650...

2019-07-16 00:06:10 577

原创 三招防范Ubuntu虚拟机崩溃

今天是个好日子虚拟机又崩溃了...又崩溃了...崩溃了...了... 虚拟机里面有刚写的、热乎乎的几千行代码,没有备份,虚拟机启动不了了,网上找了很多方法,发现不管用,要泪目了......。为了避免重滔覆辙,今天特研究了一下,如何防范虚拟机崩溃、以及崩溃后如何将损失降到最小。虚拟机给我们开发和学习带来了很多便利:我们可以在一台电脑上同时跑多个操作系统,但随着使用时间越来越长...

2019-07-09 11:54:38 866

原创 冰与火之歌:国产操作系统风云录

​凛冬将至:国产操作系统起航 Android、Windows、IOS是大家耳熟能详的操作系统,而且都是美国公司研发维护的。在中美贸易谈判和大国博弈的背景下,拥有自主可控的操作系统愈发显得重要,国内其实也有很多优秀成熟的操作系统,大多数都是基于Linux二次开发,虽然它们名气不是很大,但是在一些对安全性较高的特定行业、部门、嵌入式领域一直在使用。今天就给大家一一介绍,看看你能...

2019-06-26 14:11:23 2510

原创 vim命令大全

本文是对《Linux三剑客》中vim视频教程中的命令进行总结,方便大家学习、收藏,快速掌握vim各种命令的使用。 vim是什么? vim是Linux环境下一款功能强大、高度可定制的文本编辑工具,类似于Windows下面的source insight、sublime、notepad。VI是visual interface的缩写,即可视化接口。v...

2019-04-05 09:27:04 181

原创 跟涛哥一起学嵌入式 14:Linux下的进程江湖

有人的地方,就有江湖Linux进程也不例外有进程的地方,也有江湖那些年,奢望金盆洗手的江湖大佬们按照武侠世界的套路:一旦一个高手决定金盆洗手、隐退江湖,往往下场会很惨、甚至引发整个武林动荡。比如衡山派的刘正风,早已厌倦了江湖,打算去当一个音乐家,整了个金盆洗手大会,结果被嵩山派搞得家破人亡。再比如飞虎镖局老板吕腾空在金盆洗手大会现场,又稀里糊涂接了一个大镖,天魔...

2019-03-20 07:08:13 312

原创 跟涛哥一起学嵌入式 13:嵌入式学习三剑式

前言学习一门技术犹如修炼一门武功。在成为高手的路上,无数英雄豪杰不尽相同,按照武侠小说的套路,大侠之所以成为大侠,绝对不可能平平淡淡,肯定有一段开挂的传奇人生:要么被关入湖底,偶然发现前辈留在石壁上的心法;要么被罚上思过崖面壁思过,一不小心发现破解剑法;要么身受内伤,被人推下悬崖,一不小心发现一个隔世的前辈大师急需找传人,被迫输入内功赋能......然而现实当中,很多人往往没有这...

2019-03-20 06:59:25 808

原创 Linux下的进程江湖

有人的地方,就有江湖Linux进程也不例外 有进程的地方,也有江湖 那些年,奢望金盆洗手的江湖大佬们 按照武侠小说的套路:一个高手一旦决定金盆洗手、隐退江湖,下场往往会很惨,甚至引发整个武林动荡。比如衡山派的刘正风,早已厌倦了江湖,打算去当一个音乐家,于是整了个金盆洗手大会,结果被嵩山派搞得家破人亡。再比如飞...

2019-03-19 22:20:00 160

原创 嵌入式C语言自我修养 (13):总结

13.1 总结前面12节的课程,主要针对 Linux 内核中 GNU C 扩展的一些常用 C 语言语法进行了分析。GNU C 的这些扩展语法,主要用来完善 C 语言标准和编译优化。而通过 C 标准的发展过程我们又发现,对于一些编译器扩展的一些特性,或者其它编程语言(如:C++)中的好的特性和语法,C 标准也会适时地吸收进来,作为新的 C 语言标准。在 GNU C 的这些扩展语法中,__at...

2019-01-27 08:12:19 2157

原创 嵌入式C语言自我修养 (12):有一种宏,叫可变参数宏

12.1 什么是可变参数宏在上面的教程中,我们学会了变参函数的定义和使用,基本套路就是使用 va_list、va_start、va_end 等宏,去解析那些可变参数列表我们找到这些参数的存储地址后,就可以对这些参数进行处理了:要么自己动手,自己处理;要么继续调用其它函来处理。void print_num(int count, ...){    va_list args;    va...

2019-01-27 08:08:14 840

原创 嵌入式C语言自我修养 (11):有一种函数,叫内建函数

 11.1 什么是内建函数内建函数,顾名思义,就是编译器内部实现的函数。这些函数跟关键字一样,可以直接使用,无须像标准库函数那样,要 #include 对应的头文件才能使用。内建函数的函数命名,通常以 __builtin 开头。这些函数主要在编译器内部使用,主要是为编译器服务的。内建函数的主要用途如下。用来处理变长参数列表; 用来处理程序运行异常; 程序的编译优化、性能优化;...

2019-01-27 07:55:32 5026

原创 嵌入式C语言自我修养 (10):内联函数探究

10.1 属性声明:noinline &amp; always_inline这一节,接着讲 attribute 属性声明,attribute可以说是 GNU C 最大的特色。我们接下来继续讲一下跟内联函数相关的两个属性:noinline 和 always_inline。这两个属性的用途是告诉编译器:编译时,对我们指定的函数内联展开或不展开。它们的使用方法如下。static  inline...

2019-01-26 16:21:44 1047

原创 嵌入式C语言自我修养 (09):链接过程中的强符号和弱符号

9.1 属性声明:weakGNU C 通过 attribute 声明weak属性,可以将一个强符号转换为弱符号。使用方法如下。void  __attribute__((weak))  func(void);int  num  __attribte__((weak);编译器在编译源程序时,无论你是变量名、函数名,在它眼里,都是一个符号而已,用来表征一个地址。编译器会将这些符号集中...

2019-01-26 16:15:50 1051

原创 嵌入式C语言自我修养 (08):变参函数的格式检查

8.1 属性声明:formatGNU 通过 attribute 扩展的 format 属性,用来指定变参函数的参数格式检查。它的使用方法如下:__attribute__(( format (archetype, string-index, first-to-check)))void LOG(const char *fmt, ...)  __attribute__((format(p...

2019-01-26 16:10:07 799 5

原创 嵌入式C语言自我修养 (07):地址对齐那些事儿

7.1 属性声明:alignedGNU C 通过 attribute 来声明 aligned 和 packed 属性,指定一个变量或类型的对齐方式。这两个属性用来告诉编译器:在给变量分配存储空间时,要按指定的地址对齐方式给变量分配地址。如果你想定义一个变量,在内存中以8字节地址对齐,就可以这样定义。int a __attribute__((aligned(8));通过 aligned...

2019-01-26 16:04:28 1213

原创 嵌入式C语言自我修养 (06):U-boot镜像自拷贝分析:section属性

6.1 GNU C 的扩展关键字:attributeGNU C 增加一个 atttribute 关键字用来声明一个函数、变量或类型的特殊属性。声明这个特殊属性有什么用呢?主要用途就是指导编译器在编译程序时进行特定方面的优化或代码检查。比如,我们可以通过使用属性声明指定某个变量的数据边界对齐方式。__attribute__的使用非常简单,当我们定义一个函数、变量或类型时,直接在它们名字旁边添...

2019-01-26 15:57:44 1707 2

原创 嵌入式C语言自我修养 (05):零长度数组

5.1 什么是零长度数组顾名思义,零长度数组就是长度为0的数组。ANSI C 标准规定:定义一个数组时,数组的长度必须是一个常数,即数组的长度在编译的时候是确定的。在ANSI C 中定义一个数组的方法如下:int  a[10];C99 新标准规定:可以定义一个变长数组。int len;int a[len];也就是说,数组的长度在编译时是未确定的,在程序运行的时候才确定...

2019-01-26 15:49:09 1535

原创 嵌入式C语言自我修养 (04):Linux 内核第一宏:container_of

4.1 typeof 关键字ANSI C 定义了 sizeof 关键字,用来获取一个变量或数据类型在内存中所占的存储字节数。GNU C 扩展了一个关键字 typeof,用来获取一个变量或表达式的类型。这里使用关键字可能不太合适,因为毕竟 typeof 还没有被写入 C 标准,是 GCC 扩展的一个关键字。为了方便,我们就姑且称之为关键字吧。通过使用 typeof,我们可以获取一个变量或表达...

2019-01-26 15:44:08 913 6

原创 嵌入式C语言自我修养 (03):宏构造利器:语句表达式

3.1 基础复习:表达式、语句和代码块表达式表达式和语句是 C 语言中的基础概念。什么是表达式呢?表达式就是由一系列操作符和操作数构成的式子。操作符可以是 C 语言标准规定的各种算术运算符、逻辑运算符、赋值运算符、比较运算符等。操作数可以是一个常量,也可以是一个变量。表达式也可以没有操作符,单独的一个常量甚至是一个字符串,也是一个表达式。下面的字符序列都是表达式:2 + 3 2 i...

2019-01-26 15:39:12 876 1

原创 嵌入式C语言自我修养 (02):Linux 内核驱动中的指定初始化

2.1 什么是指定初始化在标准 C 中,当我们定义并初始化一个数组时,常用方法如下:int a[10] = {0,1,2,3,4,5,6,7,8};按照这种固定的顺序,我们可以依次给 a[0] 和 a[8] 赋值。因为没有对 a[9] 赋值,所以编译器会将 a[9] 默认设置为0。当数组长度比较小时,使用这种方式初始化比较方便。当数组比较大,而且数组里的非零元素并不连续时,这时候再按...

2019-01-26 15:34:32 864

原创 嵌入式C语言自我修养 (01):Linux 内核中的 C 语言语法扩展

1.1 Linux 内核驱动中的奇怪语法大家在看一些 GNU 开源软件,或者阅读 Linux 内核、驱动源码时会发现,在 Linux 内核源码中,有大量的 C 程序看起来“怪怪的”。说它是C语言吧,貌似又跟教材中的写法不太一样;说它不是 C 语言呢,但是这些程序确确实实是在一个 C 文件中。此时,你肯定怀疑你看到的是一个“假的 C 语言”!比如,下面的宏定义:#define mult...

2019-01-26 15:26:11 2448

原创 嵌入式C语言自我修养 10:内联函数探究

10.1 属性声明:noinline & always_inline 这一节,接着讲 __atttribute__ 属性声明,__atttribute__ 可以说是 GNU C 最大的特色。我们接下来继续讲一下跟内联函数相关的两个属性:noinline 和 always_inline。这两个属性的用途是告诉编译器:编译时,对我们指定的函数内联...

2019-01-26 06:26:42 170

原创 嵌入式C语言自我修养 01:Linux 内核中的 C 语言语法扩展

1.1 Linux 内核驱动中的奇怪语法 大家在看一些 GNU 开源软件,或者阅读 Linux 内核、驱动源码时会发现,在 Linux 内核源码中,有大量的 C 程序看起来“怪怪的”。说它是C语言吧,貌似又跟教材中的写法不太一样;说它不是 C 语言呢,但是这些程序确确实实是在一个 C 文件中。此时,你肯定怀疑你看到的是一个“假的 C 语言”! ...

2019-01-26 06:08:30 322

原创 跟涛哥一起学嵌入式 第12集:关于 apt-get 软件安装那些事儿

对于很多linux/ubuntu新手来说,要想在Ubuntu系统上熟练地安装、升级、卸载软件,确实是挺考验人的一件事,会遇到各种各样的问题,有时候会把人搞得很不耐烦,打击人的学习积极性。Ubuntu一般使用apt-get命令 (ubuntu16.04版本以后也可以使用apt) 来安装、升级、卸载软件。比如我们想安装一个软件,常用下面的命令进行安装: $ apt-get install...

2018-11-26 15:13:34 371

原创 跟涛哥一起学嵌入式16:关于 apt-get 软件安装那些事儿

对于很多linux/ubuntu新手来说,要想在Ubuntu系统上熟练地安装、升级、卸载软件,确实是挺考验人的一件事,会遇到各种各样的问题,有时候会把人搞得很不耐烦,打击人的学习积极性。Ubuntu一般使用apt-get命令 (ubuntu16.04版本以后也可以使用apt) 来安装、升级、卸载软件。比如我们想安装一个软件,常用下面的命令进行安装: ...

2018-11-26 07:01:38 404

原创 跟涛哥一起学嵌入式14:Autotools发展史

在linux下面撸过代码、做过开发的,想必都听说过Makefile。对,是Makefile,不是make love。如果你看成了后者,只能说:同志,你的三观有问题,需要格式化你的硬盘! 在linux开发程序,没有集成开发环境IDE(integrated development...

2018-11-19 00:55:55 167

原创 跟涛哥一起学嵌入式 第11集:一个实现锁机制非常有意思的宏

QQ群(宅学部落)有位学员问了一个很奇怪的宏,觉得很有意思,特拿来分享,它的定义如下:我们知道,宏定义其实就是为了方便,给一串代码字符串定义一个别名。有时候字符串过于复杂,我们可以分多行书写,然后使用逻辑连接符“\”连接起来,表示一个完整的字符串。但是分析上面的宏定义,你会发现它分别定义了2个宏,但是呢,又使用了一对大括号括起来,很有欺骗性:看起来很像语句表达式,但是呢,有没有小括号括起...

2018-11-17 11:26:21 308

原创 跟涛哥一起学嵌入式11:一个实现锁机制非常有意思的宏

QQ群(宅学部落)有位学员问了一个很奇怪的宏,觉得很有意思,特拿来分享,它的定义如下: 我们知道,宏定义其实就是为了方便,给一串代码字符串定义一个别名。有时候字符串过于复杂,我们可以分多行书写,然后使用逻辑连接符“\”连接起来,表示一个完整的字符串。但是分析上面的宏定义,你会发现它分别定义了2个宏,但是呢,又...

2018-11-17 00:25:07 184

原创 Linux系统编程:入门篇视频教程-王利涛-专题视频课程

Linux系统编程视频课程为《Linux系统编程》入门篇,主要针对零基础的Linux开发学员科普Linux系统编程的概念以及需要掌握的各种技能,掌握Linux命令编写、Linux学习路线并熟悉嵌入式设备编程的方法。为后续的Linux系统编程深入学习打下良好的基础。...

2018-10-17 11:22:26 4128

原创 跟涛哥一起学嵌入式 第10集:关于校招,应届生都应该看一看

金九银十,是应届生求职的黄金时期。每年这个时候,各大企业、名企一般都会到校园去做各种宣讲、面试招聘。对于大部分应届生来说,通过校园招聘渠道,找到一份靠谱工作的概率远远胜过社会招聘。然而很多应届生却对校招的重视度不够、准备不充分,结果跟一些好的工作机会错失交臂。尤其是一些福利待遇、发展空间较好的大公司、名企,错过校招这个机会,以后再想从社招其他渠道应聘,难度往往会大很多。校招对应届生为什么如此重...

2018-09-23 07:26:50 752

原创 跟涛哥一起学嵌入式 第09集:ARM启动过程中你不知道的小秘密

学过嵌入式、玩过开发板的同学可能都知道这些常识:我们的ARM开发板有多种启动方式,可以从NORFlash启动、可以从NANDFlash启动、也可以从SD卡启动。当系统上电后,ARM会从U-boot启动,然后U-boot将自身代码拷贝到内存DDR SDRAM中,接着PC指针指向内存,从内存中不断地取指令、翻译指令、运行指令。然而,现实果真如此吗?U-boot是系统上电运行的第一行代码吗?ARM支...

2018-09-23 07:22:49 551

原创 跟涛哥一起学嵌入式 第08集:ARM跳转指令深度剖析

 跳转指令顺序、选择、循环是构建程序的基本结构,任何一个逻辑复杂的程序基本上都可以由这三种程序结构组合而成。而跳转指令,则在子程序调用、选择、循环程序结构中被大量使用。程序的跳转是如何实现的呢?在了解这个机制之前,我们需要先了解一下程序计数器PC。程序计数器PC,是CPU的寄存器列表中最重要的一个寄存器。它就像一杆枪,指哪打哪:你给PC指针赋值哪个地址,CPU就会到PC指针指向的这个地...

2018-09-23 07:17:27 842 1

原创 跟涛哥一起学嵌入式 第07集:GNU/Linux和Linux的区别

GNU、GNU/Linux、Linux 之间到底是什么关系?什么是自由软件?什么是GPL协议?什么是自由软件基金会?什么是GNU耻辱榜?有多年开发经验的Linux工程师,估计也没怎么关注过这些问题。今天就以自由软件发展的角度,给大家科普一下它们之间的关系。想了解他们之间的关系,从Windows说起估计比较容易理解。Windows操作系统,大家都很熟悉:当微软发布OS新版本,你迫不及待地把它安装...

2018-09-23 06:52:50 512

原创 跟涛哥一起学嵌入式 第06集:后ARM时代,嵌入式工程师的自我修养

大家好,我是涛哥,今天我们继续聊一聊嵌入式的学习,由于最近比较忙,就把以前写的一篇文章重新发给大家,里面谈到的一些学习方法和学习经验,还是很值得参考一下的。 嵌入式学习的一些概念理解误区很多嵌入式初学者认为,学嵌入式,就是学习ARM,就是学习开发板。买一块开发板,然后在上面“移植”u-boot、Linux内核,再使用busybox制作一个根文件系统,大功告成!觉得可以出去找工作了。这其...

2018-09-23 06:50:26 1249 1

原创 跟涛哥一起学嵌入式09:ARM启动过程中你不知道的小秘密

学过嵌入式、玩过开发板的同学可能都知道这些常识:我们的ARM开发板有多种启动方式,可以从NORFlash启动、可以从NANDFlash启动、也可以从SD卡启动。当系统上电后,ARM会从U-boot启动,然后U-boot将自身代码拷贝到内存DDR SDRAM中,接着PC指针指向内存,从内存中不断地取指令、翻译指令、运行指令。 然而,现实果真如此吗?U-boot是系统上电运行的...

2018-08-14 00:31:41 229

原创 C语言嵌入式Linux编程第9期:CPU和操作系统入门-王利涛-专题视频课程

操作系统和多任务编程,是很多嵌入式学员学习的难点和重点。本期课程针对嵌入式学员,尤其是非CS专业的嵌入式学员,补充CPU工作机制、操作系统核心技术等理论短板,为后续的Linux内核、驱动开发等高阶课程打下良好的理论基础。...

2018-08-06 18:07:54 614

公众号文章专栏:跟涛哥一起学嵌入式.rar

关于嵌入式、C语言、Linux相关的干货文章集锦。分享关于嵌入式、C语言、内核驱动开发、求职面试、行业分享等最近几年的公众号文章精华版

2020-04-25

跟涛哥一起学嵌入式 23:零基础扫盲什么是人工智能.pdf

该篇文档是人工智能科普文档,给新手科普人工智能的基本概念:什么是人工智能?AI和大数据、云计算、物联网的关系;什么是机器学习?大脑的学习原理;人工神经网络;神经网络的训练过程;什么是深度学习?什么是边缘计算?索菲亚骗局;未来的人工智能是什么样的?

2020-03-09

跟涛哥一起学嵌入式30:C语言枚举类型深入剖析.pdf

C语言枚举类型深入讲解,超详细:enum经常使用的三种方法;枚举的本质;枚举和宏定义的对比分析;Linux内核中的枚举类型及使用技巧分析;使用枚举需要注意的一些细节,在这篇文档中都会详细讲解。

2020-03-08

Git零基础实战视频教程

Git零基础入门实战视频教程,Git在实际开发中的常用技能零基础讲解

2019-01-26

git零基础实战

零基础学习git,值得收藏的一份文档

2016-05-29

空空如也

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

TA关注的人

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