c語言讀取串口
⑴ C語言用read讀取串口信息,按每位元組讀取和一次性讀取一定長度效率上有區別嗎
肯定有區別的,而且相差還比較大。
因為read是用戶態程序,然後每read一次都對應一次系統調用 (從用戶態切換到內核態,再切回到用戶態),其實耗時最多的就是狀態切換。
如果一次性讀取5個位元組,那麼就只有一次系統調用(兩個狀態切換),
如果一次讀一位元組,需要讀5次,就有5次系統調用 (10個狀態切換)。
具體相差多大,跟實際的環境有關,測試的話要大量的數據才能看出來。
⑵ VS或者VC6.0編寫的C語言程序,怎樣能夠實現串口數據的收發
1 、Windows API通信函數方法 。與通信有關的Windows API函數共有26個,但主要有關的有: CreateFile() 用 「comn」(n為串口號)作為文件名就可以打開串口。 ReadFile() 讀串口。
2、WriteFile() 寫串口。 CloseHandle() 關閉串口句柄。初始化時應注意CreateFile()函數中串兆鍵口共享方式應設為0,串口為不可共享設備,其它與一般文件讀寫類似。以下給出API實現的源代碼。
3、利用埠函數直接操作 。這種方式主要是採用兩個埠函數_inp(), _outp()實現對串口的讀寫,其中讀埠函數的原型為: int _inp(unsigned shot port) 。該函數從埠讀取一個位元組,埠號為0~65535。 寫埠的函數原型為: nt _outp(unsigned shot port, int databyte) 。
4、 MSComm控制項 。MSComm控制項是微軟開發的專用通信控制項,封裝了串口的所有功能,使用很方便,但在實際應用中要小心對其屬性進行配置。下面詳細說明該類應用方法族坦巧。
⑶ c 獲取串口號 c 自動獲取串口號
用C怎麼寫獲取串口的內容
看驅動程序的介面啊
一般是是open(「口名」)
用C/C++寫一扒游個小程序讀取串口接收到賀此銷的數據
你太幸運了,剛好我有一個,你在禪游vc++6.0下測試一下。
/* serrecv.c */
/* Receives and saves a file over a serial port */
/* Last modified: Septemeber 21, 2005 */
/* [goman89] */
#include
#include
#include
/* Function to print out usage information */
void usage(void);
/* Function to set up the serial port settings with the specified baud rate,
no parity, and one stop bit */
void set_up_serial_port(HANDLE h, long baud);
/* Function to receive and save file from serial port */
void get_file_from_serial_port(HANDLE h, char *file_name, unsigned long file_length);
int main(int argc, char **argv)
{
HANDLE serial_port; /* Handle to the serial port */
long baud_rate = 9600; /* Baud rate */
char port_name[] = "COM1:"; /* Name of serial port */
unsigned long file_size; /* Size of file to receive in bytes */
unsigned long bytes_received; /* Bytes received from serial port */
unsigned long file_name_size; /* Size of file name in bytes */
char file_name[256]; /* Name of file to receive */
/* Check mand line */
if (argc == 3)
{
/* Read in baud rate */
if (argv[1][1] != 'b' || sscanf(argv[2], "%ld", &baud_rate) != 1)
{
usage;
exit(0);
}
}
else if (argc != 1)
{
usage;
exit(0);
}
/* Open up a handle to the serial port */
serial_port = CreateFile(port_name, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
/* Make sure port was opened */
if (serial_port == INVALID_HANDLE_VALUE)
{
fprintf(stderr, "Error opening port ");
CloseHandle(serial_port);
exit(0);
}
/* Set up the serial port */
set_up_serial_port(serial_port, baud_rate);
/* Receive file name size from serial port */
ReadFile(serial_port, (void *)&file_name_size, sizeof(unsigned long), &bytes_received, NULL);
if (bytes_received != sizeof(unsigned long))
{
fprintf(stderr, "Error getting file name size. ");
CloseHandle(serial_port);
exit(0);
}
/* Receive file name from serial port */
ReadFile(serial_port, (void *)file_name, file_name_size, &bytes_received, NULL);
if (bytes_received != file_name_size)
{
fprintf(stderr, "Error retrieving file name. ");
CloseHandle(serial_port);
exit(0);
}
/* Append NULL terminator to end of string */
file_name[bytes_received] = '