¿ Es necesario modificar wiring.c en Arduino IDE ?

#1
¿ Alguno sabe como prescindir del archivo wiring.c en Arduino IDE?

Particularmente quiero usar la interrupción del timer 0 por overflow, pero esta ya está declarada en wiring.c, y el Arduino la usa para las funciones de delay. Las funciones de delay a mi no me interesan en este proyecto.

Me atrevería a modificar wiring.c con definiciones condicionales y haciendo una copia de seguridad pero quiza existe otra forma mas fácil de hacerlo que desconozco.
 
Última edición por un moderador:
#2
Ahora no me acuerdo como pero hay un modo de "perforar" la capa arduino y añadir trozos de código en el C++ del avr. En su día lo hice precisamente para controlar un timer.
Por cierto, el método que usé dejó de funcionar en alguna actualización, aunque supongo que se podrá de algún otro modo.

Prueba con la librería Flexitimer que permite hacer bastantes cosas con los timers, y si esa no te sirve me parece que hay alguna mas que lo permite.
 
#3
Lo mas facil es editar la libreria wiring.c y comentar todo el codigo relacionado a la ISR(TIMER0_OVF_vect). Codigo a comentar en la libreria:
Código:
#if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
ISR(TIM0_OVF_vect)
#else
ISR(TIMER0_OVF_vect)
#endif
{
    // copy these to local variables so they can be stored in registers
    // (volatile variables must be read from memory on every access)
    unsigned long m = timer0_millis;
    unsigned char f = timer0_fract;

    m += MILLIS_INC;
    f += FRACT_INC;
    if (f >= FRACT_MAX) {
        f -= FRACT_MAX;
        m += 1;
    }

    timer0_fract = f;
    timer0_millis = m;
    timer0_overflow_count++;
}
edit: Una otra forma de hacer un bypass es cargar manualmente las librerias del core de arduino, link con los pasos a seguir http://www.gammon.com.au/forum/?id=12625
http://www.gammon.com.au/forum/?id=12625
 
Última edición:
#4
Me sirvió ese enlace, estoy programando ahora con el clásico int main() en vez de setup() y loop(). Ahora puedo controlar todo mi programa a mi manera, siempre prefiero la forma clásica de programar, y si quiero las librerías solo tengo que llamar a init().
Se agradece las respuestas. Saludos
 
#5
hace un par de años cuando conocí Arduino y llegue a un punto parecido al tuyo y de no encontrar solución fácil, me decidí!.

A los micros AVR siempre se los programo en "C" puro, y eso me propuse y lo logre, después de estudiar como venía la mano con la arquitectura de los AVR, pude sacar adelante mis programitas en "C", aun sigo empleando las placas arduinos, y su boot loader "arduino-, solo maneje el Atmega328p, attiny85, attiny 2313 en el mundo real, y te digo que los prefiero ante los PIC, a los que solia programar en "C" o assembler.

Y definitivamente, me olvide de ese pseudolenguaje de la ide del Arduino....
 
#6
A los que no sabemos programar nos resulta mas amigable la capa arduino, pero los que si que se aclaran suelen acabar como vosotros; usando el compilador de C diréctamente, que a fin de cuentas es lo que hay debajo.
 

pandacba

Rocker Bear
#7
Se te olvida que puedes programar un arduino como si fuera un atmel común y corriente, es una de las pegas del arduino uno que viene con el chip desmontable
 

Dr. Zoidberg

Well-known-Papá Pitufo
#8
No hay que modificar ningun archivo ni hacer nada raro
Recuerdo haber asesorado una tesis de fin de carrera donde el alumno uso los registros del timer para configurarlo e instalo una nueva ISR en cada timer. Creo que con el timer 0 generaba un pwm que variaba entre 1 y 2 ms de duty cycle para controlar un servo de un aeromodelo....
Por supuesto que si salteas el IDE de Arduino haces lo que quieras, pero el IDE es comodo y simple de usar...
.
 
Última edición:
#9
Se te olvida que puedes programar un arduino como si fuera un atmel común y corriente, es una de las pegas del arduino uno que viene con el chip desmontable
Si lo sé, de hecho el arduino uno es el que tengo, pero no tengo programador para AVR, sino
me hubiese ido al avr studio. De todas formas me gusta la simpleza del Arduino IDE y lo económico que está la placa de arduino.
 
#10
y donde dice que requeris programador., la pega es emplear el bootloader que viene con la placa arduino, para cargar un programa generado por algun compilador C, fijate lo que indican en el enlace que dejo, Yo hice mi "makefile" con eso para AVG-GCC.
Tambien en youtube existen un par de videos que enseñan como emplear la placa arduino desde AVR STUDIO 7, sin programador alguno....

https://balau82.wordpress.com/2011/03/29/programming-arduino-uno-in-pure-c/
 
#11
#10
hola, buenos días, me podrían ayudar con este problema:

Arduino:1.6.12 (Windows 8.1), Tarjeta:"Arduino/Genuino Uno"

LABBOT_final:76: error: expected initializer before 'void'

void loop() {

^

C:\Users\facundorigazio\Downloads\LABBOT_final\LABBOT_final.ino: In function 'void loop()':

LABBOT_final:128: error: 'Ancho' was not declared in this scope

Ancho = ((distancia2 + distancia3 - 15) /2 );

^

LABBOT_final:133: error: 'Lateral' was not declared in this scope

Lateral = ((Ancho - 15) / 2 );

^

exit status 1
expected initializer before 'void'

Este reporte podría tener más información con
"Mostrar salida detallada durante la compilación"
opción habilitada en Archivo -> Preferencias.
 
Arriba