硬汉嵌入式论坛

 找回密码
 立即注册
查看: 651|回复: 2
收起左侧

[FreeRTOS] 绝对时间

[复制链接]

91

主题

87

回帖

360

积分

高级会员

积分
360
发表于 2023-12-27 11:27:26 | 显示全部楼层 |阅读模式
项目中需要对软件每个执行的动作做严格的时刻表。
比如软件有几个关键动作:
压电机,采集,复位电机

记录每个动作的起始时刻(单位毫秒):
0,126,1200


实现接口如下:

void TimRcord(eTim eT)
{
        static TickType_t tBase;
       
        if(TIM_START_TST == eT)
        {
                memset(g_tTiming,0,sizeof(g_tTiming));
                tBase = xTaskGetTickCount();
        }
       
        g_tTiming[eT] = xTaskGetTickCount()-tBase;
}


一切貌似很正常。但是“采集动作”有  用到接口  taskENTER_CRITICAL(); 导致采集结束的时刻不准。
有没有其他好的方案:在使用taskENTER_CRITICAL的情况下,获取准确的时刻。


回复

使用道具 举报

0

主题

214

回帖

214

积分

高级会员

积分
214
发表于 2023-12-27 13:14:54 | 显示全部楼层
用一个定时器,做微秒计数。用的时候读取。
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
发表于 2023-12-27 16:38:48 | 显示全部楼层
在中断服务程序里面调用的话,需要使用函数xTaskGetTickCountFromISR
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-1 10:10 , Processed in 0.249220 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表