栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

嵌入式开发学习路线

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

嵌入式开发学习路线

嵌入式开发学习路线:

人工智能时代,嵌入式和物联网的薪资也是水涨船高,嵌入式开发和物联网开发技术就是让物体变得更智能的技术。学习C语言也是一样,尤其是对于嵌入式底层工程师来说,我们要学习的不仅仅是C语言的基本语法,更重要的是如何通过C语言这个工具,去理解我们的计算机系统、CPU架构:
1)程序到底是如何编译、链接、和运行的?
2)运行时各种代码段、数据段、BSS段、堆栈在内存中如何分布,如何管理的?
3)程序在不同的平台(ARM、X86)、裸机环境或有OS的环境(linux、uc/os等)有何不同?
4)静态链接与动态链接的过程有何差异,为什么要使用动态链接?共享库?
5)不同的开发平台、IDE、编译器,C语言的编程有何差异和不一样的地方,如何做到跨平台、增强程序的可移植性和鲁棒性?
6)各种变量名、函数名、数组名、指针的本质是什么?编译器是如何处理的?搞懂了这些语言背后计算机系统知识,还远远不够,还要去学习操作系统相关的知识:进程、线程、中断、内存管理对于嵌入式开发来说,还要学习ARM等处理器架构知识、GCC编译器对C标准的各种扩展,各种生僻的用法,否则你去看linux内核代码、驱动代码,总感觉“怪怪的”,好像哪里不对,跟平时的C语言不太一样,感觉自己学的是一门假C语言…C语言的精华是内存、存储管理。各种隐藏很深的bug其实也跟内存有关:内存越界、内存泄露、野指针等等,一个不经意的疏漏,就可能阴沟里翻船。就是有多年工作经验的工程师也不敢保证自己写的代码一定没有问题。C语言默认大家都是大牛、计算机专家,可惜现实中往往太多挖坑小能手,太多猪一样的队友。如何养成良好的编程习惯,避免各种bug,也是C语言进阶学习的一个重点。为了测试一下你对C语言的掌握程度,下面的几个测试题,可以自我测试一下,检测一下自己的C语言水平,是否达到嵌入式工程师(尤其是内核驱动工程师)的要求:
1)你对以下C语言的基本概念是否掌握?是否能用一句话概括出来? 标识符、关键字、预定义标识符、分隔符、语法检查、语义检查、表达式、语句、左值、对象、结合性、左结合右结合、未定义行为
2)一个sizeof(int)引发的思考•sizeof是函数吗?是关键字?预定义标识符? 后两者有何区别? •在32位和64位的Windows7系统下,结果分别是多少? •在32位和64位X86 CPU系统下,结果分别是多少? •在8位、16位、32位ARM系统环境下运行结果分别是多少? •在Turbo C、keil、GCC-32、GCC-64开发环境下,结果是多少? •使用gcc –m32生成一个32位代码,运行在64位环境下,结果? 使用gcc –m64生成一个64位代码,运行在32位环境下,结果?
3)自增运算符带来的思考下面一段程序,在不同的编译器上编译,结果是多少,一样吗?为什么?i=1,j=2;printf(“%dn”, i++i++);i+++j;
4)代码分析使用tc、C-free、GCC、VC++6.0、visual studio分别编译下面代码,会出现什么问题?int main(){ int i; //定义一个变量 int a[0]; printf(“hello world!n”); int j; for(int k=0;k<10;k++); return 0; }
5)在linux环境下,运行下面代码,会出现什么问题?int * data_copy ( int p){ int buffer[81921024]; memcpy ( buffer, p, 8192
1024); return buffer;}
下面是B站羊哥哥的学习路线,详细情况看羊哥的视频
https://www.bilibili.com/video/BV17K411n7XH?spm_id_from=333.999.0.0&vd_source=1cf13a6de282c8222e50bb7f314d15c8

标题
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1022293.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号