随笔分类 - 编译
摘要:大多数情况,嵌入式软件工程师并不需要知道gcc编译器是工作的,但是随着调试深入,了解gcc在软件中的一些常见的用法大有裨益。 这里列一下遇到的一些嵌入式软件中用到的一些gcc知识。 1 GCC关闭某函数的优化 软件库使用O2/O3优化,有时debug时,需要关闭其中某些函数的优化(即使用此函数使用O
阅读全文
摘要:GDB是一个由GNU开源组织发布的,基于命令行的、功能强大的程序调试工具。可以让开发者能看到程序在执行时“内部”发生了什么,或者程序崩溃的现场。下图是gdb的吉祥物--弓箭鱼。 GDB主要做以下4种事情: 启动程序 使程序在指定条件下停止(比如打断点) 当程序停止时,检查发生了什么 改变程序的内容,
阅读全文
摘要:gcc之ld链接脚本 这一篇准备谈谈链接的一些基础知识以及gcc ld链接脚本等知识。文中提到的内容都是基于linux系统。 1 为什么要链接? 假如我们将所有代码写到一个文件中(且不需要其它库支持)时,就不需要链接器了。很显然,如果代码开发规模很大,放到一个文件里缺点太多,如下: 代码阅读维护太困
阅读全文
摘要:本系列是记录 https://github.com/ttroy50/cmake-examples 的学习过程,通过cmake examples仓库中的例子来一步步学习cmake。 ## 1 搭建环境 搭建cmake编译环境可以参考 cmake-examples/README.adoc,本文直接使用d
阅读全文
摘要:本篇翻译自 《Learn Makefiles With the tastiest examples》,翻译主要是意译,加入了一些个人理解。 熟练英文的朋友请直接阅读原文。链接见: https://makefiletutorial.com/#getting-started 以下是翻译: 写这篇文档的原
阅读全文
摘要:1 概要 软件的分层使软件的逻辑关系更清晰,但是也带来一个副作用,即Makefile也变得复杂了。道理显而易见:对于一个简单项目,如果所有文件都放在同一个文件夹内,Makefile写起来也会十分简单,但是我们不能一直停留在原始时代,当复杂项目的源文件按类型、功能、模块等分散到不同路径时,需要我们掌握
阅读全文
摘要:## risc-v GCC内嵌汇编 ### 1 背景 有时候需要对比不同指令的性能,这时候如果会手撸汇编是最方便的,但汇编掌握起来太麻烦,我们可以使用内嵌汇编,在C代码中直接内嵌汇编语句,大大方便了程序的设计。 ### 2 内嵌汇编语法 ~~~c asm volatile ( "Instructio
阅读全文