c++ - 这个 C++ 函数在运行时会做什么?
问题描述
谁能告诉我以下功能send_signal
实际上会做什么?我假设它将向 发送 100 万字节的数据COM2
,但这似乎与它的实际实现不匹配。
更新。COM2 上的硬件是机械臂,所讨论的功能会触发机械臂。然而,手臂动作只持续大约 10 秒 - 但我猜测 100 万字节的数据将需要超过 10 秒的时间来发送,因此会触发多个动作(但它不会)。
#define TXDATA 0x2F8 // COM2
#define SIGNAL 0x00 // This value gives +12V for 1 milli second
void send_signal(void)
{
long count;
for (count = 0; count < 1000000; count++)
_outp(TXDATA, (char) (SIGNAL + SIGNAL));
}
解决方案
在适当的嵌入式系统上,它确实会在 COM2 发送器保持寄存器中放置一百万字节。由于它的传输速度比端口实际传输它们的速度要快,因此它们中的大部分都会丢失。要实际发送所有一百万字节,必须在复制每个字节之前读取状态寄存器并检查第 5 位(THR 为空)。
在运行现代操作系统的计算机上,它会出错,因为不允许用户空间直接访问 I/O 端口,它必须通过驱动程序。
推荐阅读
- dataweave - 如何使用 Dataweave 从 XML 中删除整个标签?
- google-apps-script - 如果单元格保持突出显示,如何避免谷歌工作表脚本不记录新输入的值?
- prolog - 枚举给定列表中所有元素的多组,总和为给定数字
- c++ - 将客户端成员函数发送到 SLOT() 宏
- android - iOS 相机权限,原生 iOS 权限警报未在第一次请求时触发
- python - 问题,新列中的所有行都更改为上次执行的计算结果
- c - 在C中解密替换密文文件
- excel - 将过滤后的范围放入数组 - ....AutoFilter.Range.SpecialCells(xlCellTypeVisible).Offset(1)
- android - 如何将 Play Store API 调用转换为挂起函数
- c# - 将 DBContext 服务添加到 Worker Project 中的 program.cs