从零到省一:蓝桥杯嵌入式竞赛的代码架构设计与调试心法

第八届蓝桥杯嵌入式开发(省赛—模拟升降控制器) 1.1使用CT117E嵌入式竞赛板,完成试题功能的程序设计与调试;1.2设计与调试过程中,可参考组委会提供的“资源数据包”;1.3 Keil工程文件以准考证号命名,保存在以准考证号命名的考生文件夹中。“模拟升降控制器”模拟升降机的运行过程。通过按键设定到达目标平台, 双路 PWM 输出分别模拟控制上下行电机和开关门电机,LED 流水灯模拟运行 方向。LCD显示时钟和当前所在平台。当升降机运行到目标平台时,平台数字在1 秒内闪烁 2次。系统上电后升降机默认位于平台1。 阅读详情

从零到省一:蓝桥杯嵌入式竞赛的代码架构设计与调试心法

参加蓝桥杯嵌入式竞赛不仅是对技术能力的考验,更是对系统设计思维和工程实践能力的全面挑战。许多初学者在备赛过程中往往陷入"功能堆砌"的误区,而忽略了代码架构和调试方法的重要性。本文将分享一套经过实战检验的嵌入式系统设计方法论,帮助你在有限的时间内构建出稳定、可维护的竞赛作品,真正实现从零基础到省级一等奖的跨越。

1. 嵌入式竞赛代码架构设计核心原则

在蓝桥杯嵌入式竞赛中,优秀的代码架构不仅仅是功能的实现,更是对系统资源、时间管理和可维护性的全面考量。经过多届竞赛的实践验证,我总结出了三个核心设计原则。

模块化分层架构是嵌入式系统设计的基石。将系统划分为硬件抽象层(HAL)、业务逻辑层和应用层,每层只关注自身的职责。硬件抽象层负责直接与寄存器和外设交互,提供统一的接口;业务逻辑层实现具体的功能算法;应用层处理用户交互和系统调度。这种分层设计使得代码更容易调试和维护,也便于团队协作。

提示:在STM32CubeMX生成基础代码后,不要直接在生成的代码中编写业务逻辑,而是基于它构建自己的硬件抽象接口。

实时性保障是嵌入式竞赛的关键得分点。通过合理的任务划分和时间片分配,确保关键任务(如信号采集、实时控制)能够及时响应。使用定时器中断来处理周期性任务,避免在主循环中使用延时函数。

// 定时器中断处理示例
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim->Instance == TIM6) // 10ms定时器
    {
        static uint8_t counter = 0;
        KEY_Scan();      // 每10ms扫描按键
        if(++counter >= 10) // 100ms任务
        {
            counter = 0;
            Data_Process(); // 数据处理
        }
    }
}

资源优化管理在资源受限的嵌入式平台上尤为重要。合理使用内存池管理动态内存,避免内存碎片;使用查表法替代复杂计算,提升执行效率;精心设计数据结构,减少内存占用。

2. 外设驱动模块化设计与实现

外设驱动是嵌入式系统的基础,良好的驱动设计能够大幅提升代码的可靠性和可移植性。在蓝桥杯竞赛中,常见的外设包括GPIO、定时器、ADC、LCD等。

按键驱动设计需要解决消抖和多种按键事件检测的问题。采用状态机模型实现按键检测,能够准确识别短按、长按、连按等不同事件。下面是一个典型的按键状态机实现:

typedef struct {
    uint8_t current_state;   // 当前状态
    uint8_t last_state;      // 上次状态
    uint8_t press_count;     // 按下计数
    uint8_t release_count;   // 释放计数
    uint8_t short_flag;      // 短按标志
    uint8_t long_flag;       // 长按标志
} KEY_TypeDef;

KEY_TypeDef keys[4] = {0}; // 4个按键

void KEY_Scan(void)
{
    for(int i = 0; i < 4; i++) {
        uint8_t current = HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pins[i]);
        
        // 状态机处理
        switch(keys[i].current_state) {
            case KEY_STATE_RELEASE:
                if(current == KEY_PRESSED) {
                    keys[i].current_state = KEY_STATE_DEBOUNCE;
                    keys[i].press_count = 0;
                }
                break;
            case KEY_STATE_DEBOUNCE:
                if(++keys[i].press_count > DEBOUNCE_TIME) {
                    if(current == KEY_PRESSED) {
                        keys[i].current_state = KEY_STATE_PRESSED;
                        keys[i].short_flag = 1;
                    } else {
                        keys[i].current_state = KEY_STATE_RELEASE;
                    }
                }
                break;
            // 更多状态处理...
        }
    }
}

