Wenn Sie vxWorks als Entwicklungsplattform verwenden, können wir unsere Anwendung nicht mit der Standardfunktion main() schreiben. Warum können wir keine Hauptfunktion haben?Warum gibt es in vxWorks keine main() -Funktion?
Antwort
Vor der Version 6.0 VxWorks nur unterstützte Kernel für Aufgaben Ausführungsumgebung und nicht unterstützte Prozesse, die die traditionelle Anwendung Ausführungsumgebung auf OS wie Unix oder Windows. Aufgaben haben einen Einstiegspunkt, bei dem es sich um die Adresse des Codes handelt, der als Aufgabe ausgeführt werden soll. Diese Adresse entspricht einer C- oder Assembly-Funktion. Es kann ein Symbol namens "main" sein, aber sind C/C++ - Sprachannahmen über die main() - Funktion, die in der Kernelumgebung nicht unterstützt werden (insbesondere die traditionelle Behandlung der Parameter argc und argv). Darüber hinaus führen alle Tasks vor VxWorks 6.0 Kernel-Code aus. Sie können sich den Kernel als gemeinsames Repository von Code vorstellen, das alle miteinander verknüpft ist, und dann sehen Sie , dass Sie nicht mehrere Symbole mit demselben Namen ("main") haben können, da dies Namenskollisionen verursachen würde.
Jetzt ist dies nur korrekt, wenn Sie Ihren Anwendungscode mit dem Kernel-Image verknüpfen. Wenn Sie Ihren Anwendungscode herunterladen möchten, akzeptiert der Modullader das Laden mehrerer Module mit einer Main() Routine. Das letzte "Hauptsymbol", das in der Symboltabelle des Systems registriert ist, ist jedoch das einzige, auf das Sie über die Zielshell zugreifen können. Wenn Sie Aufgaben starten möchten, die den Code eines der ersten geladenen Module ausführen, müssen Sie die Adressen der vorherigen main() Funktion verwenden. Dies ist möglich, aber nicht praktisch. Es ist weit mehr praktisch, verschiedene Namen zu den Einstiegspunkten von Aufgaben (möglicherweise wie "xxxStart", wo "xxx" ist ein Name sinnvoll für was die Aufgabe soll tun).
Beginnend mit VxWorks 6.0 unterstützt das Betriebssystem eine Prozessumgebung. Diese Mittel, unter vielen anderen Dingen, dass Sie eine traditionelle Haupt haben können() Routine und dass seine argc und argv Parameter richtig gehandhabt werden, und dass der Anwendungscode wird in einem Kontext (Benutzerkontext) Ausführung, die anders ist aus dem Kernel-Kontext, so dass die Isolation zwischen Anwendungscode (die flockig sein kann) und Kern Code (der nicht flockig sein soll). PAD
- 1. istringstream - warum gibt es keine Reset-Funktion
- 2. Warum gibt es keine lubridate ::: update Funktion?
- 3. Warum gibt es keine strnchr-Funktion?
- 4. C++ 11 in vxworks
- 5. Warum gibt es in der Haskell-Standardbibliothek keine Scanl-Funktion?
- 6. Warum gibt es keine String.IsNumeric Funktion in C#
- 7. Warum gibt es in FlexUnit keine assertError() - Funktion?
- 8. Warum gibt es in C++ 14 keine Funktion std :: allocate_unique?
- 9. Warum gibt es keine Duration.ofWeeks()?
- 10. Warum gibt es keine Grenze?
- 11. main() Funktion in C
- 12. Warum gibt es in JavaFX keine ObservableQueues?
- 13. Warum gibt es keine Seq.partition in F #
- 14. Warum gibt es in Java keine Binärliterale?
- 15. Warum gibt es keine richtigen Permutationen zurück!
- 16. Warum gibt es in meiner Schluckaufgabe keine Fehlermeldung von "Wiredep" mit "dest.on ist keine Funktion"?
- 17. Warum sagt es xxx ist keine Funktion
- 18. Warum gibt es keine Monitor.EnterAsync-ähnliche Methode
- 19. Warum gibt es keine gleichzeitige TreeMap?
- 20. Warum gibt es keine Zeichenfolge.Split (String) Überladung?
- 21. Warum gibt es hier keine Inferenz?
- 22. Warum gibt es keine Testinstrumentierung für BroadcastReceiver?
- 23. Warum gibt es keine Typklasse für Containertypen?
- 24. Warum gibt es keine pausenlosen GCs?
- 25. Python-Funktion gibt keine
- 26. Standardinitialisierung in der main() - Funktion
- 27. Warum kompiliert int main() {}?
- 28. Warum gibt es keine "Iterable" -Schnittstelle in der STL?
- 29. Kann main() Funktion doppelt zurückgeben?
- 30. Warum gibt es keine list.clear() Methode in Python?