当前位置: 首页 > news >正文

踩坑日记20251124

踩坑日记20251124

1.51单片机C语言

typedef union {uint8_t Byte;  // 整体访问8位struct {uint8_t B0  : 1;  // 位域访问每一位uint8_t B1  : 1;uint8_t B2  : 1;uint8_t B3  : 1;uint8_t B4  : 1;uint8_t B5  : 1;uint8_t B6  : 1;uint8_t B7  : 1;} Bits;
} ByteType;
#define bb0 Bits.B0
#define bb1 Bits.B1
#define bb2 Bits.B2
#define bb3 Bits.B3
#define bb4 Bits.B4
#define bb5 Bits.B5
#define bb6 Bits.B6
#define bb7 Bits.B7
#define bb8 Bits.B8ByteType Uart1Tmp;
ByteType DataTmp;
#define Uart1Data Uart1Tmp.Byte
#define MoDeFlag1 DataTmp.bb0
#define MoDeFlag2 DataTmp.bb1
#define MoDeFlag3 DataTmp.bb2
#define MoDeFlag4 DataTmp.bb3Uart1Tmp = 0;
Uart1Data = MoDeFlag1<<4;
Uart1Data + = MoDeFlag3*3+MoDeFlag2*2+MoDeFlag1;//与下面这种写法有何不同
Uart1Tmp = 0;
Uart1Data = MoDeFlag1<<4+MoDeFlag3*3+MoDeFlag2*2+MoDeFlag1;
  1. 位域存储顺序:51 单片机的编译器(如 Keil C51)中,位域默认按「低地址到高地址」分配,即 DataTmp.bb0 是 DataTmp.Byte 的 最低位(bit0)bb1 是 bit1,bb2 是 bit2,bb3 是 bit3(符合你的定义预期)。不同编译器(如 Keil C51、SDCC)的位域存储顺序可能不同(部分编译器会按「高 bit 到低 bit」分配),建议在实际使用前用调试器验证。
  2. 运算符优先级:C 语言中 + 的优先级 高于 <<(移位运算符),这是导致差异的核心原因。
  3. 提升优先级使用小括号,Uart1Data = (MoDeFlag1<<4)+MoDeFlag3*3+MoDeFlag2*2+MoDeFlag1;

2.STM32单片机Hal库

  • 在使用这个宏定义时__HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_3, TIM_INPUTCHANNELPOLARITY_RISING);
  • 报错如下问题:Expected ':'clang(expected) Expected expressionclang(expected_expression) macro __HAL_TIM_SET_CAPTUREPOLARITY provided by "stm32f1xx_hal_tim.h" #define __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \ do { \ TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \ TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \ } while (0)
#define __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__)    \
  do{                                                                     \
    TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__));               \
    TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \
  }while(0)
  • 跳转到这个宏时__HAL_TIM_SET_CAPTUREPOLARITY也没有发现问题,后来发现是宏定义里面的函数有问题。TIM_RESET_CAPTUREPOLARITY这个函数有问题,多了一个括号,还好上网查了一下,问了半天AI说没问题。
  • 搁这里躲着呢,太离谱了。
    Pasted image 20251124220456
http://www.gsyq.cn/news/59590.html

相关文章:

  • 详细介绍:Nginx 高效动静分离:从原理到实战
  • C++语法基础
  • 2025美国留学中介实测榜单:从藤校到小众专业,核心竞争力深度对比!
  • 2025美国留学机构TOP榜:从申请到就业的全链条护航者
  • MySQL 数据备份 - 教程
  • 复制 deepseek think 思考 内容 的方法
  • 狂神说Java(基础版)
  • 2025优质留学中介全景推荐:从藤校OFFER到职业落地,谁是你的专属引路人?
  • zhengrui 喵了个喵
  • C#.NET PeriodicTimer 深入解析:高效异步定时器的正确打开方式 - 详解
  • 2025年11月留学机构实测:5家实力留学机构推荐,细分领域王牌都在这!
  • zhengrui 种花
  • 俄罗斯黑客承认协助阎罗王勒索软件入侵企业网络
  • [ImGui游戏设置UI模拟实践] ImGui Learn Data Day 2
  • 深入解析:java设计模式七、代理模式
  • Trick——语法
  • 老鼠和奶酪 记忆化搜索
  • 深入解析:数独解题算法lua脚本
  • Trae搭建Android 开发中 MVVM 架构,使用指南
  • CF2061H2 Kevin and Stones (Hard Version) 题解
  • winfrom 操作列 动态按钮
  • 蓝桥杯-Python-基础语法
  • 高性能AI股票预测分析报告 - 2025年11月24日 - 20:46:52
  • 博客园真好用
  • 增强AI股票预测分析报告 - 2025年11月24日 - 20:43:55
  • 102302106-陈昭颖-第三次作业
  • 2025 年 11 月 GEO 公司推荐权威榜单:十大品牌价值内核与实战解决方案盘点
  • 2025 年 11 月 GEO 公司推荐权威榜单:十大品牌核心优势与定制化解决方案指南
  • NewStarCTF2024 Pwn Week2 Bad Asm
  • 增强AI股票预测分析报告 - 2025年11月24日