Microblaze使用sleep,usleep函数不准的解决办法。

发布时间:2026/7/7 17:49:59

Microblaze使用sleep,usleep函数不准的解决办法。 目录问题背景程序框架debug思路解决办法问题背景Microblaze使用lwip模板通信时发现使用sleep/usleep函数时不论延时给的多大从串口打印的时间来看实际延时的时间都很短。但是用hello world模板时sleep/usleep函数又很准。程序框架vivado使用microblaze axi timer axi ethsdk使用lwip模板实现网口通信。vivado程序框架如下sdk处修改bsp使用axi timer作为定时器debug思路1.首先我在多个sleep之间添加打印信息sleep设置延时为1s然后通过串口工具的打印时间发现多个打印信息的间隔只有us级别与程序里设置的1s相差很多。2.后来将bsp中的sleep timer设置为none即让cpu使用汇编指令去延时发现在这种情况下使用sleep函数还比较准3.再想到lwip也需要定时器来实现通过查看platform_mb.c文件发现果然lwip使用的定时器和sleep函数使用的定时器是同一个并且lwip将定时器设为了中断模式导致使用sleep函数加载的值不准。解决办法1.将bsp中的sleep timer设置为none但是此方法可能会有误差。2.在vivado中添加两个定时器让lwip使用axi timer 0在bsp中修改sleep timer为axi timer 1解决定时器冲突的问题。

相关新闻