avr-gcc et programme qui ne fait pas ce qu'il est censé faire...

Apr 02, 2020 38 Replies

Non, 10.

formatting link

Le Fri, 3 Apr 2020 10:03:21 +0200,

Bonjour,

  1. Pourquoi voudrais-tu qu'elle vaille 11 ?

C'est une variable statique, elle n'est pas sur le tas mais dans la

JKB

=> http://grincheux.de-charybde-en-scylla.fr => http://loubardes.de-charybde-en-scylla.fr

OK !

Etrange ...

plus ...

serial_send_byte(4)

Le Fri, 3 Apr 2020 10:31:17 +0200,

Tu confonds deux choses :

i_max vaut 10.

JKB

=> http://grincheux.de-charybde-en-scylla.fr => http://loubardes.de-charybde-en-scylla.fr

Le Fri, 3 Apr 2020 11:04:11 +0200,

Par ailleurs, ce tableau n'est ni sur le tas ni sur la pile, mais

variable suivante. En aucun cas corrompre le tas ou la pile

mailing liste avr-gcc, mais je n'en attends pas grand'chose.

JKB

=> http://grincheux.de-charybde-en-scylla.fr => http://loubardes.de-charybde-en-scylla.fr

Ok je vais lire ton code plus attentivement.

Parfait donc. Comme je n'ai pas lu le reste il se pouvait que tu

H

Le Fri, 3 Apr 2020 10:20:40 +0200,

condition while(!(UCSR0A & (1

formatting link
=>
formatting link

Dans serial.c

void serial_send_byte(uint8_t byte) { while(!(UCSR0A & (1

Le Fri, 3 Apr 2020 15:49:45 +0200,

mais UDRE0 parce qu'il y a pluiseurs USART. Le bout de code que j'utilise provcient du datasheet du processeur.

Il est dans le code.

Bien cordialement,

JKB

=> http://grincheux.de-charybde-en-scylla.fr => http://loubardes.de-charybde-en-scylla.fr

dans le registre UCSR0A.

Une recherche google sur "while(!(UCSR0A & (1

30 de programmation en C et je viens encore de me faire attraper par

La solution est donc :

typedef volatile struct { volatile uint8_t *port; volatile uint8_t *pin; volatile uint8_t bitNo; volatile int8_t timer; } gpio_t;

volatile uint8_t interrupt_counter;

enum { i_work = 0, i_wait, i_meas_in_progress, i_meas_ready, i_send_data, i_watchdog_reset, i_comm_rx, i_comm_tx, i_comm_ok, i_irq, i_max};

#ifdef __MAIN__ volatile gpio_t i_led[i_max] = { { &PORTD, &PIND, 3, 0 }, { &PORTD, &PIND, 4, 0 }, { &PORTD, &PIND, 5, 0 }, { &PORTD, &PIND, 6, 0 }, { &PORTD, &PIND, 7, 0 }, { &PORTB, &PINB, 0, 0 }, { &PORTB, &PINB, 1, 0 }, { &PORTB, &PINB, 2, 0 }, { &PORTB, &PINB, 3, 0 }, { &PORTB, &PINB, 4, 0 } }; #else extern volatile gpio_t i_led[i_max]; #endif

Avec un #define __MAIN__ dans le main.c avant l'inclusion du fichier

JKB

=> http://grincheux.de-charybde-en-scylla.fr => http://loubardes.de-charybde-en-scylla.fr

Le Fri, 3 Apr 2020 17:51:57 +0200,

datasheet.

Jamais eu non plus le genre de pbs que tu as ... j'utilise printf(), scanf() ... de depuis des lustres.

Bon courage, H

Par contre, je ne comprends toujours pas ce qui peut expliquer que ton for commence par 4 ...

Le Fri, 3 Apr 2020 18:04:30 +0200,

ne me convainc pas).

attente (et comme c'est une machine Unix, on va dire que la file est assez longue pour pouvoir encaisser 10 octets arrivant en paquets).

valeurs en sortie (mais de temps en temps une valeur saute tout de

Bref, ce n'est pas net, mais comme je n'ai pas besoin d'utiliser l'USART

que j'ai assez de temps pour chercher le pourquoi du comment.

depuis une routine d'interruption, il faut passer par un buffer et

JKB

=> http://grincheux.de-charybde-en-scylla.fr => http://loubardes.de-charybde-en-scylla.fr

Ok, merci pour l'explication !

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required