首页 > 解决方案 > 这个 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));
         
}

标签: c++

解决方案


在适当的嵌入式系统上,它确实会在 COM2 发送器保持寄存器中放置一百万字节。由于它的传输速度比端口实际传输它们的速度要快,因此它们中的大部分都会丢失。要实际发送所有一百万字节,必须在复制每个字节之前读取状态寄存器并检查第 5 位(THR 为空)。

在运行现代操作系统的计算机上,它会出错,因为不允许用户空间直接访问 I/O 端口,它必须通过驱动程序。


推荐阅读