Embedded-CPU-Simulatoren können im Allgemeinen so programmiert werden, dass sie auch Hardware simulieren. Alle anderen Virtualisierungstechnologien als Xen tun dies. Sie müssen jedoch Code schreiben, der vorgibt, einige Register an einer physischen Adresse oder auf x86 eine Adresse am E / A-Bus zu haben, und dann auf Lese- und Schreibvorgänge an diesen Adressen antworten, als wäre Ihre Software eine physische Chip, auf dessen Steuer- und Statusregister zugegriffen wurde.
Wenn Sie dies tun möchten, würde ich vorschlagen, QEMU zu ändern. Aber es wäre nicht einfach. Dies geschieht in der Regel nur, wenn Sie einen benutzerdefinierten Chip mit einem Mikrocontroller und einigen anderen Kernen für Ihre E / A entwerfen.
Das von ARM Holdings vertriebene Entwicklungssystem sieht dies vor und ist wahrscheinlich einfacher zu handhaben als das Hacken auf QEMU, aber sehr teuer.
Es gibt mehrere Open Source ARM-Emulatoren, die eine einzige Unterroutine ausführen, die selbst andere Unterroutinen aufrufen kann, die Sie zum Debuggen und Optimieren der Leistung von Unterroutinen verwenden können, die nicht vom Hardwarezugriff abhängig sind. Ich habe eine davon mit großem Erfolg genutzt, um einen AES-Verschlüsseler für ARM7TDMI zu optimieren.
Sie können ein einfaches Unit-Test-Harness in C oder C ++ schreiben, die zu testende Klasse oder Subroutine damit verknüpfen und dann im Simulator ausführen.
Ich habe jahrelang über ein ähnliches Problem nachgedacht, wie man Linux- oder Mac OS X-Kernel-Code testet. Es sollte möglich sein, aber ich habe es nie versucht. Eine Möglichkeit besteht möglicherweise darin, einen vollständigen Kernel zu erstellen, anstatt den Code isoliert zu testen, wobei das Unit-Test-Framework direkt in den Kernel eingebunden ist. Sie würden dann die Unit-Tests von einer externen Schnittstelle aus starten.
Vielleicht wäre es produktiver, ein Tool zur Codeabdeckung zu verwenden und dann Ihre Firmware als vollständiges Paket über die externe Schnittstelle zu testen. Das Coverage-Tool findet Codepfade, die noch nicht getestet wurden, sodass Sie zusätzliche externe Tests hinzufügen können, um mehr Coverage zu erhalten.