gyrobot.c

来自「AVR单片机做的两轮自平衡机器人」· C语言 代码 · 共 69 行

C
69
字号
#define ENABLE_BIT_DEFINITIONS
#include "avrx-io.h"
#include "avrx-signal.h"
#include "avrx.h"
#include "hardware.h"
#include "Gyro_eeprom.h"

#ifdef _MONITOR_
  AVRX_GCC_TASK(Monitor, 16, 0);     // External task (AvrX Debug monitor)
  void InitSerialIO(unsigned char);
#endif

AVRX_EXTERNTASK(MotorTask);     // MotorTask.c
AVRX_EXTERNTASK(LcdTask);       // LcdTask.c
AVRX_EXTERNTASK(SensorTask);

AVRX_SIGINT(SIG_OVERFLOW0)  // System clock
{
    IntProlog();
    TCNT0 = TCNT0_INIT;
    AvrXTimerHandler();
    Epilog();
}
/*

  Main initialization and starting of AvrX tasks

*/
int main(void)
{
    AvrXSetKernelStack(0);

    // Initialize Hardware

    outp(MCUCR_INIT, MCUCR);    // See harware.h
    outp(TCNT0_INIT, TCNT0);
    outp(TCCR0_INIT, TCCR0);
    outp(TIMSK_INIT, TIMSK);
    outp(GIMSK_INIT, GIMSK);
    outp(TCCR1A_INIT, TCCR1A);
    outp(TCCR1B_INIT, TCCR1B);

    outp(PORTA_INIT, PORTA);
    outp(DDRA_INIT, DDRA);
    outp(PORTB_INIT, PORTB);
    outp(DDRB_INIT, DDRB);
    outp(PORTC_INIT, PORTC);
    outp(DDRC_INIT, DDRC);
    outp(PORTD_INIT, PORTD);
    outp(DDRD_INIT, DDRD);

    // Initialize tasks

    AvrXRunTask(TCB(MotorTask));
    AvrXRunTask(TCB(LcdTask));
    AvrXRunTask(TCB(SensorTask));

#ifdef _MONITOR_
    InitSerialIO(UBRR_INIT);
    AvrXRunTask(TCB(Monitor));
#endif

    AvrXSetSemaphore(&EEPromMutex);
    (void)ValidateEEPROM();
    
    // Jump to first task
    Epilog();
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?