c++ code zu C umwandeln

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
yaben001
Beiträge: 2
Registriert: Sa Okt 21, 2017 4:58 am

c++ code zu C umwandeln

Beitrag von yaben001 » Sa Okt 21, 2017 5:07 am

Sehr geerhrte Damen und Herren,
ich soll ein Digital Input /Output ein Target Pc mittel das Programm Matlab aubauen,das problem ist dass ich den Code im c++ habe ,und ich soll von c++ code zu c Code umwandeln.kann jemand mir helfen
der code sieht so aus:

Code: Alles auswählen

void ReadValue(WASCO_12_S_Digital_Input* pInstance)
{
	char cHelp;
	switch(pInstance->PortUsed)
	{
	case PortAUsed:		
		cHelp = pInstance->Carrier->PortA_shadow = pInstance->servFunc->pReadPortA(pInstance->Carrier); // read port A
		cHelp &= andMask[pInstance->BitInPort]; // separate out selected bit
		if (cHelp == andMask[pInstance->BitInPort])
			pInstance->Value = 1; // bit in port is used
			else
			pInstance->Value = 0; // bit in port is not used
		break;
	case PortBUsed:		
		cHelp = pInstance->Carrier->PortB_shadow = pInstance->servFunc->pReadPortB(pInstance->Carrier);
		cHelp &= andMask[pInstance->BitInPort];
		if (cHelp == andMask[pInstance->BitInPort])
			pInstance->Value = 1;
		else
			pInstance->Value = 0;		
		break;
	case PortCLUsed:		
		cHelp = pInstance->Carrier->PortC_shadow = pInstance->servFunc->pReadPortC(pInstance->Carrier);
		cHelp &= andMask[pInstance->BitInPort];
		if (cHelp == andMask[pInstance->BitInPort])
			pInstance->Value = 1;
		else
			pInstance->Value = 0;		
		break;
	case PortCHUsed:
		cHelp = pInstance->Carrier->PortC_shadow = pInstance->servFunc->pReadPortC(pInstance->Carrier);
		cHelp &= andMask[pInstance->BitInPort];
		if (cHelp == andMask[pInstance->BitInPort])
			pInstance->Value = 1;
		else
			pInstance->Value = 0;		
		break;
	}
}

unsigned int BitOfPort(WASCO_12_S_Digital_Input* pInstance)
{
	unsigned int cHelp;
	cHelp = pInstance->Channel;
	
	if (cHelp < 8) // channel belongs to port A
	{
		pInstance->PortUsed = PortAUsed;
		pInstance->BitInPort = cHelp;
		
		#ifdef _debug_print
			printf("Port A used\n");
			printf("Bit %i used\n", cHelp);
		#endif
	
		return 0;
	}
	else if (cHelp < 16) // channel belongs to port B
	{
		pInstance->PortUsed = PortBUsed;
		cHelp -= 8;
		pInstance->BitInPort = cHelp;
		
		#ifdef _debug_print
			printf("Port B used\n");
			printf("Bit %i used\n", cHelp);
		#endif

		return 0;
	}
	else if (cHelp < 20) // channel belongs to port C
	{
		pInstance->PortUsed = PortCLUsed;
		cHelp -= 16;
		pInstance->BitInPort = cHelp;
	
		#ifdef _debug_print
			printf("Port C LOW used\n");
			printf("Bit %i used\n", cHelp);
		#endif

		return 0;
	}
	else if (cHelp < 24) // channel belongs to port C
	{
		pInstance->PortUsed = PortCHUsed;
		cHelp -= 16;
		pInstance->BitInPort = cHelp;

		#ifdef _debug_print
			printf("Port C HIGH used\n");
			printf("Bit %i used\n", cHelp);
		#endif

		return 0;

	}
	else 
		return OATsError_IOInvalidChannelNo;
}

		// initialisation of an instance
		// the function will be called several times
		// return size of struct WASCO_12_S_Digital_Input or 0 on errors
unsigned int OATSCALLBACK WASCO_12_S_Digital_InputInitInstance(WASCO_12_S_Digital_Input* pInstance)
{
	if ( pOATsService->pInitInstanceDefault(&ClassDef, &pInstance->m_Base) == 0 )
		return 0;

	// add instance specific initialisation

	return sizeof(WASCO_12_S_Digital_Input);
}

		// destruction of an instance
		// the function will be called several times
		// return size of struct WASCO_12_S_Digital_Input or 0 on errors
