2013-06-03 125 views
0

我正在接口(RS232)上進行aeroflex gaisler硬件(RTEMS操作系統和leon2處理器)與桌面終端之間的通信。我已經編寫了一個用於它們之間通信的代碼。我在所有函數調用中遇到錯誤,如果有人遇到過這種問題,請幫我解決它。幫助我找到錯誤

注意:這個錯誤是不同於我以前的問題。

#include <windows.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <stdint.h> 
#include <ioctl.h> 
#include <apbuart.h> 
#include <rtems.h> 
#include <drvmgr/drvmgr.h> 


#ifndef serial_h 
    #define serial_h 
    #include "serial-com.h" 
#endif 

//#ifndef read_serial_h 
// #define read_serial_h 
// #include "read-serial.h" 
//#endif 

#ifndef memory_h 
    #define memory_h 
    #include "memory.h" 
#endif 

#define BUFSIZE 500 

void readSerialPort(char portname, char tbuffer[8]) 
{ 
    char fd; 

    // create a new handle for the serial com port 
    fd = createSerialPort("portname", DWORD accessdirection); // function call 

    // set the configuration of the handle 
    setComPortConfig(fd); 

    // set the timeout configuration of the handle 
    setComPortTimeouts(fd); 


    char TBuffer[BUFSIZE]; 


    sprintf(TBuffer,"%c",tbuffer); 


    char nread = strlen(TBuffer); 

    readFromSerialPort(fd, TBuffer, nread); 
    // read from terminal. 
// // create a new char buffer 
// //char outputBuffer[BUFSIZE]; 
// int h1, h2, h3 ; 
// 
// 
// // copy the two value in the outputbuffer 
// // the ";" is used a delimiter 
// // copy the two value in the outputbuffer 
// // the ";" is used a delimiter 
// sscanf(EF->a,"%d\n",&h1); 
// sscanf(EF->b,"%d",&h2); 
// sscanf(EF->c,"%d\n",&h3); 
// 
// // compute the actual size of the output string 
// int nread1 = strlen(EF->a); 
// int nread2 = strlen(EF->b); 
// int nread3 = strlen(EF->c); 

    // write the outputBuffer to the serial com port 
// readFromSerialPort(hSerial, EF->a, nread1); 
// readFromSerialPort(hSerial, EF->b, nread2); 
// readFromSerialPort(hSerial, EF->c, nread3); 

    // close the handle 
    CloseHandle(fd); 
} 

身體的功能:像

char createSerialPort("portname", DWORD accessdirection) 
{ 
// HANDLE hSerial = CreateFile(portname, 
//   accessdirection, 
//   0, 
//   0, 
//   OPEN_EXISTING, 
//   0, 
//   0); 
    char fd = CreateFile("/dev/rastaio0/apbuart1", GENERIC_READ | GENERIC_WRITE); // create = open 

    if (fd == INVALID_HANDLE_VALUE) { 
     //call GetLastError(); to gain more information 
    } 

    return hSerial; 
} 

錯誤: DWORD未初始化 GENERIC_READ | GENERIC_WRITE未初始化 訪問方向未初始化

我對函數調用和函數體有疑問。給我一些想法。

+2

我們應該如何知道問題出在哪裏,當你不包括你得到的錯誤? – unwind

+0

'fd = createSerialPort(「portname」,DWORD accessdirection)''行有問題。您應該傳遞'accessdirection'參數(即刪除DWORD並初始化accessdirection),或者根本不使用第二個參數。 – Inspired

+0

嗨放鬆!現在你可以看到錯誤 –

回答

4

變化

void readSerialPort(char portname, char tbuffer[8])void readSerialPort(char portname, char *tbuffer)

char createSerialPort("portname", DWORD accessdirection)char createSerialPort(char *portname, DWORD accessdirection)

fd = createSerialPort("portname", DWORD accessdirection);變化

fd = createSerialPort("/dev/rastaio0/apbuart1", GENERIC_READ | GENERIC_WRITE); 

然後

char fd = CreateFile("/dev/rastaio0/apbuart1", GENERIC_READ | GENERIC_WRITE); 

char fd = CreateFile(portname, accessdirection); 

這將解決你的一些錯誤。 問候, 盧卡

4

使用it.No需要調用其數據accessdirection type.You可以調用它像下面

fd = createSerialPort("portname",accessdirection); // function call 

,但如果你已經宣佈DWORD accessdirection這隻會工作之前定義DWORD accessdirection;

您尚未爲char createSerialPort(「portname」,DWORD accessdirection)函數添加原型,因此最好在其調用之前對其進行定義。

+0

考慮到上述所有建議後,其拋出的錯誤如下:Generic read undeclared(首次在函數中使用)Generic write undeclared(首次在函數中使用) –

+0

DWORD和GENERIC_READ特定於windows.You需要在頭文件列表中添加Windows.h。也包括winDef.h。 –

+0

最後我得到了解決方案:#include 然後它工作正常。 –