关于CH32V307的RTThread 例程的delay

各位好。

参考CH32V307的RTThread 例程中发现,WCH提供的Delay_Us函数,对SysTick进行了操作;而RT Thread中也对systick进行了操作。

在线程中使用了Delay_Us函数的时候可能会一直没有返回。请确认下,谢谢。

void Delay_Us(uint32_t n)

{

    uint32_t i;


    SysTick->SR &= ~(1 << 0);

    i = (uint32_t)n * p_us;


    SysTick->CMP = i;

    SysTick->CTLR |= (1 << 4);

    SysTick->CTLR |= (1 << 5) | (1 << 0);


    while((SysTick->SR & (1 << 0)) != (1 << 0))

        ;

    SysTick->CTLR &= ~(1 << 0);

}


void SysTick_Handler(void)

{

    GET_INT_SP();

    /* enter interrupt */

    rt_interrupt_enter();

    SysTick->SR=0;

    rt_tick_increase();

    /* leave interrupt */

    rt_interrupt_leave();

    FREE_INT_SP();


}



开启了RTOS线程调度之后,就不要用Delay这些函数了。用RTOS本身自带的sleep或者delay函数。


谢谢提醒。

官方模板比如说eth里面大部分例程都是裸机的,有用到一些delay us的函数,需要自己处理(RTOS一般是delay ms),我想官方是不是可以稍微处理下,免得直接移植到rtos中还得自己实现。


您好,感谢你的反馈建议,在我们CH32V307 EVT是有RT-Thread例程的。RT-Thread例程中,是有用到延时函数的,可以参考例程用发,如下图。CH32V307 EVT下载链接如下:

/downloads/CH32V307EVT_ZIP.html 

image.png

image.png


只有登录才能回复,可以选择微信账号登录