【0基础嵌入式学习日志】Day01:C语言结构体、头文件与故障码实操记录
【0基础嵌入式学习日志】Day01C语言结构体、头文件与故障码实操记录一、学习背景最近开始系统学习嵌入式软件开发。作为0基础入门阶段第一天主要围绕C语言工程结构、头文件引用、结构体变量、故障码定义以及GCC编译流程进行实操。本次练习的目标不是写复杂程序而是理解一个嵌入式小工程最基本的组织方式include目录用于存放头文件src目录用于存放源文件build目录用于存放编译后的可执行文件通过gcc命令完成编译和运行。二、工程目录结构本次练习的工程目录如下Embedded_14Days/day01 ├── include │ └── fault_code.h ├── src │ └── main.c └── build 其中 fault_code.h用于定义系统故障码 main.c主程序文件 build存放编译生成的可执行文件。 在 include/fault_code.h 中我定义了几个常见的故障码 c#ifndef FAULT_CODE_H#define FAULT_CODE_H#define FAULT_NONE 0x0000#define FAULT_UART_TIMEOUT 0x0001#define FAULT_CAN_ERROR 0x0002#define FAULT_LED_ERROR 0x0004#define FAULT_SENSOR_ERROR 0x0008#define FAULT_OVER_TEMP 0x0010#define FAULT_LOW_VOLTAGE 0x0020#endif这里使用了宏定义来表示不同类型的故障。例如#define FAULT_UART_TIMEOUT 0x0001表示串口超时故障对应二进制最低位。这种写法在嵌入式开发中很常见因为一个变量可以通过不同的 bit 位同时表示多个故障状态。四、主函数代码在 src/main.c 中主程序大致完成了以下功能定义系统状态结构体初始化传感器数据和故障码模拟产生故障判断系统是否存在对应故障打印运行结果。代码如下#includestdio.h#includesystem_type.h#includefault_code.hstaticvoidSystemData_Init(SystemData*sys){sys-stateSYS_STATE_INIT;sys-radar.x0;sys-radar.y0;sys-radar.speed0;sys-radar.valid0;sys-led.led_zone0;sys-led.led_state0;sys-sensor.voltage0.0f;sys-sensor.current0.0f;sys-sensor.temperature0.0f;sys-fault_codeFAULT_NONE;}staticvoidSystemData_Print(constSystemData*sys){printf(System state: %d\n,sys-state);printf(Radar x: %d\n,sys-radar.x);printf(Radar y: %d\n,sys-radar.y);printf(Radar speed: %d\n,sys-radar.speed);printf(Radar valid: %d\n,sys-radar.valid);printf(LED zone: %d\n,sys-led.led_zone);printf(LED state: %d\n,sys-led.led_state);printf(Sensor voltage: %.2f V\n,sys-sensor.voltage);printf(Sensor current: %.2f A\n,sys-sensor.current);printf(Sensor temperature: %.2f C\n,sys-sensor.temperature);printf(Fault code: 0x%04X\n,sys-fault_code);}intmain(void){SystemData sys;SystemData_Init(sys);sys.stateSYS_STATE_RUNNING;sys.radar.x120;sys.radar.y-50;sys.radar.speed30;sys.radar.valid1;sys.led.led_zone2;sys.led.led_state1;sys.sensor.voltage12.5f;sys.sensor.current1.2f;sys.sensor.temperature35.6f;sys.fault_code|FAULT_UART_TIMEOUT;sys.fault_code|FAULT_CAN_ERROR;sys.fault_code|FAULT_OVER_TEMP;sys.fault_code|FAULT_LOW_VOLTAGE;SystemData_Print(sys);return0;}五、编译过程在终端中进入 day01 目录然后使用下面的命令进行编译gcc src/main.c-Iinclude-obuild/day01_test这条命令的含义如下gcc调用GCC编译器src/main.c指定要编译的源文件-Iinclude告诉编译器去 include 目录中查找头文件-o build/day01_test指定输出文件的位置和名称。编译完成后运行程序./build/day01_test六、遇到的问题在编译过程中我遇到了一个错误error: ‘FAULT_UART_TIMEOUT’ undeclared最开始我以为是头文件没有被正确包含后来检查发现是宏定义名字写错了。错误写法类似FAULT_VART_TIMEOUT正确写法应该是FAULT_UART_TIMEOUT这个问题说明在C语言中宏定义名称必须完全一致。一个字母写错编译器就无法识别。七、今天的收获通过今天的实操我主要掌握了以下几点理解了嵌入式C工程中 include、src、build 目录的基本作用学会了使用头文件管理宏定义理解了结构体在系统状态管理中的作用学会了使用 gcc 命令编译带头文件目录的C程序认识到代码命名必须保持一致尤其是宏定义和变量名。八、总结今天的内容虽然比较基础但已经初步接触到了嵌入式软件开发中的工程化思想。相比只写单个C文件把头文件、源文件和编译输出分开管理更接近真实项目的开发方式。后续计划继续学习C语言指针、数组、函数封装、Makefile以及常见外设通信接口为后面的STM32、RTOS和驱动开发打基础。工程目录如图

相关新闻

深度解析:ComfyUI-Impact-Pack预览桥接功能实战修复指南

深度解析:ComfyUI-Impact-Pack预览桥接功能实战修复指南

深度解析:ComfyUI-Impact-Pack预览桥接功能实战修复指南 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项目地址: https:…

