2008/3/31 Alexandre MOHR <amoh...@gmail.com>:
> Bonjour,
>
> En voulant essayer d'allouer dynamiquement la mémoire afin de stocker
> le contenu d'un fichier en passant par l'usb, nous nous sommes rendu
> compte que le fonction nx_malloc ne fonctionne pas correctement.
>
> char* data = nx_malloc(2*sizeof(char));
>
> if(data == NULL)
Tout d'abord, inutile de faire ce test. Si tu regardes
l'implémentation de nx_malloc, il y a une assertion qui vérifie que le
résultat n'est pas NULL. S'il l'est, la brique plante immédiatement
avec une assertion "Out of memory".
> {
> nx_display_clear();
> nx_display_cursor_set_pos(0, 0);
> nx_display_string("Error");
> }
> else
> {
> *data = 'a';
> *(data+1) = 0;
>
> nx_display_clear();
> nx_display_cursor_set_pos(0, 0);
> nx_display_string(data);
> }
>
> nx_display_cursor_set_pos(0, 1);
> nx_display_string("Fin");
>
> nx_systick_wait_ms(7000);
>
> Voici ce que contient notre main() de test. Ceci est censé afficher
> 'a' puis 'fin' ce qui n'est pas le cas :(
>
> En fait, ce programme n'affiche rien du tout alors qu'il devrait au
> moins afficher 'Fin' s'il dépassait le nx_malloc
Très probablement parce que tu n'as pas initialisé l'allocateur de
mémoire. Je te conseille de compiler la documentation doxygen du
kernel (ce qui se fera automagiquement si tu as doxygen installé),
puis de lire la partie sur l'API de l'allocateur de mémoire.
Spécifiquement (je pioche du code source parce que je n'ai pas le
doxygen compilé sous la main):
* @note If you do want to use the allocator, you will first need to
* initialize it by calling nx_mem_init() or nx_mem_init_full(). All the
* other functions of the allocator assume that the allocator is
* initialized.
Tenter d'utiliser l'allocateur sans l'avoir initialisé a sans aucun
doute planté la brique, ce qui explique que "rien" ne se passe: soit
une boucle infinie dans le code de l'allocateur, soit une exception
cpu qui a causé un plantage complet (est-ce que la brique emet un clic
périodique quand elle ne fait rien? C'est le bruit indicatif que le
coprocesseur a perdu le lien avec le cpu, donc que NxOS est dans le
paté).
- Dave
>
> Merci d'avance
> >
>