Also ich persönlich bin ja für puren ASM, das is doch einfach spannender als müslifresserC 

09. November 2026, 18:26


Verstehe ich nicht recht, die Treiber gehören doch nicht zum Mircokernel?
Aber festgenagelt werden sie aber auf jedenfall nicht, wenn sie kein C verwenden, denn das C-Interface wird mit extern "C" deklariert.ja klar geht das so, aber was ist daran dann noch C++? Da kann ich mich doch gleich auf C beschränken.
Der Kernel selber, befasst sich gar nicht so viel mit Hardware, das machen doch eher die Treiber, der Kernel befasst sich mit Abstrakten Typen, wie Prozessen, die sehr wohl als Objekt darstellbar sind.
Zeige mir ne Hardware die man mit C ansteuert, rofl.Mikrocontroller werden zu Tausenden in (fast) reinem C Programmiert.
Bereits geregelt... zum größten Teil.

Zitat von: RoshlZeige mir ne Hardware die man mit C ansteuert, rofl.Mikrocontroller werden zu Tausenden in (fast) reinem C Programmiert.

und dynamic_cast, welches eine exception werfen kann verwendet RTTI, würde ich auch weglassen im Kernel, außerdem vorallem bei Mehrfachvererbung in Verbindung mit virtuellen Funktionenen verwendet.
//ckernel.h
struct PROCESS
{
DWORD dwID;
//[...]
};
#ifdef __cplusplus
extern "C" {
#endif
void MacheEtwasMitPROCESS(const PROCESS* pProcess);
//[...]
#ifdef __cplusplus
};
#endif
//cppkernel.h
#include "kernel.h"
class CProcess : protected PROCESS
{
public:
DWORD GetId();
//[...]
public:
void MacheEtwas() const;
//[...]
};
//kernel.cpp
#include "ckernel.h"
#include "cppkernel.h"
void MacheEtwasMitPROCESS(const PROCESS* pProcess)
{
static_cast<const CProcess*>(pProcess)->MacheEtwas();
}
void CProcess::MacheEtwas() const
{
//[...]
}
// x86.h
class CTSSegment
{
public:
//[...]
protected:
DWORD m_wBackLink; // only low 16-bit are used
DWORD m_dwESP0;
};
// cppkernel.h
#include "x86.h"
class CThread : public CTSSegment
{
public:
void MacheEtwas();
//[...]
protected:
CProcess* m_pProcess;
//[...]
};
// ckernel.h
struct THREAD
{
DWORD dwBackLink; // only low 16-bit are used
DWORD dwESP0;
//[...]
PROCESS* pProcess;
};
// ich spar mir den #ifdef __cplusplus quatsch
extern "C" void MacheEtwasMitTHREAD(THREAD* pThread);
// kernel.cpp
void MacheEtwasMitTHREAD(THREAD* pThread)
{
reinterpret_cast<CThread*>(pThread)->MacheEtwas();
}
void CThread::MacheEtwas()
{
}

Zitat von: PorkChickenMikrocontroller werden zu Tausenden in (fast) reinem C Programmiert.
streng genommen nein. weil "in()" und "out()" nicht zu C gehören, sondern zu der lib

Ne einfache FunktionBereits geregelt... zum größten Teil.Hm. Gut.
mov eax, funktionsnummer
mov ecx, fensterpointer
mov ebx, höhe
mov edx, breite
int 0XYh
void foo(); // ?foo@@YAXXZextern "C" void foo(); // _foo

GCC unter Linux fügt in der Regel keinen Unterstrich vorne hinzu...

