开启辅助访问 切换到窄版

打印 上一主题 下一主题

为何要学习C语言,以及如何学习C语言

[复制链接]
楼主
跳转到指定楼层
| 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有关为何要学习C语言以及如何学习C语言这个话题,可以说和“一千个读者就有一千个哈姆雷特”一样,每个人都有每个人的见解和学习方式。回想起10年前的那个暑假,自己跟着某天翔七天学会单片机的视频教程一步一步学习C语言、单片机的日子,不由得感慨万千,想起自己在开发路上走过的路,坎坎坷坷。。。
废话说多了,,,有关本文的主题,个人感觉,这个首先该看自己的定位在哪,不同的目的会有不同的过程,一般学习C语言分为以下几种情况:
1.学校开设这门课程,学习C语言仅仅是为了应付考试。如果是这种情况,跟着老师步子走,把课后题多做一些,多上机练一练,考个高分还是不成问题的。



2.业余编程,把C语言当成一种爱好。如果是这种情况,可以较为深入的学习一下C语言,多看一些源码,看看别人怎么用的,然后多多将自己的实际问题转化成C代码实现一下就OK了。
3.要从事其它语言开发,把C语言当成一种敲门砖。这种情况比较复杂,因为我曾经走过这条路子,14年曾经尝试着转纯软件开发,后来感觉那种日子不如搞软硬结合来的爽快、成就感强,就放弃了。抱这种目的的,也分情况,如果是从事web开发这个方向,学不学C语言作用都不是很大,尤其是从事前端开发,有没有C基础,几乎对前端的学习没有一点帮助。如果是从事后端开发,有C基础肯定比没有好点,但是这种付出不成比例,C指针那块太耗时、耗力,建议直接上后端开发语言(比如Javaphp等)即可。


4.嵌入式开发。这种情况,如果纯裸机开发,就掌握了C基础以后,多看别人的代码,多学编程思路,多使用结构体封装,多使用模块化编程,便于代码移植、复用,多从项目整个框架的层面考虑就可以了。如果是开发比较轻量级的系统,比如FreeRTOSuCOS等,可以掌握C基础以后,直接上源码即可,多研究下这些系统的功能是如何实现的,掌握指针与数组、函数的关系,然后多加分析、练习就差不多了。这种情况,建议当你感觉到没什么进步的时候,找一个固定平台学习一下汇编,推荐ARM平台的汇编,因为ARM汇编标准化比较高,而且将来一定是ARM的天下,现在Cortex-M0核的MCU已经2块钱以下了,低端到高端产品线超级丰富,选择性太好了,还犹豫啥呢?!对照着指令手册,慢慢分析下自己的C源码产生的汇编是什么样子、该如何优化,看下自己的C代码的变量、函数等内容的地址是怎么分布的、字节对齐有什么效果等等,调试的时候多借助下映射、链接文件,会极大提高调试效率。这个阶段,需要熟练掌握、随意应用指针与结构体、数组、函数的转化的时候,就说明已经可以结束了。



5.安全、内核、驱动开发。这种情况,就需要深入学习一下C语言了,不仅要对C语言的语言特性了如指掌,也要对C代码转化为汇编以后的行为、特性进行分析,这种能力越熟练越好。我本人也是一直在内核、驱动两方面折腾,这方面还算比较了解,可以多说一点我的学习过程。首先我们要做好长期吃苦的准备,但是这种苦是值得的,我们要明白,不吃学习的苦就得吃生活的苦,而生活的苦比学习的苦苦太多,在该吃苦的年纪,就应该多吃点苦,既然这样,那我们为何不多吃点学习的苦,少吃点生活的苦呢。这个阶段是建立在第4阶段之上的,要想从事这类开发,不仅要熟练掌握操作系统原理这种宏观、原理层面的技术,也要对C语言、汇编、工具链都有所了解,而且,这些内容掌握越多越好、越深入越好,我们要掌握控制工具链对自己源码(可能不仅仅有C程序)“加工”的过程,还要考虑这种C源码会产生何种汇编代码,会导致机器做出什么样的行为。这个阶段,当你可以使用工具链将程序的各个段按自己意愿进行分布、排列;当给你一段可执行程序代码,你可以使用工具链导出反汇编文件,进而分析出它的功能的时候,就差不多可以了~



总之,学习是一个反复的过程,嵌入式开发知识面广、体系杂,要想成为高手,就需要时刻保持一颗学习的心。本号接下来会连载《随时随地学习C语言》系列,将本人在嵌入式、内核及驱动开发路上的经验、感悟及心得与你分享,绝对干货满满,赶紧上车吧~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表