serielle schnittstelle und c++



  • auf jeden fall alle ibm kompatiblen.

    kein größerer aufwand als unter dos, wenn man das alles hübsch kapselt

    besser ein fetter standard als os abhängige routinen würd ich mal sagen



  • anderer meinung 😉



  • Naja, selbst mein alter C64 hatte einen parallelen Port und eine serielle Schnittstelle. Und da die Library ja generig sein müsste, würde es selbst auf dem C64 laufen. Und selbst wenn kein Port verfügbar sein sollte, könnte man sich da was überlegen. Z.B. das eine Exception geworfen wird. Denn ganz ehrlich, wer sagt denn, das jede Plattfiorm ein Ausgabe- oder Eingabegerät hat? Oder was passiert, wenn ich auf solchen Systemen cout und cin nutzen will??? Ist doch das selbe Problem wie mit den Ports.



  • Hallo,
    für ANSI-C gibt es einen TR namens "C Extensions to support Embedded Processors"

    Ob das mal Standard wird ist soweit ich weiß aber noch nicht raus.



  • ich habe mir nun die header datei für die serielle schnittstelle besorgt, nur scheine ich es nicht hinzubekommen, diese zu verwenden. muss dazu sagen das ich auf diesem gebiet erst sehr wenig erfahrung habe, berichtigt mich falls ich nen falschen ansatz habe...

    hab jetzt erstmal ein neues objekt erstell:

    CSerial com;
    

    CSerial ist ja die Klasse für die Schnittstelle...
    Dann sollte doch eigentlich über

    com.Open(1,19600,8,NULL,0);
    

    die Schnittstelle mit den Parametern für Baud usw geöffnet werden und mit

    com.ReadData( buffer);
    

    das Gerät am Port ausgelesen, oder befinde ich mich bei diesem Denken auf dem Holzweg?

    am Port selbst hängt ein Programmiermodul und an diesem eine PM_B Karte



  • hast du in deinem Code:

    #include "headerdatei.h"
    


  • ja



  • hi chris

    frag doch einfach mal im richtigen forum, sprich: bei den mfc könnern (hier im mfc forum).

    außerderm gibts hier eine beispielanwendung, denke ich
    http://www.codeguru.com/Cpp/I-N/network/serialcommunications/article.php/c2503

    zum download.

    so long

    ps: auf mfc komme ich, weil im der zu donwloadenden beispielanwendung
    #include "stdafx.h"
    benötigt wird 😉 also mfc mit einbinden!!



  • habs mal eben durchgetestet: ein projekt anlegen
    win32 konsole, aber MIT mfc unterstützung.

    dann gehts wunderbar mit dem downgeloadeten source.

    so long



  • void CI2c_porgDlg::OnRead()
    {
    	CComboBox * pCB = (CComboBox *) GetDlgItem ( IDC_COM ) ; 
    	int com_no = pCB -> GetCurSel () ;
    	if ( com_no >= 0 )		
    	{
    		pCB -> GetLBText( com_no , iCOM ) ;
    
    CFileDialog sa ( 0,". bin", "i2c", 0, "Bin-Dateien(*.bin)|*.bin||" ) ;
    		if (sa.DoModal() == IDOK)
    		{
    			if (iCOM == "COM1") cport = 1;
    			if (iCOM == "COM2") cport = 2;
    			UpdateData ( TRUE ) ;
    			CString m_sPath = sa.GetPathName( );
    			CFile newbin;
    		    newbin.Open( m_sPath, CFile::modeCreate|CFile::modeWrite);
    			CSerial serial;
    			if (serial.Open(1, 9600))
    				{
    					char* lpBuffer = new char[500];
    					int nBytesRead = serial.ReadData(lpBuffer, 500);
    					char szSampleText[255];
    					strcpy(szSampleText, lpBuffer);
    					newbin.Write (szSampleText,255);
    					delete []lpBuffer;
    				}
    				else
    				AfxMessageBox("Failed to open port!");
    		}
    }	
    	else
    		MessageBox ("Bitte COM-Port wählen!");
    
    }
    

    So sieht mein Programmstück bisher aus, liefert mir aber einen Fehler....

    Debug Assertiation Failed
    Programm:....
    File:filecore.cpp
    Line:237

    😞



  • Hallo,

    in Zeile 237 der filecore.cpp befindet sich das hier:

    ASSERT_VALID(this);
    

    also stimmt irgendetwas mit dem CFile-Objekt newbin nicht, das mußt du prüfen, warum evtl. keine Datei erstellt wurde (dazu z.B. den Rückgabewert von newbin.Open prüfen, oder den Dateinamen ausgeben lassen).

    MfG



  • chris`- schrieb:

    void CI2c_porgDlg::OnRead()
    {
    	CComboBox * pCB = (CComboBox *) GetDlgItem ( IDC_COM ) ; 
    	int com_no = pCB -> GetCurSel () ;
    	if ( com_no >= 0 )		
    	{
    		pCB -> GetLBText( com_no , iCOM ) ;
    		
    
    CFileDialog sa ( 0,". bin", "i2c", 0, "Bin-Dateien(*.bin)|*.bin||" ) ;
    		if (sa.DoModal() == IDOK)
    		{
    			if (iCOM == "COM1") cport = 1;
    			if (iCOM == "COM2") cport = 2;
    			UpdateData ( TRUE ) ;
    			CString m_sPath = sa.GetPathName( );
    			CFile newbin;
    		    newbin.Open( m_sPath, CFile::modeCreate|CFile::modeWrite);
    			CSerial serial;
    			if (serial.Open(1, 9600))
    				{
    					char* lpBuffer = new char[500];
    					int nBytesRead = serial.ReadData(lpBuffer, 500);
    					char szSampleText[255];
    					strcpy(szSampleText, lpBuffer);
    					newbin.Write (szSampleText,255);
    					delete []lpBuffer;
    				}
    				else
    
    				AfxMessageBox("Failed to open port!");
    		}
    }	
    	else
    		MessageBox ("Bitte COM-Port wählen!");
    
    }
    

    So sieht mein Programmstück bisher aus, liefert mir aber einen Fehler....

    Debug Assertiation Failed
    Programm:....
    File:filecore.cpp
    Line:237

    😞

    aber das beispiel, was ich dir da oben zum download angeraten habe, funktioniert doch wohl. hast du dich daran orientiert?
    nochmal: frag doch im richtigen unterforum. ➡ Mfc



  • Danke für die hilfe, problem hat sich gelöst... habe einfach den strcpy befehl rasugenommen und schreibe den puffer direkt in die datei.



  • gibt es eine möglichkeint den buffer der seriellen schnittstelle zu löschen?




Anmelden zum Antworten