The 100f have no asm code for open.
What does this mean ?
[/quote]
Oh great, i look now on newest source you post, the special asm code for ixus 1000 is now not need anymore.because the mkdirs of older version are change to mkdir_if_not_exist.
the crash i get on ixus 1000 can not happen with this code in chdk currently.
mkdir_if_not_exist("A/DCIM");
#if defined(CAM_DATE_FOLDER_NAMING)
if (conf.raw_in_dir)
get_target_dir_name(dir);
else
sprintf(dir, RAW_TARGET_DIRECTORY, 100);
#else
sprintf(dir, RAW_TARGET_DIRECTORY, (conf.raw_in_dir)?get_target_dir_num():100);
#endif
mkdir_if_not_exist(dir);
in 100d firmware is in 100d/boot.c the asm code.this can remove now, because no special open is need.
//IXUS 1000 100D
int fsionotify_compfail = 0; // count of number of times the file handle was already in the array
int fsionotify_success = 0; // count of number of times the code succeeded
int __attribute__((naked,noinline)) _Open(const char *name, int flags, int mode) {
asm volatile (
"STMFD SP!, {R4-R8,LR} \n"
"MOV R6, R0 \n"
"LDRB R0, [R0] \n"
"MOV R7, R2 \n"
"MOV R4, R1 \n"
"BL sub_FF874504 \n"
"MOV R8, R0 \n"
"MOV R0, #1 \n"
"BIC R5, R0, R4,LSR#12 \n"
"BIC R4, R4, #0x9000 \n"
"MOV R0, R8 \n"
"MOV R1, #1 \n"
"BL sub_FF875894 \n"
"MOV R2, R7 \n"
"MOV R1, R4 \n"
"MOV R0, R6 \n"
"BL _open \n"
"CMP R5, #0 \n"
"MOV R7, R0 \n"
"MOVNE R0, R7 \n"
"MOVNE R2, R4 \n"
"MOVNE R1, R6 \n"
"BLNE sub_FF872470_my \n"
"MOV R0, R8 \n"
"BL sub_FF87590C \n"
"MOV R0, R7 \n"
"LDMFD SP!, {R4-R8,PC} \n"
);
return 0; // stop compiler warning
}
void __attribute__((naked,noinline)) sub_FF872470_my() {
asm volatile (
"STMFD SP!, {R4-R8,LR} \n"
"MOV R5, R0 \n"
"LDR R0, =0x31B8 \n"
"MOV R7, R1 \n"
"LDR R0, [R0,#4] \n"
"MOV R6, R2 \n"
"CMP R0, #0 \n"
"LDMEQFD SP!, {R4-R8,PC} \n"
"CMP R5, #0 \n"
"LDMLTFD SP!, {R4-R8,PC} \n"
"MOV R4, #0 \n"
"LDR R2, =0x38EA8 \n"
"MOV R0, #0 \n"
"loc_FF8724A4: \n"
"ADD R1, R0, R0,LSL#1 \n"
"LDR R1, [R2,R1,LSL#5] \n"
"CMN R1, #1 \n"
"ADDEQ R0, R0, R0,LSL#1 \n"
"ADDEQ R4, R2, R0,LSL#5 \n"
"BEQ loc_FF8724CC\n"
"CMP R1, R5 \n"
"BEQ loc_2 \n" // + // branch if found entry matching new file handle
"ADDNE R0, R0, #1 \n"
"CMPNE R0, #0xA \n"
"BLT loc_FF8724A4 \n"
"loc_FF8724CC: \n"
"CMP R4, #0 \n"
"LDREQ R1, =0x1C9 \n"
"LDREQ R0, =0xFF8723B8 \n" //aFsionotify_c
"BLEQ sub_FF81EB78 \n" //_DebugAssert
"LDR R1, =fsionotify_success \n" // + // increment counter
"LDR R0, [R1] \n" // + // of successful calls
"ADD R0, R0, #1 \n" // +
"STR R0, [R1] \n" // +
"MOV R0, #0 \n" // original code - save handle in array
"STR R0, [R4,#0x58] \n"
"STR R5, [R4] \n"
"MOV R0, R4 \n"
"MOV R1, R7 \n"
"STR R6, [R4,#0x24] \n"
"BL sub_FF872238 \n"
"ADD R1, R4, #0x28 \n"
"MOV R0, R7 \n"
"LDMFD SP!, {R4-R8,LR} \n"
"B sub_FF8381C4 \n"
"loc_2: \n" // + // Handle case when new file handle returned from _open is already in array
"LDR R1, =fsionotify_compfail \n" // + // increment counter then return rather than throw exception
"LDR R0, [R1] \n" // + // equivalent to calling _open rather than _Open
"ADD R0, R0, #1 \n" // +
"STR R0, [R1] \n" // +
"LDMFD SP!, {R4-R8,PC} \n" // +
);
}
So we need a way to have your shooting_set_iso_real() code not conflict with the code generic/shooting.c code ?
only if confirm that other propset 4 Camera or newer camera that use the BSI Cmos sensor work correct with the code currently is in chdk.
my guess is more it is not test carefully, on Camera as Ixus 300HS Sx220hs.
maybe g12 or S95 is diffrent in some way, because of other sensor, so forget my text about g12 and s95 test
but i open soon a new thread and ask for correct iso work on those cameras.and only if this cameras all work, then maybe the define of the core libc function can change, so its possible that platform code can overwrite the function