Bonjour, j’ai depuis 1 heure la même erreur que j’essaie de la résoudre , je suis en train de faire un projet en C et en ASM de remplacer l’Arduino par ma propre librairie mais à peine commence j’ai cette erreur :
avr-gcc -g -Wall -mcall-prologues -mmcu=atmega328P -Os main.c pins.c -Wl,-gc-sections -Wl,-relax -o main.obj
/var/folders/cl/5yhhp7cn4yq873qgvp307ttw0000gn/T//cctmsaTL.s: Assembler messages:
/var/folders/cl/5yhhp7cn4yq873qgvp307ttw0000gn/T//cctmsaTL.s:32: Error: constant value required
/var/folders/cl/5yhhp7cn4yq873qgvp307ttw0000gn/T//cctmsaTL.s:61: Error: constant value required
/var/folders/cl/5yhhp7cn4yq873qgvp307ttw0000gn/T//cctmsaTL.s:70: Error: constant value required
make: *** [main.obj] Error 1
rm main.o
pour l’instant j’ai 3 fichier : pins.h, pins.c, et main.c
pins.h :
#ifndef LAGOS_PINS_H
#define LAGOS_PINS_H
#define uint8_t unsigned char
#define PB 0x05
#define PC 0x08
#define PD 0x0B
typedef struct PinUnoR3 {
uint8_t port;
uint8_t pin;
} PinUnoR3;
PinUnoR3 initPin(uint8_t port, uint8_t pin);
void digitalWrite(PinUnoR3 pin, uint8_t value);
#endif //LAGOS_PINS_H
pins.c :
#include "pins.h"
PinUnoR3 initPin(uint8_t port, uint8_t pin) {
PinUnoR3 pinUnoR3;
pinUnoR3.port = port;
pinUnoR3.pin = pin;
asm volatile ("sbi %0, %1"
: "=r" (port)
: "0" (pin)
); // Set pin to output
return pinUnoR3;
}
void digitalWrite(PinUnoR3 pin, uint8_t value) {
if (value == 0) {
asm volatile ("cbi %0, %1"
: "=r" (pin.port)
: "0" (pin.pin)
); // turn off LED by setting pin to low
} else {
asm volatile ("sbi %0, %1"
: "=r" (pin.port)
: "0" (pin.pin)
); // turn off LED by setting pin to high
}
}
et main.c
#include <stdint.h>
#include "pins.h"
#define F_CPU 16000000UL
#define asm __asm__
void
delay_ms(double ms)
{
double tmp ;
uint16_t ticks;
tmp = ((F_CPU) / 4000) * ms;
if (tmp < 1.0)
ticks = 1;
else if (tmp > 65535)
{
// ticks = requested delay in 1/10 ms
ticks = (uint16_t) (ms * 10.0);
while(ticks)
{
uint16_t d = ((F_CPU) / 4000) / 10;
// wait 1/10 ms
__asm__ volatile (
"1: sbiw %0,1" "\n\t"
"brne 1b"
: "=w" (d)
: "0" (d)
);
ticks --;
}
return;
}
else
ticks = (uint16_t)tmp;
asm volatile (
"1: sbiw %0,1" "\n\t"
"brne 1b"
: "=w" (ticks)
: "0" (ticks)
);
}
int main()
{
PinUnoR3 pin = initPin(PB, 3);
while(1)
{
digitalWrite(pin, 1);
delay_ms(500);
digitalWrite(pin, 0);
delay_ms(500);
}
}
si quelqu’un peut m’aider ce serait sympa
+0
-0