2012-09-28 65 views
1

我正在使用boost asio配置串口。 但爲什麼下面的代碼給出錯誤? 如果我評論set_option它工作正常。串口配置使用boost ASIO

下面的代碼提供了錯誤

serial_config.cpp:13: error: expected unqualified-id before numeric constant In file included from /home/chirag/boost_install/include/boost/asio/serial_port_service.hpp:25, from /home/chirag/boost_install/include/boost/asio/basic_serial_port.hpp:30, from /home/chirag/boost_install/include/boost/asio.hpp:25, from serial_config.cpp:1: /home/chirag/boost_install/include/boost/asio/detail/reactive_serial_port_service.hpp: In static member function âstatic boost::system::error_code boost::asio::detail::reactive_serial_port_service::store_option(const void*, termios&, boost::system::error_code&) [with SettableSerialPortOption = int]â: /home/chirag/boost_install/include/boost/asio/detail/reactive_serial_port_service.hpp:126: instantiated from âboost::system::error_code boost::asio::detail::reactive_serial_port_service::set_option(boost::asio::detail::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: instantiated from âboost::system::error_code boost::asio::serial_port_service::set_option(boost::asio::detail::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: instantiated from âvoid boost::asio::basic_serial_port::set_option(const SettableSerialPortOption&) [with SettableSerialPortOption = int, SerialPortService = boost::asio::serial_port_service]â serial_config.cpp:31: instantiated from here /home/chirag/boost_install/include/boost/asio/detail/reactive_serial_port_service.hpp:194: error: request for member âstoreâ in â*(const int*)optionâ, which is of non-class type âconst intâ

#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; 
} 
+0

讓我改進我的問題...如果我刪除char_size然後上面的代碼工作正常.... –

+0

什麼是行包括'BAUD(19200)','CSIZE(8)'等應該做的?具體來說,大寫BAUD,CSIZE等是什麼?他們是否定義了? – Ross

+0

他們只是變量,並宣佈主要... –

回答

3

如果更改character_size變量名從CSIZE到C_SIZE則應當編制.....

+0

謝謝你,夥計它的工作.. –