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);
相关推荐
H.莓飛8 小时前
【数据结构】排序_OJ题(一):计数、桶与排序后的处理
java·开发语言·数据结构
wangchunyu1149 小时前
JAVA AQS与Lock实现原理(含CAS)
java·开发语言·word
爱喝水的鱼丶9 小时前
SAP-ABAP:ECC→S/4HANA ABAP 迁移升级指南——程序改造、语法兼容与性能优化 导语
运维·开发语言·性能优化·sap·abap·经验交流·开发交流
小灰灰搞电子10 小时前
Rust+Slint 实现FTP客户端调试助手源码分享
开发语言·后端·rust
外收内放10 小时前
面向对象高级(实战案例)
开发语言·python·学习
·present·10 小时前
CSAPP(lecture 4_01)
c语言·c++
fanruitian11 小时前
python else用法
开发语言·python
FRing0311 小时前
JavaScript入门到精通二十六(变量提升、函数剩余参数、展开运算符、ES6箭头函数)
开发语言·前端·javascript·es6·箭头函数
云深麋鹿11 小时前
C++ | 基于红黑树实现mymap与myset
开发语言·c++
weixin_4173968312 小时前
桌面云终端PXE启动失败怎么排查?从DHCP Option到镜像下发
开发语言·前端·php·技术·酒店·综合布线·弱电