Lephenixnoir> Hmm on dirait que c'est la présence d'une multiplication qui fait tout péter. Peut-être un problème de sauvegarde de mach/macl qui se font modifier pendant l'interruption et ne sont en suite pas restaurés, ce qui rend la procédure de dessin d'images confuse ? Lephenixnoir> J'ai remarqué aussi que le crash se produit toujours après un nombre d'appel fixes à rand() dont la valeur dépend du code que j'ai mis. Actuellement c'est tout pile 10880 appels avant le crash. C'est possible que ce soit le temps nécessaire pour Lephenixnoir> (1) interrompre la bonne fonction au bon moment, tout en Lephenixnoir> (2) faisant apparaître une valeur corrompue qui se termine en adresse non mappée dans P0/P3 (les autres espaces ne déclenchent pas d'erreur puisqu'il n'y a pas de MMU) Lephenixnoir> Mais c'est un peu douteux parce que (1) devrait varier pas mal... Lephenixnoir> Je crois que j'ai mis le doigt dessus. Le code de rand() ne sauvegarde pas mach/macl. Lephenixnoir> "Some calling conventions for the SH-3 say that mach and macl are preserved, or that gbr is reserved, but in Windows CE, they are all scratch." Donc c'est pas évident. Lephenixnoir> GCC a une option de ligne de commande -mnomacsave qui dit "Mark the 'MAC' register as call-clobbered, even if '-mrenesas' is given." Lephenixnoir> Sous-entendu -mrenesas (la convention d'appel de Renesas) est supposée préserver mach/macl, mais celle de GCC non. Mais du coup je sais pas pourquoi l'appeleur de rand() ne les sauvegarde pas. Et puis comment pourrait-il savoir que cette fonction multiplie ? Lephenixnoir> Ça y est, j'ai compris ! :D Lephenixnoir> Ça se résume à ça : les registres caller-saved modifiés par une interruption sont corrompus pour le programme interrompu. Lephenixnoir> Et c'est évident, right! Le programe interrompu ne sait pas qu'il va l'être et donc il ne sauvegarde pas les registres en question. Lephenixnoir> D'habitude ce n'est pas un problème parce que les seuls registres callee-saved qu'on utilise sont r0..r7 et ils sont sauvegardés dans la banque alternative !