本帖最后由 yidingyaoaini 于 2023-2-3 10:44 编辑
请教下面程序有什么问题?
#include "CH57x_common.h"
UINT16 test0_value=0;
void time0_init(void)
{
/*配置定时器0,定时器的时钟是FREQ_SYS*/
TMR0_TimerInit( 1*(FREQ_SYS/1000) ); //定时1ms
TMR0_ITCfg(ENABLE, TMR0_3_IT_CYC_END); //使能定时器周期中断
NVIC_EnableIRQ( TMR0_IRQn );
}
/*TMR0周期中断*/
void TMR0_IRQHandler(void)
{
if( TMR0_GetITFlag( TMR0_3_IT_CYC_END ) )
{
TMR0_ClearITFlag( TMR0_3_IT_CYC_END );
CH57xNET_TimeIsr(CH57xNETTIMEPERIOD); /* 定时器中断服务函数 */
test0_value--;
}
}
int main()
{
UINT8 i = 0;
systick_config();
GpioInit();
DebugUSARTInit(115200); /* 检查错误 */
time0_init( );
test0_value=1000;
while(test0_value!=0)
{
};
PRINT("CH579 TCP client create!\r\n");
while(1)
{
};
}
程序为什么为一直死在while(test0_value!=0)里面?测试在STM32运行是没问题的,在CH579运行不正常。附上2张图片,在while里面加一个PRINT就能正常运行。
|
@TJM2613 :值是在减少的,
@yidingyaoaini :那你可以试一下把 while { }; 改成 while { ; }
@yidingyaoaini :打印value值了吗?有看到一直减下来没有?
@TJM2613 :如果在while里面加个打印信息之类,就可以正常运行,
@yidingyaoaini :那你就打印value的值,这是跳出while的条件 而且如果时间是60s的话,那就是要等60*1000s才能跳出
@TJM2613 :跟定时器时间没关系,我现在不关心具体时间准不准,是程序就一直停在了while里面,
你可以试一下在while里面打印test0_value的值,我觉得是定时时间的问题,感觉不是1ms