Soy nuevo en la programación en c y en ARM también, así que perdóneme la pregunta tonta. Me gustaría encontrar una respuesta en la red en lugar de molestarlo, pero no hay muchos materiales en la web. Estoy utilizando la placa Arduino Due con Atmel SAM3X8E, ARM Cortex M3 y Atmel Studio 6 en lugar del IDE de Arduino.
Quería crear un programa simple basado en la función de suspensión para parpadear el diodo. Claro, no tiene sentido usar la función de suspensión en lugar de los temporizadores. Estaba a punto de comprobar si eso funcionaba y familiarizarme con las interrupciones. Pero no funciona ...
Porque como descubrí aquí no hay funciones de retardo para ARM , así que creé mi uno. Cuando pongo el bucle for en la función principal (en los lugares que muestro en los comentarios) todo está bien, los diodos parpadean alternativamente. Cuando uso mySleep (), ambos parpadean continuamente. He generado un programa similar en CodeBlocks en la PC con stdio.hy printf en lugar de asf.hy los registros PIO. Eso funciona como yo quería. Aquí está el código a continuación:
#include <asf.h>
void mySleep(void);
int main (void)
{
PIOB->PIO_PER = PIO_PB26;
PIOB->PIO_OER = PIO_PB26;
PIOB->PIO_PUDR = PIO_PB26;
PIOA->PIO_PER = PIO_PA14;
PIOA->PIO_OER = PIO_PA14;
PIOA->PIO_PUDR = PIO_PA14;
while(1)
{
PIOB->PIO_SODR = PIO_PB26;
PIOA->PIO_CODR = PIO_PA14;
mySleep();
//for(unsigned long long i=0;i<1000000;i++);
PIOB->PIO_CODR = PIO_PB26;
PIOA->PIO_SODR = PIO_PA14;
mySleep();
//for(unsigned long long i=0;i<1000000;i++);
}
}
void mySleep(void)
{
for(unsigned long long i=0;i<1000000;i++);
}
El programa es bulit sin error. Aquí está mi pregunta. ¿Cuál es la diferencia entre la programación en PC y ARM? ¿Qué debo hacer para obtener el trabajo de funciones definidas por el usuario? ¿Se necesita alguna biblioteca adicional?
Gracias de antemano.