嵌入式技术论坛
直播中

罗星

8年用户 1487经验值
擅长:模拟技术
私信 关注
[问答]

CH32V103R-EVT开发板用软件定时器时遇到问题咋办

在使用CH32V103R-EVT开发板,用RT-Thread Studio 2.2.5开发,BSP版本 1.0.1 ,RT-Thread版本 4.1.0.

用软件定时器时遇到问题。在启用周期定时器后,会频繁的进入 finsh_thread_entry 线程,一直执行

shell.c低670行的代码,现象就是Debug串口一直在输出字符。

shell.c中跳转的执行处:

shell->line[shell->line_position] = ch;
        if (shell->echo_mode)
            rt_kprintf("%c", ch);

/* 创建定时器1 /
timer1 = rt_timer_create("timer1", /
定时器名字是 timer1 /
time1_out, /
超时时回调的处理函数 /
RT_NULL, /
超时函数的入口参数 /
5, /
定时长度,以OS Tick为单位,即5个OS Tick /
RT_TIMER_FLAG_PERIODIC); /
周期性定时器 */
定时器回调函数

static void time1_out(void* parameter)
{
static uint8_t time_5ms_cnt = 0;
//bsp_lcd_disp(); //刷新显示屏显示
time_5ms_cnt++;
if((time_5ms_cnt%2) == 0)
{
time_5ms_cnt = 0;
//LED指示灯显示处理
// bsp_key_scan_10ms(); //按键扫描
}
}

回帖(1)

刘丹

2022-11-21 14:23:36
您确定不使用你贴代码的这个定时器就没有问题吗?这个定时器按当前注释掉,只计数是没有问题的。

您这个定时器是并不是您说的 “软件定时器” 呢,是在中断ISR中执行的。
要再加RT_TIMER_FLAG_SOFT_TIMER才是在线程中运行的。
即使在线程中运行,也不能在这个里面阻塞或等待。

如果您time1_out中注释掉的代码,打开的话,可能问题会在这些代码里面。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分