Problème nx_malloc

3 views
Skip to first unread message

Alexandre MOHR

unread,
Mar 31, 2008, 12:05:14 PM3/31/08
to Développement et utilisation de NxOS
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)
{
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

Merci d'avance

David Anderson

unread,
Mar 31, 2008, 4:41:10 PM3/31/08
to nxos-di...@googlegroups.com
Salut,

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
> >
>

Alexandre Haffner

unread,
Mar 31, 2008, 6:23:49 PM3/31/08
to Développement et utilisation de NxOS
Je ne me rappel plus du click. En tout cas c'est probablement la
cause :)
J'ai voulu utiliser ça en remplacement du malloc j'y suis allé un peu
violemment :o

C'est Alex M qui a la brick je pense qu'il testera ça bientôt !

Merci pour ta réponse

A bientôt

Alex

On 31 mar, 22:41, "David Anderson" <d...@natulte.net> wrote:
> Salut,
>
> 2008/3/31 Alexandre MOHR <amohr3...@gmail.com>:

Alexandre MOHR

unread,
Apr 1, 2008, 3:52:50 AM4/1/08
to Développement et utilisation de NxOS
Salut,

J'ai testé ce que tu as dit. Par contre je n'ai pas trouvé la fonction
nx_mem_init() mais nx_memalloc_init(). En tout cas en appellant cette
méthode avant le nx_malloc, les données s'affiche correctement à
l'écran.

Merci beaucoup pour le coup de main

A plus

On Mar 31, 10:41 pm, "David Anderson" <d...@natulte.net> wrote:
> Salut,
>
> 2008/3/31 Alexandre MOHR <amohr3...@gmail.com>:
>
Reply all
Reply to author
Forward
0 new messages