2026/6/25 13:43:06阅读更多 →
P2P 打洞 + 透明网关:NAS 虚拟局域网的技术实现与性能测试

P2P 打洞 + 透明网关:NAS 虚拟局域网的技术实现与性能测试

随着家用 NAS、智能家居设备的普及,广域网环境下的内网资源访问需求持续增长。但受 IPv4 地址资源枯竭影响,国内 90% 以上的家庭宽带处于运营商级网络地址转换(CGNAT)的对称 NAT 环境下,传统公网 IPDDNS 方案可用性大幅…

2026/6/25 13:43:06阅读更多 →
RTOS与Linux实时性能对比:Zephyr OS在i.MX RT1050上的压倒性优势

RTOS与Linux实时性能对比:Zephyr OS在i.MX RT1050上的压倒性优势

1. 项目概述与背景在嵌入式开发领域,尤其是在工业物联网、汽车电子和智能设备这些对响应时间有严苛要求的场景里,实时性能从来都不是一个可以妥协的选项。我们常常面临一个经典的选择题:是选用功能全面但内核复杂的通用操作系统(如…

2026/6/25 13:32:42阅读更多 →
P1469 找筷子

P1469 找筷子

题目描述 经过一段时间的紧张筹备,电脑小组的“RP 餐厅”终于开业了,这天,经理 LXC 接到了一个定餐大单,可把大家乐坏了!员工们齐心协力按要求准备好了套餐正准备派送时,突然碰到一个棘手的问题&#xff1…

2026/6/25 15:09:28阅读更多 →
【CANN】-Ascend C 算子开发

【CANN】-Ascend C 算子开发

【CANN】-Ascend C 算子开发 适用: 有 CUDA / HIP 算子开发经验, 或 PyTorch 深度用户想深入 AI Core 优化, 第一次在昇腾 NPU 上写自定义算子的工程师 配套仓: Ascend/samples (cplusplus/level1_single_api/4_op_dev/6_ascendc_custom_op) 配套版本: CANN 6.0.RC1.alpha005 (…

2026/6/25 15:09:28阅读更多 →
7大高效策略:专业级ImHex二进制分析工作流实战指南

7大高效策略:专业级ImHex二进制分析工作流实战指南

7大高效策略:专业级ImHex二进制分析工作流实战指南 【免费下载链接】ImHex 🔍 A Hex Editor for Reverse Engineers, Programmers and people who value their retinas when working at 3 AM. 项目地址: https://gitcode.com/GitHub_Trending/im/ImHex…

2026/6/25 15:09:28阅读更多 →
金融数据科学实战:用AKShare构建你的财经数据工具箱

金融数据科学实战:用AKShare构建你的财经数据工具箱

金融数据科学实战:用AKShare构建你的财经数据工具箱 【免费下载链接】akshare AKShare is an elegant and simple financial data interface library for Python, built for human beings! 开源财经数据接口库 项目地址: https://gitcode.com/gh_mirrors/aks/aksh…

2026/6/25 15:09:28阅读更多 →
复杂度的均摊分析法

复杂度的均摊分析法

动态数组的尾插 push_back,有时会触发扩容;一旦扩容,就要申请更大的内存、搬运旧元素、再插入新元素。某一次操作的代价完全可能是 O(n)O(n)但是,动态数组尾插的复杂度是均摊 O(1)O(1)类似的现象其实非常多:单看某一次…

2026/6/25 15:09:28阅读更多 →
JMeter 2.6多线程压力测试实战指南:从脚本设计到结果分析

JMeter 2.6多线程压力测试实战指南:从脚本设计到结果分析

1. 项目概述:为什么我们需要一个实战指南?如果你做过性能测试,尤其是接口或者Web应用的压力测试,那你大概率听说过或者用过Apache JMeter。它是一个老牌的开源性能测试工具,功能强大,社区活跃,但…

2026/6/25 15:04:27阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/25 9:39:54阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/25 2:52:24阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/25 9:01:34阅读更多 →
面试辅助工具横评:我试了5款AI面试工具,最后留下了OfferGo

面试辅助工具横评:我试了5款AI面试工具,最后留下了OfferGo

上半年跳槽,面了十几家公司。说句实话,不是能力不行,是面试现场太容易崩了。 明明准备了一周,面试官换个问法脑子就一片白。面完之后那个懊悔——其实我会的。 后来开始试市面上的AI面试辅助工具。前前后后装了5款,踩…

2026/6/25 11:52:11阅读更多 →
Claude Code 提示词设计:从塑造“人格”到建立“状态机”

Claude Code 提示词设计:从塑造“人格”到建立“状态机”

当前 AI Agent 设计的核心痛点在于:大模型不缺写代码的能力,缺的是克制力、边界感和验证逻辑。Prompt 不再是用来塑造“人格”的,而是用来建立“状态机(State Machine)”和“行为门禁(Guardrails&#xff0…

2026/6/25 11:52:11阅读更多 →
MC-037 | 自定义 Skill 开发:创建你的AI能力模块

MC-037 | 自定义 Skill 开发:创建你的AI能力模块

MONKEYCODE 教程系列 MonkeyCode教程及推广系列 MC-037 自定义 Skill 开发:创建你的AI能力模块 >官网链接注册更放心哦https://monkeycode-ai.com/?ic019e0aed-c823-783c-b08a-4f030f891e4e 系列: 不爱土豆唯爱马铃薯 MonkeyCode 教程系列 字数: 约 1400 字…

2026/6/25 11:52:11阅读更多 →