LCD显示模块的设计要注重接口的统一性和扩展性。封装常用的显示功能,如清屏、显示字符串、显示数字、绘制图形等,提供统一的调用接口。采用双缓冲机制可以避免显示闪烁问题。

定时器模块在嵌入式竞赛中承担着重要角色,不仅用于基本的定时功能,还用于PWM生成、输入捕获、频率测量等。下面是一个输入捕获测量频率的实现示例:

参数说明计算公式
捕获值定时器计数值CCRx寄存器值
时钟频率定时器时钟源频率80MHz/分频系数
实际频率测量得到的频率时钟频率/捕获值
// 输入捕获回调函数
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    if(htim->Instance == TIM2) {
        uint32_t capture = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
        if(capture != 0) {
            // 计算频率:时钟频率/分频系数/捕获值
            frequency = (SystemCoreClock / 80) / capture;
        }
        __HAL_TIM_SetCounter(htim, 0); // 重置计数器
        HAL_TIM_IC_Start_IT(htim, TIM_CHANNEL_1); // 重新启动捕获
    }
}

3. 状态机设计与业务逻辑实现

状态机是嵌入式系统设计的核心模式,能够清晰地描述系统的行为逻辑。在蓝桥杯竞赛中,合理运用状态机可以大大简化复杂逻辑的实现。

界面状态管理是竞赛题目中的常见需求。通常需要实现多个显示界面之间的切换,以及每个界面下的不同操作模式。使用枚举类型定义状态,使用状态变量记录当前状态:

typedef enum {
    UI_STATE_DATA_DISPLAY,
    UI_STATE_PARAM_SETTING,
    UI_STATE_STATISTICS
} UI_State;

UI_State current_ui_state = UI_STATE_DATA_DISPLAY;

void UI_StateMachine(void)
{
    switch(current_ui_state) {
        case UI_STATE_DATA_DISPLAY:
            DisplayDataScreen();
            if(KEY_GetShortPress(KEY4)) {
                current_ui_state = UI_STATE_PARAM_SETTING;
                LCD_ClearScreen();
            }
            break;
        case UI_STATE_PARAM_SETTING:
            DisplayParamScreen();
            if(KEY_GetShortPress(KEY4)) {
                current_ui_state = UI_STATE_STATISTICS;
                LCD_ClearScreen();
            }
            break;
        case UI_STATE_STATISTICS:
            DisplayStatisticsScreen();
            if(KEY_GetShortPress(KEY4)) {
                current_ui_state = UI_STATE_DATA_DISPLAY;
                LCD_ClearScreen();
            }
            break;
    }
}

参数设置逻辑需要处理数值的增减、范围限制和不同参数之间的切换。使用结构体组织相关参数,提供统一的参数操作接口:

typedef struct {
    int32_t value;      // 参数值
    int32_t min;        // 最小值
    int32_t max;        // 最大值
    int32_t step;       // 步进值
    const char* unit;   // 单位
    const char* name;   // 参数名称
} Parameter;

Parameter parameters[3] = {
    {1000, 100, 10000, 100, "Hz", "PD"},
    {5000, 1000, 20000, 100, "Hz", "PH"},
    {0, -1000, 1000, 100, "Hz", "PX"}
};

uint8_t current_param_index = 0;

void Parameter_Increase(void)
{
    parameters[current_param_index].value += 
        parameters[current_param_index].step;
    if(parameters[current_param_index].value > 
       parameters[current_param_index].max) {
        parameters[current_param_index].value = 
            parameters[current_param_index].min;
    }
}

void Parameter_Decrease(void)
{
    parameters[current_param_index].value -= 
        parameters[current_param_index].step;
    if(parameters[current_param_index].value < 
       parameters[current_param_index].min) {
        parameters[current_param_index].value = 
            parameters[current_param_index].max;
    }
}

频率超限检测算法需要准确识别频率超过阈值的情况,并避免重复计数。使用标志位机制来确保每次超限只记录一次:

typedef struct {
    uint32_t overflow_count;     // 超限次数
    uint8_t overflow_flag;       // 超限标志
    uint32_t threshold;          // 阈值
} FrequencyMonitor;

FrequencyMonitor monitor_A = {0, 1, 5000}; // 初始化阈值5kHz

void Frequency_Check(FrequencyMonitor* monitor, uint32_t frequency)
{
    if(monitor->overflow_flag == 1) {
        if(frequency > monitor->threshold) {
            monitor->overflow_count++;
            monitor->overflow_flag = 0;
            LED_Set(2, 1); // 超限指示灯
        }
    } else if(frequency < monitor->threshold) {
        monitor->overflow_flag = 1;
        LED_Set(2, 0); // 恢复正常指示灯
    }
}

4. 高级调试技巧与性能优化

调试能力是区分优秀选手和普通选手的关键因素。在有限的竞赛时间内,快速定位和解决问题需要系统化的调试方法和工具使用技巧。

逻辑分析仪的使用能够直观地显示信号的时间关系和状态变化。在调试时序相关问题时,逻辑分析仪是无可替代的工具。重点观察以下信号:

  • 按键输入与响应的时序关系
  • 定时器中断的周期准确性
  • 外设通信协议(如I2C、SPI)的波形
  • 多个任务之间的时间关系

在线调试器的高级功能往往被初学者忽略。除了基本的断点调试外,还要熟练使用:

  • 实时变量监视:在程序运行时观察关键变量的变化
  • 内存查看:检查内存分配和数据存储是否正确
  • 性能分析:测量函数执行时间和调用频率
  • 故障诊断:使用HardFault诊断工具定位异常原因
// 性能测量代码示例
void Performance_Test(void)
{
    uint32_t start_time = DWT->CYCCNT; // 使用DWT周期计数器
    // 测试代码段
    Function_To_Test();
    uint32_t end_time = DWT->CYCCNT;
    uint32_t cycles = end_time - start_time;
    float time_ms = (float)cycles / (SystemCoreClock / 1000);
    printf("执行时间: %.3f ms\n", time_ms);
}

系统性能优化需要在保证功能正确性的前提下提升运行效率。常用的优化策略包括:

  • 算法优化:选择时间复杂度更低的算法,如使用查表法替代实时计算
  • 数据结构优化:使用更适合硬件平台的数据类型和结构
  • 编译器优化:合理设置编译器优化选项,平衡性能与代码大小
  • 内存优化:使用内存池管理动态内存,减少内存碎片

注意:优化前一定要先测量性能瓶颈,避免盲目优化。使用Keil的Performance Analyzer工具可以准确找到热点代码。

功耗优化在某些竞赛题目中也是评分点。通过合理的时钟配置、外设管理和低功耗模式使用,可以显著降低系统功耗:

void Enter_LowPower_Mode(void)
{
    // 关闭不必要的外设时钟
    __HAL_RCC_ADC1_CLK_DISABLE();
    __HAL_RCC_TIM4_CLK_DISABLE();
    
    // 配置未使用的IO为模拟输入模式
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = GPIO_PIN_All;
    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
    // 进入睡眠模式
    HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
}

在实际竞赛中,我建议准备一个调试 checklist,包括常见问题的排查步骤和解决方法。这样在遇到问题时能够快速定位,避免在调试上浪费过多时间。

从零到省一:蓝桥杯嵌入式竞赛的备赛心法与实战拆解 本文分享了作者从零开始备战蓝桥杯嵌入式竞赛并荣获省一等奖的实战经验与备赛心法。内容涵盖基础环境搭建、系统框架设计、外设驱动开发、调试技巧与时间管理策略,为参赛者提供了一套高效的备赛方法论,重点解析了嵌入式系统设计与省赛实战中的关键技术要点。 阅读详情

相关推荐

蓝桥杯嵌入式系统设计:高效编程与调试方法全解析

在蓝桥杯嵌入式竞赛中,如何在有限时间内完成复杂功能实现并确保系统稳定性,是每位参赛者面临的核心挑战。本文将从及四个维度,深入探讨嵌入式系统设计中的高效开发方法,助力参赛者在比赛中脱颖而出。

1564

从零到满分:蓝桥杯嵌入式省赛的代码架构与调试心法

