当前位置: 首页 > 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.jsqmd.com/news/49748/

相关文章:

  • 2025年度楼梯厂商推荐榜单与选择指南:一份基于行业专业数据的权威分析报告,整木/实木/原木等材质楼梯十大主流供应商解析
  • Consciousness Preservation and Synthetic Life
  • 详细介绍:Nginx 高效动静分离:从原理到实战
  • C++语法基础
  • 2025美国留学中介实测榜单:从藤校到小众专业,核心竞争力深度对比!
  • MySQL 数据备份 - 教程
  • 复制 deepseek think 思考 内容 的方法
  • 狂神说Java(基础版)
  • 2025优质留学中介全景推荐:从藤校OFFER到职业落地,谁是你的专属引路人?
  • 第一章语法基础__C++
  • 11月 月度检测 总结
  • zhengrui 喵了个喵
  • C#.NET PeriodicTimer 深入解析:高效异步定时器的正确打开方式 - 详解
  • 2025.11.24
  • Scrum冲刺阶段 Day One
  • 2025年11月留学机构实测:5家实力留学机构推荐,细分领域王牌都在这!
  • 兄弟们关于mysql的看法你们怎么看
  • ASP.NET Core Blazor简介和飞快入门三(布局和路由)
  • 11/24
  • zhengrui 种花
  • 俄罗斯黑客承认协助阎罗王勒索软件入侵企业网络
  • 2025年11月口碑好的钢骨架聚乙烯塑料复合管厂家推荐排行榜哪家好
  • [ImGui游戏设置UI模拟实践] ImGui Learn Data Day 2
  • 深入解析:java设计模式七、代理模式
  • 《程序员修炼之道:从小工到专家》阅读笔记4
  • 单智能体系统
  • mysql真好用
  • 招聘广告:人形机器人领域,强化学习方向需要的技能
  • 黑马程序员SpringCloud微服务开发与实战-微服务04
  • CF1870G MEXanization - Link