打印
[软件资料]

做嵌入式开发C语言要学到什么水平?

[复制链接]
2539|54
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcky001|  楼主 | 2023-6-2 16:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C语言本身很简洁的,除了34个关键字(ANSI标准,但C99标准新增几个关键字及特性,用来定义新的数据类型、变长数组等)、40多个运算符、再明白数据的基本类型、程序的顺序、分支、循环3种基本结构,就OK了,就这点东西。一般,看上一周左右基本上就可以掌握。

但是,掌握了这些,你就觉得自己精通C语言、可以熟练运用C语言进行编程了吗?绝不可能。

人工智能时代,嵌入式和物联网的薪资也是水涨船高,嵌入式开发和物联网开发技术就是让物体变得更智能的技术。

学习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语言的基本概念是否掌握?是否能用一句话概括出来?

Plaintext
标识符、关键字、预定义标识符、分隔符、语法检查、语义检查、
表达式、语句、左值、对象、结合性、左结合右结合、未定义行为

使用特权

评论回复
沙发
jcky001|  楼主 | 2023-6-2 16:49 | 只看该作者

2)一个sizeof(int)引发的思考

  • C++
  • •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)自增运算符带来的思考

下面一段程序,在不同的编译器上编译,结果是多少,一样吗?为什么?

  • Perl
  • i=1,j=2;
  • printf(“%d\n”, i++*i++);
  • i+++j;




4)代码分析

使用tc、C-free、GCC、VC++6.0、visual studio分别编译下面代码,会出现什么问题?

  • C++
  • int main(){
  • int i; //定义一个变量int a[0];
  • printf("hello world!\n");
  • int j;
  • for(int k=0;k<10;k++);
  • return 0;
  • }




5)在linux环境下,运行下面代码,会出现什么问题?

  • C++
  • int * data_copy ( int *p){
  • int buffer[8192*1024];
  • memcpy ( buffer, p, 8192*1024);
  • return buffer;
  • }



使用特权

评论回复
板凳
LOVEEVER| | 2023-10-20 15:39 | 只看该作者
楼主继续分析相关差异,讲解一下细节

使用特权

评论回复
地板
LOVEEVER| | 2023-10-21 17:12 | 只看该作者
又详细确认了一下,sizeof(int)也是标准库函数的一个具体实现

使用特权

评论回复
5
小小蚂蚁举千斤| | 2023-10-23 13:49 | 只看该作者
基本都是自带编译器进行相关处理

使用特权

评论回复
6
星辰大海不退缩| | 2023-10-25 13:40 | 只看该作者
知识是***学不完的只能是在有限的领域不断深入

使用特权

评论回复
7
中国龙芯CDX| | 2023-11-2 09:17 | 只看该作者
指针这一项就够琢磨的

使用特权

评论回复
8
小夏天的大西瓜| | 2023-11-2 15:43 | 只看该作者
单纯写这些会不会被智能代替,输入一些指令人后自动写?

使用特权

评论回复
9
小小蚂蚁举千斤| | 2023-11-3 14:52 | 只看该作者
只能说学无止境,凑合能用解决问题就行

使用特权

评论回复
10
1988020566| | 2023-11-5 17:27 | 只看该作者
做嵌入式开发需要掌握C语言的基本语法和数据结构,熟悉嵌入式系统的架构和工作原理,了解操作系统和计算机底层原理。

使用特权

评论回复
11
wwppd| | 2023-11-5 17:46 | 只看该作者
掌握嵌入式系统的开发工具,例如编译器、调试器、仿真器、嵌入式开发板等。

使用特权

评论回复
12
sdlls| | 2023-11-5 19:52 | 只看该作者
具备相关的项目经验和教育背景也是非常重要的。

使用特权

评论回复
13
modesty3jonah| | 2023-11-5 20:03 | 只看该作者
熟练掌握C语言语法和数据结构,能够编写高质量的代码。

使用特权

评论回复
14
hilahope| | 2023-11-5 20:15 | 只看该作者
熟悉嵌入式系统的特性和开发流程,包括硬件接口、操作系统、调试工具等。

使用特权

评论回复
15
plsbackup| | 2023-11-5 20:30 | 只看该作者
在做嵌入式开发时,C语言的掌握程度会根据具体的项目需求和岗位特点有所不同。

使用特权

评论回复
16
geraldbetty| | 2023-11-5 20:43 | 只看该作者
基础的C语言语法:包括变量、数据类型、运算符、控制结构(如if-else、switch-case、for、while等)、函数等基本概念和使用方法。

使用特权

评论回复
17
beacherblack| | 2023-11-5 20:52 | 只看该作者
指针的基本概念和使用方法,能够正确地使用指针进行内存操作。

使用特权

评论回复
18
saservice| | 2023-11-5 21:05 | 只看该作者
常用的C语言标准库函数              

使用特权

评论回复
19
phoenixwhite| | 2023-11-5 21:14 | 只看该作者
了解RTOS、DSP、网络编程等相关知识。 总之,要做好嵌入式开发,需要深入理解和熟悉 C 语言以及相关的嵌入式技术,能够解决实际问题。

使用特权

评论回复
20
jackcat| | 2023-11-5 21:27 | 只看该作者
做嵌入式开发,对C语言的要求比较高

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1510

主题

4547

帖子

6

粉丝