STM32中__weak(弱定义)函数核心总结

STM32中__weak(弱定义)函数核心总结

一、__weak函数的本质

__weak是ARM编译器(如MDK/Keil)提供的弱定义关键字,核心作用是为函数/变量提供“可被覆盖的默认实现”:

  • __weak修饰的函数为「弱定义」,优先级低;
  • 用户自定义的同名无__weak函数为「强定义」,优先级高;
  • 编译器会优先选择“强定义”版本,弱定义版本会被自动忽略(若存在同名强定义)。
二、STM32中断场景下的核心应用(以串口为例)

用户自定义的强定义中断函数
开发者只需在代码中写同名无__weak的函数,即可“覆盖”默认实现:

// 用户自定义的强定义版本(中断触发时实际执行的逻辑)voidUSART1_IRQHandler(void){if(USART_GetITStatus(USART1, USART_IT_RXNE)!= RESET){uint8_t data =USART_ReceiveData(USART1);// 处理接收数据USART_ClearITPendingBit(USART1, USART_IT_RXNE);// 清中断标志}}

本质:中断向量表会将该中断号(如USART1_IRQn)的函数地址,从默认弱函数替换为用户自定义函数。

系统默认的弱定义中断函数
STM32标准库/HAL库中,所有外设中断服务函数(如USART1_IRQHandler)都被声明为__weak,仅作为“占位符”:

// 库中默认的弱定义串口1中断函数(空实现) __weak voidUSART1_IRQHandler(void){// 空逻辑/死循环,防止中断触发后找不到函数地址}

作用:避免中断触发时因“无对应函数”导致程序崩溃,仅做兜底。

三、关键特性(新手必记)
  1. 非“重写”:不同于C++的类继承重写(Override),__weak是C语言层面的“符号覆盖”,无继承关系;
  2. 可选实现:若用户不写同名强定义函数,程序会执行弱定义版本(如空中断函数);
  3. 核心价值:为STM32中断、回调函数(如HAL库的HAL_UART_RxCpltCallback)提供“默认兜底+用户自定义”的灵活机制,降低开发门槛。
四、典型使用场景
场景作用
中断服务函数系统提供空的弱定义中断函数,用户按需实现具体逻辑
HAL库回调函数HAL_UART_TxCpltCallback,默认空实现,用户自定义数据发送完成后的逻辑
模块化开发为通用模块提供默认逻辑,业务层可按需覆盖

一句话核心

__weak函数是STM32为外设中断/回调提供的“默认备胎”,用户写同名无__weak的函数,就能替换掉这个备胎,让中断执行自己的逻辑。

Read more

【保姆级教程】llama.cpp大模型部署全攻略:CPU/GPU全兼容,小白也能轻松上手!

【保姆级教程】llama.cpp大模型部署全攻略:CPU/GPU全兼容,小白也能轻松上手!

一、简介 * • llama.cpp 是一个在 C/C++ 中实现大型语言模型(LLM)推理的工具 * • 支持跨平台部署,也支持使用 Docker 快速启动 * • 可以运行多种量化模型,对电脑要求不高,CPU/GPU设备均可流畅运行 * • 开源地址参考:https://github.com/ggml-org/llama.cpp • 核心工作流程参考: 二、安装与下载模型(Docker方式) 1. 搜索可用模型 • 这里以 qwen3-vl 模型为例,提供了多种量化版本,每种版本的大小不一样,根据自己的电脑性能做选择,如选择(模型+量化标签):Qwen/Qwen3-VL-8B-Instruct-GGUF:Q8_0 • 可以在huggingface官网中搜索可用的量化模型:https://huggingface.co/models?search=

By Ne0inhk

2026 年 AI 辅助编程工具全景对比:Copilot、Cursor、Claude Code 与 Codex 深度解析

引言 2026 年,AI 辅助编程已经从"尝鲜"变成了"标配"。从 GitHub Copilot 的横空出世,到 Cursor 的异军突起,再到 Claude Code 的强势入局,AI 编程助手正在重塑开发者的工作方式。但面对市面上琳琅满目的工具,你是否也有这样的困惑:哪个工具最适合我?它们之间到底有什么区别? 本文将深入对比四款主流 AI 编程工具,帮你找到最适合自己的那一款。 AI 辅助编程的演进之路 从代码补全到智能协作 早期的 AI 编程工具,如 OpenAI Codex,主要聚焦于代码补全——你写一行,它接下一行。但到了 2026 年,AI 编程助手已经进化成真正的&

By Ne0inhk

Obsidian Copilot API密钥配置终极指南:OpenRouter、Gemini、OpenAI一步到位

Obsidian Copilot 是一个强大的AI助手插件,它能将智能对话功能直接集成到你的Obsidian笔记中。要充分发挥其潜力,正确配置API密钥是关键第一步。本指南将手把手教你如何配置OpenRouter、Google Gemini和OpenAI等主流AI提供商的API密钥,让你轻松享受智能笔记体验。✨ 【免费下载链接】obsidian-copilotA ChatGPT Copilot in Obsidian 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-copilot 🔑 为什么需要配置API密钥? Obsidian Copilot 本身不提供AI模型服务,它需要连接外部的AI服务提供商。配置API密钥后,你可以: * 在笔记中直接与AI对话 * 智能分析和总结笔记内容 * 自动生成文章大纲和草稿 * 基于你的知识库进行问答 🚀 快速开始:配置API密钥 步骤1:打开API密钥设置 在Obsidian Copilot的设置界面中,点击"API Keys"区域的"Set Keys&

By Ne0inhk