时间大约在2015年,Arm第一次在 MDK 5.20 中引入了Arm Compiler 6(那时候的版本是 6.9),正式拉开了Arm官方编译器从第五版(armcc)到第六版(armclang)升级替换的序幕……
在前几期的【编译器玄学报告】中,我们分别介绍了armcc和armclang的一些比较“阴间”的坑——有些是编译器的bug,有一些就单纯只是C语法上的一些陷阱而已,还没有看过的小伙伴赶快点开下面的链接来看看:
作为嵌入式软件工程师,你是否听说过“无副作用(no side-effect)的代码”这个概念?
前边有篇文章讲过怎么提高Touchgfx的开发效率,[小技巧]使用vscode和armclang编译器改善MDK开发效率。但是由于touchgfx的代码量过于庞大,对于编译的速度来说还是不够快,接下来使用静态库的方式更进一步提升开发效率。
相信很多人都遇到过这样的情况:在一个Cortex-M嵌入式应用中要实现一个精确的毫秒级延时并不困难——如果你有RTOS,在任务中使用诸如 os_sleep(<休眠时间>)之类的函数就可以轻松实现;如果你是裸机,也可以使用每个Cortex-M芯片都默认携带的SysTick来实现一个,甚至Arm官方的CMSIS都提供了现成的API,即SysTick_Config(<中断间隔的时钟周期数>):
相信很多人都遇到过这样的情况:在一个Cortex-M嵌入式应用中要实现一个精确的毫秒级延时并不困难——如果你有RTOS,在任务中使用诸如 os_sleep(<休眠时间>) 之类的函数就可以轻松实现;如果你是裸机,也可以使用每个Cortex-M芯片都默认携带的SysTick来实现一个,甚至Arm官方的CMSIS都提供了现成的API,即SysTick_Config(<中断间隔的时钟周期数>):
开发过单片机的同学都对keil不陌生,我们知道keil集成了代码编辑,编译,和调试的功能,极大的方便了我们的开发。但是keil万年不变的代码编辑器对于阅读源代码来说是极其不友好,还有那个已经停止维护的Arm Compiler 5不仅编译慢,还存在隐藏的BUG,都让人难以忍受。
素材来源:https://blog.csdn.net/qq_34430371/article/details/125820927
它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。
然而,既然你点开了这篇文章,无论是否真的有这样的需求,至少说明你对这样的搭配还是“颇有些好奇”的。我就不去担心背后的真正原因了,就让我们速速切入正题,进入实操环节吧。
如果说“喜新厌旧”是人类的天性,那么嵌入式程序员一定是特例——他们尤其不喜欢更换自己用惯了的工具——拿IDE来说吧,相当一部分人仍然抱着老版本的MDK迟迟不愿意更新,这里的原因很多:
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是一个奇怪的Keil MDK下变量链接强制对齐报错问题。
在中文嵌入式环境中,时不时的总能看到不少朋友”堆”“栈“傻傻分不清楚,我很早之前在文章《漫谈C变量——夏虫不可语冰》介绍过二者的区别,这里就不再深入展开,总之:
简而言之,通过宏所确定的内容是在编译时刻就固化下来的。很多人都了解这一点,也很擅长使用宏的方式来固化一些常数,比如,教科书中最常见的一个例子是:
概述 2022年4月,灵动微电子发布了搭载安谋科技“星辰”STAR-MC1处理器的全新高性能 MM32F5 微控制器系列。该系列在内核、总线和外设配置等多个方面进行了创新,内核上更是首次搭载了 Armv8-M 架构的 “星辰” STAR-MC1 处理器。很高兴通过ARM中国拿到该芯片的开发板(可以搞事情) MM32F5270 是一款搭载了安谋科技 STAR-MC1 内核的 MCU 产品,其工作频率可达 120MHz,内置多达 256KB Flash 和 192KB RAM,配置浮点运算单元(Floati
在本系列前面的文章《实时性迷思(2)——“时间片轮转”的沙子》中,我们详细介绍了实时性的概念、澄清了一些常见的误解并介绍了一种评估实时性任务对CPU资源占用的方法,即:
市面上大部分C程序员对宏存在巨大的误解甚至是恐惧,并因此极力避免宏的适度使用,甚至将宏在封装中发挥正确作用的行为视作是对C语言的“背叛”——震惊之余,对于为什么大家会有这种想法的原因,我曾经一度是非常“傲慢的”,这种傲慢与某些人宣称“穷人都是因为懒所以才穷”时所表现出的那种态度并无任何本质不同——然而我错了,在闲暇之余认真看了不少经典的C语言教材后我才意识到:
笔者接触嵌入式领域软件开发以来,几乎用的都是 ARM Cortex M 内核系列的微控制器。感谢C语言编译器的存在,让我不用接触汇编即可进行开发,但是彷佛也错过了一些风景,没有领域到编译器之美和CPU之美,所以决定周末无聊的休息时间通过寻找资料、动手实验、得出结论的方法来探索 ARM CPU 架构的美妙,以及C语言编译器的奥秘。(因为我个人实在是不赞同学校中微机原理类课程的教学方法)。
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。
导语 | 最近,在写Go代码的时候,我发现了其特别有意思的两个奇技淫巧或者黑魔法,若使用得好可以提升性能,用得不好就会招来恶魔,嘿嘿,于是写下这篇文章和大家分享一下。 一、魔法:调用runtime中的私有函数 按照Go的编译约定,代码包内以小写字母开头的函数、变量是私有的: package test // 私有func abs() {} // 公共func Abs() {} 对于test包中abs函数只能在包内调用,而Abs函数却可以在其它包中导入后使用。 私有变量、方法的意义在于封装:控制
在鸽了将近4年之后,我终于良心发现,决定重新恢复【裸机思维】公众号的更新。谢谢大家的长久守候和等待——非常非常抱歉。这段期间,发生了很多事情,我也憋了很多内容想跟更多的朋友分享。作为一个开端,我准备踏踏实实的从一些小的话题开始,慢慢恢复写作状态。《编译器的玄学研究报告》就是这样一个系列,我会为大家分析一些常见的、同时也是最新的、嵌入式编译器使用中可能会遇到的问题——尤其是那些看似是玄学的现象——为大家庖丁解牛、由浅入深,不仅给个痛快,也给大家个明明白白——我最终的目的是希望大家不惧怕优化,不要把编译器的行为看作是玄学,最终人人都拥有屈驾最高优化等级的知识和信心。
在之前的文章《【嵌入式秘术】相约榨干SysTick的每一滴汁水》里,我们介绍了一个以“寄居”形式(也就是在不影响用户已有SysTick应用的情况下)测量CPU性能的开源函数库 perf_counter。其仓库连接如下:
最近受到极客社区的邀请,我有幸为大家献上了一期名为“Arm-2D初探——填补空白还是屋上架屋”的公开课。原本计划是1个小时,无奈说的太嗨了,一不小心就讲了3个小时……
随着时间的推移,从4月份更新第一个版本以来,Arm-2D也逐渐走入成熟期,截止到我编写这篇文稿的时间,其版本已经来到了0.9.8,而Github开发分支上的版本也进入了0.9.9 dev。
甚至,即便是作为懒汉的你,也能从众多方案中找到一种直接尝试Arm-2D例程的方法。
实际上,不光很多明眼人看得出来,Arm-2D自己也在仓库的README里写的明明白白:
想必很多人在第一次面对 OOPC(Object-Oriented-Programming-with-ANSI-C)的时候,都会情不自禁的发出类似的疑问。其实,任何针对上述问题的讨论,其本身都是充满争议的——换句话说,无论我给出怎样的答案,都无法令所有人满意——正因如此,本文也无意去趟这摊浑水。
这意味着,本世纪初应用在个人电脑上的一些技术也可能会被逐步引入到深度嵌入式系统上(Deep Embedded System)——这类系统的典型也就是大家所熟知的单片机或者说Cortex-M处理器。
你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的 Make 工具,就得为每一种标准写一次 Makefile ,这将是一件让人抓狂的工作。
领取专属 10元无门槛券
手把手带您无忧上云