unsigned int OATSCALLBACK WASCO_12_S_Digital_InputKillInstance(WASCO_12_S_Digital_Input* pInstance)
{
	// add instance specific cleanup if required


	if ( pOATsService->pKillInstanceDefault(&ClassDef, &pInstance->m_Base) == 0 )
		return 0;

	return sizeof(WASCO_12_S_Digital_Input);
}
 
		// precompute data before all calls of Operate
		// this function often calls the Operate function or both are same
		// return 0=ok, 1=error
int OATSCALLBACK WASCO_12_S_Digital_InputFirstRun(WASCO_12_S_Digital_Input* pInstance)
{
	pInstance->Err = 0;

	pInstance->servFunc = pInstance->Carrier->servFunc;

	pInstance->Err = BitOfPort(pInstance); // detect bit and port number
	
	if (pInstance->Err)
		return 0;

	pInstance->Err = pInstance->servFunc->pDefineIOMode(pInstance->Carrier, input_mode, (int)pInstance->PortUsed);
	
	if (pInstance->Err)
		return 0;

	pInstance->servFunc->pCreateCSR(pInstance->Carrier);

	return 0;										// OK
}

		// steady part of the real time operation
		// this function often contains the complete functionality
		// return 0=ok, 1=error
int OATSCALLBACK WASCO_12_S_Digital_InputOperate(WASCO_12_S_Digital_Input* pInstance)
{
	if (pInstance->Err)
		return 0;

	ReadValue(pInstance);

	return 0;										// OK
}
Edit by Xin: Codetags eingefügt

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: c++ code zu C umwandeln

Beitrag von Xin » Sa Okt 21, 2017 6:33 am

yaben001 hat geschrieben: ich soll ein Digital Input /Output ein Target Pc mittel das Programm Matlab aubauen,das problem ist dass ich den Code im c++ habe ,und ich soll von c++ code zu c Code umwandeln.kann jemand mir helfen
der code sieht so aus: ...
Ich habe den Code jetzt überflogen und ich habe nichts gefunden, was daran C++ sein soll.
Ich würde sagen, Du bist mit der Aufgabe fertig, den Code nach C zu portieren.

Falls das ganze nicht durch den C-Compiler durchkommt, würde ich sagen, dass Du die Stellen nochmal postest.

Das Ganze macht nicht den Eindruck, als ob Du etwas lernen möchtest, sondern dass es eher in "Wer macht meine Hausaufgaben"-Board gehört. In dem Fall darf man eine Rechnung stellen? ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

yaben001
Beiträge: 2
Registriert: Sa Okt 21, 2017 4:58 am

Re: c++ code zu C umwandeln

Beitrag von yaben001 » Sa Okt 21, 2017 4:14 pm

Hallo ,
ich muss ein Baustein mit c Code im MATLAB aufbauen ,der Baustein wird zu Target Pc geladen wird.damit man Digital Input/Output mit Host pc(wo Matlab installiert ist) steuern kann.ich brauchte ein C code dafür aber ich habe ein Code Typ Cpp,deshalb habe ich gefragt wie kann ich es zu c Code umwandeln kann.ich habe den Code so gefunden.es ist für OATS programmiert.vielen Danke voraus

Code: Alles auswählen

	                                                        +----------------------------+
	                                                         |  WASCO_12_S_Digital_Input  |
                    WASCO_12_S_Digital_Carrier -| Carrier----                Carrier |- WASCO_12_S_Digital_Carrier
	                                                UINT -| Channel                      Value |- BOOL
	                            |                                                                    Err |- UINT
	                                                           +----------------------------+


--------------------------------------------------------------------
Jun,02,2006	created by OATs Interface Builder Version 1.09
*/

#undef _debug_print

//------------------------------------------------------------------
// include files as needed

#include "oats.h"
#include "wa12dc.h"
#include "wa12dcs.h"
#include "wa12di.h"
#ifdef _debug_print
	#include "stdio.h"
#endif 

//------------------------------------------------------------------
// public symbols and prototypes for the functions required by OATs

#ifndef _WIN32
extern "C" OATsClass ClassDef;	// referenced within the OATs library
#endif // _WIN32

unsigned int OATSCALLBACK WASCO_12_S_Digital_InputInitInstance(WASCO_12_S_Digital_Input* pInstance);
unsigned int OATSCALLBACK WASCO_12_S_Digital_InputKillInstance(WASCO_12_S_Digital_Input* pInstance);
int OATSCALLBACK WASCO_12_S_Digital_InputFirstRun(WASCO_12_S_Digital_Input* pInstance);
int OATSCALLBACK WASCO_12_S_Digital_InputOperate(WASCO_12_S_Digital_Input* pInstance);


