如何在按下某个键之前运行定期操作

How to run a periodic action until a key is pressed

提问人:Shaf 提问时间:9/25/2023 最后编辑:pmacfarlaneShaf 更新时间:9/27/2023 访问量:52

问:

我正在为嵌入式控制器编写测试脚本,某些测试需要用户操作才能继续。

在屏幕上打印指令,例如

printf("Turn switch A to ON position then press any key");

然后,我希望脚本等到用户按下某个键才能进入测试

ExpectedSwitchState = ON;
CheckSwitch(01);

我可以很容易地做到这一点(尽管需要按回车键)

printf("\nPress Enter to continue");
getChar();

我遇到的问题是,如果没有传输其他命令,我必须确保我的工具每 4 秒发送一次测试人员演示消息。我希望它在按下一个键后立即恢复,而不是再等 4 秒钟。

我更习惯于嵌入式 C 而不是使用计算机输入的任何东西,所以我不确定是否有通用命令来实现我想要的。

任何建议将不胜感激。

目前,我只找到了暂停程序的方法。在按下一个键之前,这不是继续做某事的方法。

我可以创建一个 while 循环,每 1 毫秒增加一个计数器,然后在计数器达到 4,000 时传输测试器。如果按下某个键,则退出 while 循环。似乎有点令人费解。而且我不知道检测按键的命令。

c 暂停

评论

1赞 cyberbrain 9/25/2023
请添加您要使用的编程语言
0赞 Shaf 9/26/2023
我正在用 C 编程,在 Windows PC 上运行脚本。
1赞 pmg 9/26/2023
POSIX的?pubs.opengroup.org/onlinepubs/9699919799/functions/select.htmlselect()
0赞 jhole 9/26/2023
也许是重复的:见 stackoverflow.com/questions/13547471/...

答:

0赞 Shaf 9/26/2023 #1

我相信我已经找到了解决方案

void UserPause(void)
{
  printf("Press any key to continue\n");  // Print message to user
  while (!_kbhit())  // Loop while the keyboard is not hit
  {

    if (b_TesterPresentEnabled == 1)  
    // Only do tester present if functionality is enabled
    {
        TestTXMsg[0] = 0x3e;  // Set up the message bytes
        TestTXMsg[1] = 0x00;
        TxMsgLen = 2;  // Define the message length
        MsgTest();  // Function to send the message to the ECU
        Sleep(4000);
    }
  }
}

评论

3赞 pmg 9/26/2023
确保您的嵌入式控制器具有可用的功能:它不是 C 标准的一部分......或 POSIX。_kbhit()