提问人:Shaf 提问时间:9/25/2023 最后编辑:pmacfarlaneShaf 更新时间:9/27/2023 访问量:52
如何在按下某个键之前运行定期操作
How to run a periodic action until a key is pressed
问:
我正在为嵌入式控制器编写测试脚本,某些测试需要用户操作才能继续。
在屏幕上打印指令,例如
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 循环。似乎有点令人费解。而且我不知道检测按键的命令。
答:
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()
评论
select()