Keil Vision - Access Violation no execute/read permission

Wer beim Ausführen seines Assembler oder C-Programmes in Keil µVision folgende ähnliche Fehler bekommt:
*** error 65: access violation at C:0x000B : no 'execute/read' permission
*** error 65: access violation at 0x00000000 : no 'execute/read' permission
*** Error 65: Access violation at 0x00000004 : No 'write' permission
der muss folgendermaßen vorgehen, um das Programm ausführen zu können. Man muss mit dem MAP-Kommando dem Programm die entsprechenden Zugriffs-Rechte zuweisen.

Dafür sollte man als erstes einmal ein „Initialization file“ anlegen, wenn man das noch nicht gemacht hat. Einfach eine Textdatei mit z.B. folgenden Inhalt (den genauen Speicherbereich sollte jeder für seinen Computer individuell bestimmen):
MAP C:0x0000, C:0xFFFF read write exec
als z.B. Map.ini abspeichern. Dann muss diese Initialization-Datei noch ins Projekt eingebunden werden, damit es die Einstellungen immer automatisch beim Programm-Start lädt: Das geht so:
Im oberen Menü auf: „Project“ -> Options for Target -> Debug -> Initialization file
Dort nun auf der linken (wenn man den integrierten Simulator nutzt) Seite auf den Button mit den drei Punkten gehen und das entsprechende kurz davor angelegte „Initialization file“ auswählen. Oben sollten noch die beiden Optionen „Load Application at Startup“ und „Run to main()“ ausgewählt sein. Schon sollte das Programm ganz normal durchlaufen.

Initialization file bei Keil Vision

Im übrigen kann man die Memory-MAP auch beim Debugger einstellen. Diese Einstellung geht aber dann immer verloren, wenn man wieder aus dem Debug-Modus geht. Man findet sie im Debug-Modus unter: „Debug“ -> “Memory Map ...“. Dort kann man nun auch wieder seine Bereiche und seine Berechtigungen anlegen und mit den Button „Map Range“ übernehmen.



Quellen: