Das Problem hatte ich bis vor einiger Zeit auch. Ja nach Speicherkarte, Formatierung und Füllstand hatte sich die SX200 gleich wieder ausgeschaltet. Vorübergehend half mal, einfach ein Foto zu machen oder die Einstellungen zu ändern, damit cchdk.cfg neu gespeichert wird. Auch beharrliches Drücken auf die Einschalttaste ging meistens.
Ich hatte dann die für den Start verantworlichen Codeteile (core\main.c, loader\sx200is\*.*, platform\sx200is\sub\100c\*.* usw.) durchsucht, ob da irgendetwas Auffälliges wäre. Das Drehen an einigen Wartezeiten brachte vorübergehend Besserung, aber eben nur vorübergehend. Teilweise blieb die Kamera auch total hängen, so dass ich den Akku rausnehmen musste.
Den entscheidenden Durchbruch hatte ich erst, als ich die Anfangsinitialisierung in core\main.c von core_spytask() zu core_spytask_can_start() verschoben hatte. Das sieht dann so aus:
void core_spytask_can_start
()
{
#if !CAM_DRYOS
drv_self_unhide
();
#endif
conf_restore
();
gui_init
();
#if CAM_CONSOLE_LOG_ENABLED
console_init
();
#endif
mkdir
("A/CHDK");
mkdir
("A/CHDK/FONTS");
mkdir
("A/CHDK/SYMBOLS");
mkdir
("A/CHDK/SCRIPTS");
mkdir
("A/CHDK/LANG");
mkdir
("A/CHDK/BOOKS");
mkdir
("A/CHDK/GRIDS");
#ifdef OPT_CURVES
mkdir
("A/CHDK/CURVES");
#endif
mkdir
("A/CHDK/DATA");
mkdir
("A/CHDK/LOGS");
#ifdef OPT_EDGEOVERLAY
mkdir
("A/CHDK/EDGE");
#endif
spytask_can_start
= 1;
}
...
void core_spytask
()
{
started
(); // blaue LED Ein
do
{
msleep
(20);
}
while (!spytask_can_start
);
finished
(); // blaue LED aus
...
Erstellt in 0.009 Sekunden, mit
GeSHi 1.0.8.9
Seitdem (4 Wochen) ist der Fehler nie wieder aufgetreten.
Auch das Ausschalten der SD-Kartenspannung (so der Kommentar) und die "magische" Warteschleife in loader\sx200is\entry.S konnte ich ohne Nebeneffekte entfernen:
- Code: Alles auswählen
.section .entry
// Turn OFF SD Card power
// to support autostart
// LDR R3, =0xC0220018
// MOV R2, #0x44
// STR R2, [R3]
// looks like idle cycle is required for proper shutdown
// MOV R3, #0xF0000 // increased from 8000 to F0000 for extra delay for sx200 maybe could be 10000 ?
//1:
// SUB R3, R3, #1
// CMP R3, #0
// BNE 1b
// ordinary startup...
MOV SP, #0x1900
MOV R11, #0
B my_restart
Getestet habe ich mit einer alten langsamen 128MB , einer 4GB Sandisk Class 2 und einer 16GB Class 6 Karte, bei allen ohne Probleme von frisch formatiert bis voll und auch nach dem Löschen einiger Bilder oder Videos.
Was andere Kameratypen dazu sagen, insbesondere VxWorks, kann ich nicht prüfen, da ich keine zur Verfügung habe. Vielleicht kann das mal jemand übernehmen? Zumindest für die SX200 wäre es eine Lösung.