本文详细解析蓝桥杯嵌入式省赛的代码架构设计与调试策略,涵盖模块化分层、定时器中断优化、状态机管理等核心技术。通过实战案例分享频率测量、超限判断等关键算法实现,帮助选手构建稳健可靠的嵌入式系统,提升竞赛成绩并冲击满分。

loss4bartender的博客 870

蓝桥杯嵌入式开发实战指南:从代码优化到高效调试的进阶之路

在蓝桥杯的赛场上,优秀开发者需要兼具工程师的严谨与艺术家的创造力。通过本文阐述的寄存器级优化、RTOS应用与智能调试方法,开发者不仅能提升竞赛成绩,更能培养出对嵌入式系统深层的理解力。记住:真正的技术突破往往发生在芯片手册的字里行间,在示波器的波形跳变瞬间,在那些反复调试的深夜时分。愿这些经验之谈,能成为您嵌入式开发之路上的明灯。

vvvae1234的博客 1221

从零到一:蓝桥杯嵌入式竞赛的模块化思维构建与实战拆解

本文详细解析了蓝桥杯嵌入式竞赛中的模块化思维构建方法,通过LED控制、LCD显示、按键处理等核心模块的实战拆解,帮助参赛者系统掌握嵌入式开发技巧。文章提供了完整的代码示例和调试策略,助力选手高效备赛,提升在蓝桥杯嵌入式竞赛中的实战能力。

tech5的博客 986

从零到一:蓝桥杯物联网竞赛的硬件搭建与调试实战

本文详细介绍了蓝桥杯物联网竞赛的硬件搭建与调试实战,从硬件选型、系统搭建规范到调试技巧和典型问题解决方案,为参赛者提供全面的备赛指南。重点解析了STM32WLE5CCU6主控芯片的应用,以及LoRa通信、电源管理等关键技术,帮助选手在省赛中高效完成物联网系统开发。

weixin_29223603的博客 880

蓝桥杯第十届嵌入式省赛完整项目实战解析

嵌入式系统是专为执行特定控制功能而设计的计算机系统,通常以微控制器(MCU)为核心,集成软硬件于一体。其最显著特征包括专用性——仅服务于预设任务;实时性——需在限定时间内响应外部事件;资源受限性——受限于存储、功耗与计算能力;以及高可靠性——要求长时间稳定运行。不同于通用计算机,嵌入式系统强调效率与稳定性,广泛应用于工业自动化、智能家居、医疗设备等领域。// 示例:一个简单的嵌入式LED控制逻辑// 超温报警。

weixin_34520664的博客 1585

从零到一:蓝桥杯嵌入式竞赛的底层驱动开发心法

本文深入解析蓝桥杯嵌入式竞赛中的底层驱动开发核心技术,涵盖环境搭建、输入捕获、按键状态机、中断管理和调试优化等关键环节。通过实战代码示例和系统整合策略,帮助参赛者避开常见陷阱,提升代码质量和稳定性,为蓝桥杯嵌入式竞赛提供全面的开发指导。

pea55的博客 848

第十五届蓝桥杯嵌入式省赛真题解析

蓝桥杯嵌入式比赛是一个专业性较强的赛事,它主要考察参赛者在STM32微控制器编程和电子学科基础知识方面的能力。

a2784288164的博客 3669

蓝桥杯嵌入式开发经验分享(第九届省赛——“电子定时器”)

作者:马一飞                                                         QQ:791729359        在学习过程中有什么问题可以联系   这套题也是我当你省赛时候做的题,也是通过这套题进入拿到省一进入国赛。总体来说,这套题是比较简单的,尤其是在配置上基本没涉及一些比较难的模块,考的方向偏向逻辑,大部分人都在长短按键处被卡死,这套...

eavan的博客 1万+

蓝桥杯嵌入式省赛代码集:学习与实战指南

htmltable {th, td {th {pre {简介:“蓝桥杯嵌入式十一届省赛代码”包含了历届嵌入式系统开发比赛的题目和参赛者的源代码。这些资源对于有兴趣深入学习嵌入式系统编程的人士极具价值,特别是对于参加编程竞赛的学生。该压缩包涉及嵌入式系统的各个核心知识点,包括嵌入式操作系统、驱动程序开发、通信协议和硬件接口等。其中特别提到了使用定时器中断生成PWM信号的技术,展示了如何在嵌入式编程中实现精确的信号控制。

weixin_28235889的博客 966

SAP成本中心费用分割(KSS2)实战:从原理到月末调整全解析

本文详细解析了SAP成本中心费用分割(KSS2)的核心逻辑与实战操作,从成本要素分组配置到月末调整全流程。通过KSS2将初级成本要素按作业类型重新分类为次级成本要素,确保成本结算准确。文章还提供了常见错误处理方法和典型业务场景实战,帮助用户高效完成SAP成本结算。

weixin_29279101的博客 1264

从零到一:蓝桥杯嵌入式竞赛的底层驱动开发心法与避坑指南

本文详细解析蓝桥杯嵌入式竞赛中底层驱动开发的核心技巧与常见陷阱,涵盖环境配置、输入捕获、按键处理、LCD显示优化及系统稳定性策略。通过实战案例和代码示例,帮助选手掌握嵌入式开发心法,提升竞赛表现。

sky77的博客 615

Stata新手避坑:用reghdfe搞定行业、地区多重固定效应,告别‘共线性’报错

本文详细介绍了如何使用Stata中的reghdfe命令高效处理多重固定效应问题,解决传统方法在面板回归中遇到的共线性报错和低R²问题。通过实战案例和高级技巧,帮助新手快速掌握行业、地区等多维固定效应的控制方法,提升经济学和金融学研究的分析效率。

weixin_30635053的博客 422

从零到一:蓝桥杯嵌入式竞赛环境搭建的避坑指南与效率优化

本文提供蓝桥杯嵌入式竞赛环境搭建的详细指南,基于STM32G4芯片,重点讲解CubeMX和MDK5工具链的配置优化。涵盖时钟配置、调试接口设置、外设驱动集成及常见问题解决方案,帮助参赛者高效避坑,提升开发效率。

moss5的博客 804

centos7安装db2 version11.1

centos7安装db2 version11.1

AKA石头 1066

matlab中高频变压器怎么找,干货|手把手教你绕制高频变压器

原标题:干货|手把手教你绕制高频变压器绕制一个变压器所需材料:磁芯、骨架、各种铜线、麦拉胶带。变压器参数:磁芯:EE22原边:134T(1-3脚),辅助:32T(5-4脚),输出:15T(10-9脚)原边电感:1380±10%uH漏感:≤44uH引脚分布图: 特别注意:绕制方法为网上下载,其中变压器绕制方法是对的,但其中存在着很多问题(比如,正规变压器的绕组的头和尾是要添加铁氟龙套管的,每一层之间...

weixin_30895121的博客 2126

蓝桥杯嵌入式笔记

本文是我参加蓝桥杯嵌入式比赛后的一些心得体会和一些自己总结的驱动代码,希望能给以后参加蓝桥杯嵌入式的同学带来一些帮助。 本文没有经过校对,如有错误还请包涵,欢迎大家交流和指正,转载请注明出处。 一、 总述 自己的情况: 我参加的是第十届蓝桥杯嵌入式比赛 省赛备赛两周(平均每天花费4——6小时),最后省一进入国赛 国赛备赛一周半(每天晚上写一个省赛或者国赛的项目),最后国一 之前有过学习过stm32...

qq_40305944的博客 9493

MOSFET高频响应实战:如何用LTspice仿真内部电容效应(附模型文件)

本文深入解析MOSFET高频响应中的内部电容效应,通过LTspice仿真工具详细展示如何提取模型参数并优化高频特性。从栅极相关电容到结电容的物理本质,再到实战案例中的开关损耗分析和频率响应扫描,提供全面的设计优化方法,帮助工程师有效应对高速开关电路中的电容挑战。

weixin_33725722的博客 391

从零到一:蓝桥杯嵌入式竞赛的模版搭建心法与避坑指南

本文详细介绍了蓝桥杯嵌入式竞赛中模版搭建的核心心法与避坑指南,涵盖时钟配置、外设驱动、通信协议等关键环节。通过实战案例和代码示例,帮助选手快速构建稳定可靠的嵌入式系统基础,有效避免常见陷阱,提升开发效率。

code8的博客 573

轴承故障诊断领域的论文到底有多水

这个是最让人困惑的,就好像你说自己证明了某个方法更好,但是你却没有交代自己怎么做的,或者说你交代的过程有外行话或者逻辑上的缺陷,但是你就这么给出个结果完事了。由于自己没有足够大的学术交流圈子,为了尽量避免误判,我在原来13篇论文的基础上又读了18篇,这些论文至少都出自中文核心,有一些还有EI的title,事实上近几年能找到的文章也不算多,这些基本能说明问题了。当然,还有更多细节,比如说损失函数你得交代吧,模型超参数得介绍全吧,至少数据集是哪个工况下的得说吧,当你想复现这些论文,关注点在这些地方的时候。

weixin_50642818的博客 3053

2026年国赛C题微网与外部电网电力调控策略 (三):问题三、问题四滚动预测、实时电价与结果核验

专栏内定期更新ABCDE五题详细思路、代码(含运行结果图)和讲解视频-(11号之前半价):问题三看起来只是多给了一个光伏预报附件,实质上它改变了整道题的信息结构:问题四则是在问题二、问题三之上替换价格来源。问题4-2相当于“确定性计划+实时电价”,问题4-3相当于“滚动预测+实时电价”。物理模型完全不变,改变的是价格序列和费用口径。本文先给出核心结果:从结果看,问题3比问题2多约164.21万元,问题4-3比问题4-2多约168.79万元。主要增量不是“储能没有工作”,而是预测误差、计划偏差和紧急购电造成的

YOLO 344

从零到一:蓝桥杯嵌入式竞赛中的模块化思维与实战拆解

本文详细解析了蓝桥杯嵌入式竞赛中的模块化思维与实践方法,通过分解LED、按键、PWM和串口等核心模块,提升代码可维护性和开发效率。文章结合STM32实战案例,分享硬件抽象层设计、模块集成与调试策略,助力参赛者在省赛中构建稳定可靠的嵌入式系统。

rose2的博客 971

在 NVIDIA DGX Spark 上运行 vLLM + Open WebUI

DGX Spark 和 GX10 都是性能强大的机器,但只有将它们视为交互式工作站而非精简版服务器,才能真正发挥它们的优势。合理利用共享资源,规划并发工作负载,并谨慎控制内存限制。做到这些,vLLM 与 Open WebUI 的结合就能成为可靠​​的日常工具,而不是脆弱的实验品。DGX平台本身价格不菲,但这并非体验此类硬件的唯一途径。多家厂商提供基于相同核心架构、价格更为亲民的系统,这些系统通常配备容量较小的固态硬盘或配置更为简化,但基本性能并未改变。

iCloudEnd的博客 1752

从零到一:蓝桥杯嵌入式竞赛的模块化编程思维与实战重构

本文探讨了蓝桥杯嵌入式竞赛中模块化编程思维的重要性与实践方法。通过将系统拆分为独立功能模块,如按键处理、LCD显示和ADC采集,提升代码可维护性和调试效率。文章详细介绍了模块化架构设计、资源管理、调试技巧及常见问题解决方案,帮助参赛者构建高效稳定的嵌入式系统。

play7的博客 710

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

从零到一:蓝桥杯CT107D新驱动代码的逆向工程与调试心法

本文详细解析蓝桥杯CT107D开发板新驱动代码的逆向工程与调试方法。针对官方移除onewire、iic等模块头文件的变更,提供从引脚定义推导、头文件处理到时序调试的完整解决方案,帮助选手快速掌握单片机驱动开发核心技能。

fern8的博客 988

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

第十二届蓝桥杯嵌入式总结及分享

蓝桥杯嵌入式总结以及分享 这是我第一次写优快云的文章,如果有什么写的不好的,还请给位见谅,不喜勿喷,谢谢。 经过这两个星期时间准备省赛,两个星期准备国赛,最终取得了国二的成绩,个人认为这个比赛就是耗时长,我感觉时间基本都耗在了源码的调试上,蓝桥杯嵌入式比赛是提供源码的,但是不一定全,需要自己更改为自己需要的源码,也就是他提供的代码,不一定是你的开发板上的。好,那我们废话不多说了,步入正题。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了

qq_44515486的博客 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: STM32启动探秘:Reset_Handler如何一步步引导至main()函数?
下一篇: MISRA规范演进史:如何塑造现代汽车软件开发的安全基因
gitlab7runner
博客等级 码龄4年 78粉丝 1747原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值