230.C语言循环的相关延时计算

复制代码
// 方法1:明确的延时
#define DELAY_US(us) { \
    volatile uint32_t count = (us) * (CPU_FREQ_MHZ); \
    while(count--); \
}

AXI_REG_WRITE(RST, 1);
DELAY_US(1);  // 1微秒复位脉冲
AXI_REG_WRITE(RST, 0);
DELAY_US(1);
AXI_REG_WRITE(RST, 1);

// 方法2:防止优化的空循环
void delay_us(uint32_t us) {
    volatile uint32_t count = us * 100;  // 粗略延时
    while(count--);
}

// 方法3:使用DSB指令确保写完成
AXI_REG_WRITE(RST, 1);
__DSB();  // Data Synchronization Barrier
AXI_REG_WRITE(RST, 0);
__DSB();
AXI_REG_WRITE(RST, 1);
相关推荐
阿米亚波22 分钟前
【C++ STL】std::unordered_multiset
开发语言·数据结构·c++·笔记·stl
我是唐青枫32 分钟前
Java ReentrantLock 实战详解:比 synchronized 更灵活的可重入锁
java·开发语言
QH1392923188042 分钟前
# R&S ZNB43 ZNA43 ZNA67矢量网络分析仪
开发语言·网络·php
脚踏实地皮皮晨1 小时前
003003001_Grid控件
开发语言·windows·算法·c#·visual studio
十年磨剑走天涯2 小时前
C++ STL 容器操作复杂度速查表
开发语言·c++
always_TT2 小时前
【Python requirements.txt 依赖管理】
开发语言·python
ziguo11222 小时前
Windows API MessageBox 函数详解
c语言·c++·windows·visualstudio
15Moonlight2 小时前
C++进阶(09):特殊类设计
开发语言·c++
宁风NF2 小时前
JavaScript:网络请求与前端通信
开发语言·前端·javascript·网络·学习·ecmascript
Logintern092 小时前
py文件开头为什么需要加:from __future__ import annotations
开发语言·python