#ifdef _WIN32
// for protected mode modules using floating point uncomment next line
//  extern "C" const int _fltused = 1;
#endif // _WIN32

//------------------------------------------------------------------
// OATs class structure

#ifdef _WIN32
extern "C" __declspec(dllexport) OATsClass	ClassDef =
#else // _WIN32
OATsClass		ClassDef =
#endif // _WIN32
{
	InitClassDummy,
	KillClassDummy,
	(InitInstanceFunction)WASCO_12_S_Digital_InputInitInstance,
	(KillInstanceFunction)WASCO_12_S_Digital_InputKillInstance,
	(FirstRunFunction)WASCO_12_S_Digital_InputFirstRun,
	(OperateFunction)WASCO_12_S_Digital_InputOperate,
	NULL,
	sizeof(WASCO_12_S_Digital_Input),
	OATS_CPU,
	// start of compiled signature, DO NOT MODIFY
"\0\2""BWASCO_12_S_Digital_Input\0\0\0\0P""\x28\x00""Carrier\0\0\x1A"\
"WASCO_12_S_Digital_Carrier\0I""\x0D\x00""Channel\0\0\xDQ""\x0B\x00"""\
"Value\0\0\1Q""\x09\x00""Err\0\0\xD\0",
	// end of compiled signature, DO NOT MODIFY
#ifdef _WIN32
	NULL,
#else // _WIN32
	&OATsModuleHeader,
#endif // _WIN32
	105
};

//------------------------------------------------------------------
// implementing functions for the OATs class

void ReadValue(WASCO_12_S_Digital_Input* pInstance)
{
	char cHelp;
	switch(pInstance->PortUsed)
	{
	case PortAUsed:		
		cHelp = pInstance->Carrier->PortA_shadow = pInstance->servFunc->pReadPortA(pInstance->Carrier); // read port A
		cHelp &= andMask[pInstance->BitInPort]; // separate out selected bit
		if (cHelp == andMask[pInstance->BitInPort])
			pInstance->Value = 1; // bit in port is used
			else
			pInstance->Value = 0; // bit in port is not used
		break;
	case PortBUsed:		
		cHelp = pInstance->Carrier->PortB_shadow = pInstance->servFunc->pReadPortB(pInstance->Carrier);
		cHelp &= andMask[pInstance->BitInPort];
		if (cHelp == andMask[pInstance->BitInPort])
			pInstance->Value = 1;
		else
			pInstance->Value = 0;		
		break;
	case PortCLUsed:		
		cHelp = pInstance->Carrier->PortC_shadow = pInstance->servFunc->pReadPortC(pInstance->Carrier);
		cHelp &= andMask[pInstance->BitInPort];
		if (cHelp == andMask[pInstance->BitInPort])
			pInstance->Value = 1;
		else
			pInstance->Value = 0;		
		break;
	case PortCHUsed:
		cHelp = pInstance->Carrier->PortC_shadow = pInstance->servFunc->pReadPortC(pInstance->Carrier);
		cHelp &= andMask[pInstance->BitInPort];
		if (cHelp == andMask[pInstance->BitInPort])
			pInstance->Value = 1;
		else
			pInstance->Value = 0;		
		break;
	}
}

unsigned int BitOfPort(WASCO_12_S_Digital_Input* pInstance)
{
	unsigned int cHelp;
	cHelp = pInstance->Channel;
	
	if (cHelp < 8) // channel belongs to port A
	{
		pInstance->PortUsed = PortAUsed;
		pInstance->BitInPort = cHelp;
		
		#ifdef _debug_print
			printf("Port A used\n");
			printf("Bit %i used\n", cHelp);
		#endif
	
		return 0;
	}
	else if (cHelp < 16) // channel belongs to port B
	{
		pInstance->PortUsed = PortBUsed;
		cHelp -= 8;
		pInstance->BitInPort = cHelp;
		
		#ifdef _debug_print
			printf("Port B used\n");
			printf("Bit %i used\n", cHelp);
		#endif

		return 0;
	}
	else if (cHelp < 20) // channel belongs to port C
	{
		pInstance->PortUsed = PortCLUsed;
		cHelp -= 16;
		pInstance->BitInPort = cHelp;
	
		#ifdef _debug_print
			printf("Port C LOW used\n");
			printf("Bit %i used\n", cHelp);
		#endif

		return 0;
	}
	else if (cHelp < 24) // channel belongs to port C
	{
		pInstance->PortUsed = PortCHUsed;
		cHelp -= 16;
		pInstance->BitInPort = cHelp;

		#ifdef _debug_print
			printf("Port C HIGH used\n");
			printf("Bit %i used\n", cHelp);
		#endif

		return 0;

	}
	else 
		return OATsError_IOInvalidChannelNo;
}

		// initialisation of an instance
		// the function will be called several times
		// return size of struct WASCO_12_S_Digital_Input or 0 on errors
