5、嵌牛IT观察——嵌入式的编程语言

姓名:刘欢            学号:19020100155           学院:电子工程学院              班级:1902012

原文转自:https://zhuanlan.zhihu.com/p/294255155

【嵌牛导读】我们常见的对于底层编程的语言是C和C++,嵌入式既包含了底层的学习开发,也存在硬件的编程应用,为了更好的学习嵌入式,我们首先需要掌握嵌入式的编程语言。

【嵌牛鼻子】嵌入式  编程语言

【嵌牛提问】嵌入式应该适用什么编程语言呢?

【嵌牛正文】

嵌入式开发几乎离不开C/C++,虽然在一些嵌入式linux的开发场景可以选python、java,不过也需要BSP和SDK的支持,像操作系统移植、驱动开发几乎就是C的天下,最近有传闻rust也能开发linux内核模块了,但距离大规模使用看上去还很远,C++因为提供了比C更现代的面向对象和模板等特性,并且有大量开源代码库,在嵌入式linux领域也有大量的使用。如果是单片机开发,不管是裸机还是RTOS,C基本就是不二选择了,这么多年下来,不管是互联网资源还是各大公司的技术积累,C和C++都是最多的,总而言之呢,所以作为一个嵌入式软件工程师,这就是必备技能。

某种程度上来说,编程语言也体现了嵌入式开发的一些特点,很多时候我们需要面向硬件编程,这个面向硬件有两层含义。

第一是说需要了解硬件特性,然后通过编程来访问硬件,例如通过读写寄存器完成对外设的控制,简单如GPIO,复杂一些像Ethernet控制器,除了了解硬件的操作逻辑,也需要了解引脚、电平、IO复用、、硬件缓存、DMA这些概念。

第二是说硬件资源带来的限制,这是由于嵌入式产品通常针对具体系统,涉及的技术约束大概有计算能力,IO接口,内存,体积,功耗,等方面的约束,在这些约束下进行技术选型和系统设计,很多时候硬件选单片机,ARM,PowerPC,软件使用裸机,RTOS或经过裁剪的linux是比较合适的选择,就是合适,我们也可以用牛刀杀鸡,但是没必要。

从面向硬件这个角度出发,就要求编程语言首先能够方便的访问硬件,同时又足够有效率,不因语言本身占过多资源,这个时候需要虚拟机或解释器的语言就不太合适,而C/C++通过指针(地址)访问硬件的操作最自然不过,也可以做到较少的资源消耗。

C/C++作为系统级的开发语言,虽然强大但也难以驾驭,比如说堆上内存的管理留给了开发人员,相比go这样带内存回收机制的语言虽然效率更好,也更容易出bug,稍不留神就会崩溃给你看,以至于为了解决这个问题,像航天、汽车电子等比较注重安全的行业,在编程规范里干脆不允许使用malloc和free。

不动态分配内存还可以做到,但不用指针就几乎不行了,可以说指针是C/C++暴露出来的,最不安全的点,例如你明明定义了一个char类型的变量(在栈上面分配了内存),我们仍然可以用一个其他类型的指针(int或函数指针)通过强转指到这个地址,编译完全没有问题,只有在运行时问题才会暴露,没错,有指针存在就是这么不安全。

如果说编程规范是一个应用层面的补丁,那么C++就是在语言层面的一个补丁,首先为了解决指针问题,C++提出了引用。引用是个别名,更具体的说是变量,也就是一块有名字的内存的别名,因此必须在定义的时候初始化,我们也可以认为引用最大的作用,是把地址这个东西屏蔽掉了,因此我们没有办法像使用指针一样去随意读取甚至篡改数据。但是C++和C又是完全兼容的,这是一个历史特点,指针还是存在的,在C++11之后,更鼓励的是使用shared_ptr等一众智能指针,为的就是解决裸指针的问题,其本质是使用栈内存自动回收的机制,把程序员从内存管理的机制里解放出来。

这么看上去,嵌入式开发对技能要求还蛮高的,对一些造轮子的开发人员来说也确实是这样,既要懂硬件也要精通软件,但这样的开发人员并不占大多数,毕竟轮子造出来是要复用的嘛,大部分嵌入式工程师其实接触更多的还是业务,能熟悉业务并且在项目里摸爬滚打一段时间,做到能胜任工作还是没问题的。

近几年自动驾驶、智能制造、物联网等话题的火热,也让市场上嵌入式的需求居高不下,这当然是好事,新的领域带来更多的工作机会,同时也让嵌入式开发有了新的特点,例如需要处理的数据更多,有更多需要联网的场景,对开发人员来说也就意味着更好的硬件规格和更复杂的软件,也许以后会催生出其他的选择,但就目前来说C和C++还是嵌入式的首选。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,875评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,569评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,475评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,459评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,537评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,563评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,580评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,326评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,773评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,086评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,252评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,921评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,566评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,190评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,435评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,129评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,125评论 2 352

推荐阅读更多精彩内容