gpt4 book ai didi

c - 在 C 中使用环绕处理到达时间处理

转载 作者:太空宇宙 更新时间:2023-11-04 01:42:21 25 4
gpt4 key购买 nike

我目前正在用 Ansi-C 编写一个软件,并且正在努力让其中一个基本功能正常工作。

该软件将通过 CAN 网络接收消息,当这些消息到达时,我需要确保它们在预期时间之前和上一条消息之后交付。

只允许使用无符号变量,因此当计时器达到最大值(在我的例子中为 255)时,回绕会出现问题。

很容易验证消息是否在预期时间之前到达,因为我知道两条消息之间的最长时间。

此示例处理回绕并发现迟到的消息:

UC_8 arrival = 250;  
UC_8 expected = 15;
UC_8 maxInterArrTime = 30;

result = expected - arrival;

if(result <= maxInterArrTime){
// ON TIME!
}
else{
// DELAYED
}

这是简单的部分,但我还必须检查到达的消息是否确实在上一条消息之后到达。我的问题是我不知道如何用环绕问题来解决这个问题。我试图模仿发现延迟消息的解决方案,但没有任何运气。

UC_8 arrival = 10; // Wrapped around
UC_8 lastArrival = 250;
UC_8 expected = 15;
UC_8 maxInterArrTime = 30;

result = expected - arrival;
result2 = lastArrival - arrival; //Problem

if(result2 >= ???){ // How should I compare and with what?
//Message received after previous msg

if(result <= maxInterArrTime){
// ON TIME!
}
else{
// DELAYED
}
else{
//Message received before previous msg - ERROR
}

我的问题是到达时间值低于之前的到达时间,但实际上“更大”,因为它已经环绕。我想我可能需要执行几个步骤。

有什么建议可以解决这个问题吗?我需要将 if 语句的数量保持在较低水平,代码将针对复杂性和其他内容进行分析。

最佳答案

如果您可以保证数据包之间的延迟不会是 256 或更多,那么以下将解释回绕

if (newerTime >= olderTime)
delay = newerTime - olderTime;
else
delay = 256 - olderTime + newerTime;

如果你不能保证延迟小于256那么unwind是正确的,你就不能做你想做的事情。

关于c - 在 C 中使用环绕处理到达时间处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3165435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com