使用boost ASIO进行串口配置

时间:2012-09-28 13:39:44

标签: linux embedded serial-port boost-asio

我正在使用boost asio配置串口。 但为什么下面的代码给出错误? 如果我评论set_option它工作正常。

下面的代码给出了错误

  

serial_config.cpp:13:错误:数字前的预期unqualified-id   常量包含在文件中   /home/chirag/boost_install/include/boost/asio/serial_port_service.hpp:25,                    来自/home/chirag/boost_install/include/boost/asio/basic_serial_port.hpp:30,                    来自/home/chirag/boost_install/include/boost/asio.hpp:25,                    来自serial_config.cpp:1:/home/chirag/boost_install/include/boost/asio/detail/reactive_serial_port_service.hpp:   在静态成员函数中âstaticboinboost :: system :: error_code   提高:: ASIO ::详细:: reactive_serial_port_service :: store_option(常量   void *,termios&,boost :: system :: error_code&)[with   SettableSerialPortOption = int]â:   /home/chirag/boost_install/include/boost/asio/detail/reactive_serial_port_service.hpp:126:   从âboost:: system :: error_code实例化   提高:: ASIO ::详细:: reactive_serial_port_service :: set_option(升压:: ASIO ::详细:: reactive_descriptor_service :: implementation_type&安培;,   const SettableSerialPortOption&,boost :: system :: error_code&)[with   SettableSerialPortOption = int]â   /home/chirag/boost_install/include/boost/asio/serial_port_service.hpp:167:   从âboost:: system :: error_code实例化   提高:: ASIO :: serial_port_service :: set_option(升压:: ASIO ::详细:: reactive_descriptor_service :: implementation_type&安培;,   const SettableSerialPortOption&,boost :: system :: error_code&)[with   SettableSerialPortOption = int]â   /home/chirag/boost_install/include/boost/asio/basic_serial_port.hpp:390:   从void中实例化   提高:: ASIO :: basic_serial_port :: set_option(常量   SettableSerialPortOption&)[使用SettableSerialPortOption = int,   SerialPortService = boost :: asio :: serial_port_service]â   serial_config.cpp:31:从这里实例化   /home/chirag/boost_install/include/boost/asio/detail/reactive_serial_port_service.hpp:194:   错误:请求成员âstoreâ在â€(const int *)optionâ中,即   非类型的类型âconstintâ

#include <boost/asio.hpp> // include boost
using namespace::boost::asio;  // save tons of typing
#include <iostream>
using std::cin;

// These are the values our port needs to connect
#ifdef _WIN32
// windows uses com ports, this depends on what com port your cable is plugged in to.
    const char *PORT = "COM3";
#else
// *nix com ports
    const char *PORT = "dev/ttyS3";
#endif
// Note: all the following except BAUD are the exact same as the default values

// what baud rate do we communicate at
serial_port_base::baud_rate BAUD(19200);
// how big is each "packet" of data (default is 8 bits)
serial_port_base::character_size CSIZE( 8 );
// what flow control is used (default is none)
serial_port_base::flow_control FLOW( serial_port_base::flow_control::none );
// what parity is used (default is none)
serial_port_base::parity PARITY( serial_port_base::parity::none );
// how many stop bits are used (default is one)
serial_port_base::stop_bits STOP( serial_port_base::stop_bits::one );

int main()
{
    // create the I/O service that talks to the serial device
    io_service io;
    // create the serial device, note it takes the io service and the port name
    serial_port port( io, PORT );

    // go through and set all the options as we need them
    // all of them are listed, but the default values work for most cases
    port.set_option( BAUD );
    port.set_option( CSIZE );
    port.set_option( FLOW );
    port.set_option( PARITY );
    port.set_option( STOP );

    // buffer to store commands
    // this device reads 8 bits, meaning an unsigned char, as instructions
    // varies with the device, check the manual first
    unsigned char command[1] = {0};

    // read in user value to be sent to device
    int input;
    cin >> input;

    // Simple loop, since the only good values are [0,255]
    //  break when a negative number is entered.
    // The cast will convert too big numbers into range.
    while( input >= 0 )
    {
        // convert our read in number into the target data type
        command[0] = static_cast<unsigned char>( input );

        // this is the command that sends the actual bits over the wire
        // note it takes a stream and a asio::buffer
        // the stream is our serial_port
        // the buffer is constructed using our command buffer and
        //  the number of instructions to send
        write( port, buffer( command, 1 ) );

        // read in the next input value
        cin >> input;
    }

    // all done sending commands
    return 0;
}

1 个答案:

答案 0 :(得分:3)

如果你从CSIZE将character_size变量名改为C_SIZE那么它应该有效.....