unsigned int OATSCALLBACK WASCO_12_S_Digital_InputInitInstance(WASCO_12_S_Digital_Input* pInstance)
{
	if ( pOATsService->pInitInstanceDefault(&ClassDef, &pInstance->m_Base) == 0 )
		return 0;

	// add instance specific initialisation

	return sizeof(WASCO_12_S_Digital_Input);
}

		// destruction of an instance
		// the function will be called several times
		// return size of struct WASCO_12_S_Digital_Input or 0 on errors
unsigned int OATSCALLBACK WASCO_12_S_Digital_InputKillInstance(WASCO_12_S_Digital_Input* pInstance)
{
	// add instance specific cleanup if required


	if ( pOATsService->pKillInstanceDefault(&ClassDef, &pInstance->m_Base) == 0 )
		return 0;

	return sizeof(WASCO_12_S_Digital_Input);
}
 
		// precompute data before all calls of Operate
		// this function often calls the Operate function or both are same
		// return 0=ok, 1=error
int OATSCALLBACK WASCO_12_S_Digital_InputFirstRun(WASCO_12_S_Digital_Input* pInstance)
{
	pInstance->Err = 0;

	pInstance->servFunc = pInstance->Carrier->servFunc;

	pInstance->Err = BitOfPort(pInstance); // detect bit and port number
	
	if (pInstance->Err)
		return 0;

	pInstance->Err = pInstance->servFunc->pDefineIOMode(pInstance->Carrier, input_mode, (int)pInstance->PortUsed);
	
	if (pInstance->Err)
		return 0;

	pInstance->servFunc->pCreateCSR(pInstance->Carrier);

	return 0;										// OK
}

		// steady part of the real time operation
		// this function often contains the complete functionality
		// return 0=ok, 1=error
int OATSCALLBACK WASCO_12_S_Digital_InputOperate(WASCO_12_S_Digital_Input* pInstance)
{
	if (pInstance->Err)
		return 0;

	ReadValue(pInstance);

	return 0;										// OK
}
Edit by Xin: CodeTags eingefügt.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: c++ code zu C umwandeln

Beitrag von Xin » Sa Okt 21, 2017 8:18 pm

yaben001 hat geschrieben:Hallo ,
ich muss ein Baustein mit c Code im MATLAB aufbauen ,der Baustein wird zu Target Pc geladen wird.damit man Digital Input/Output mit Host pc(wo Matlab installiert ist) steuern kann.ich brauchte ein C code dafür aber ich habe ein Code Typ Cpp,deshalb habe ich gefragt wie kann ich es zu c Code umwandeln kann.ich habe den Code so gefunden.es ist für OATS programmiert.vielen Danke voraus
Und ich habe die gleiche Antwort: Was Du postest ist C, kein C++.
Es ist vollkommen zusammenhanglos und das guckt sich auch keiner hier an, nur weil Du den Code irgendwo gefunden hast.

Dein Problem hat auch nichts mit dem Erlernen von Programmierung zu tun. Wenn Du möchtest, dass sich jemand speziell um Deine Bedürfnisse kümmert und Deine Aufgaben löst, sich in Sachen von 2006 reinliest, dann ist das etwas, damit Du es nicht machen musst, ist eine Sache für die Du Dich bitte an einen Freelancer wendest, der Dich dann auch über die Entwicklungskosten informieren wird.

Solange Du keine Frage hast, die zum Erlernen von Programmierung dient, bist Du hier wohl nicht richtig.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: c++ code zu C umwandeln

Beitrag von cloidnerux » Mi Okt 25, 2017 8:18 am

habe ein Code Typ Cpp
Kann es sein, dass du die Dateiendung "*.cpp" meinst?
Wenn ja, nenne es einfach mal in ".c" um.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Antworten