test1.c

来自「AVR典型实例.rar」· C语言 代码 · 共 81 行

C
81
字号

#include <avrx-io.h>
#include <avrx-signal.h>
#include "avrx.h"
#include "hardware.h"

AVRX_GCC_TASK(task1, 20, 3);
AVRX_GCC_TASK(task2, 20, 2);
AVRX_GCC_TASK(task3, 20, 2);

TimerControlBlock   timer1; 
AVRX_MUTEX(TimerSemaphore1); 
AVRX_MUTEX(TimerSemaphore2); 
AVRX_MUTEX(TimerSemaphore3); 
int main(void)
{
    AvrXSetKernelStack(0);
    TCNT0 = TCNT0_INIT;
   	TCCR0 = 0x04;
   	TIMSK = 1<<TOIE0;
    AvrXRunTask(&task1Tcb);
    AvrXRunTask(&task2Tcb);
    AvrXRunTask(&task3Tcb);
	AvrXSetSemaphore(&TimerSemaphore1); 
	Epilog();                   // Switch from AvrX Stack to first task
    while(1);
}



NAKEDFUNC(task1)
{
	DDRB = 0xFF;
	PORTB = 0xFF;

    while(1)
    {
	   AvrXWaitSemaphore(&TimerSemaphore1);
       PORTB = ~PORTB;
	   AvrXDelay(&timer1, 10);       // 10 ms delay 阻塞函数
       AvrXSetSemaphore(&TimerSemaphore2); 

    }
}

NAKEDFUNC(task2)
{
    DDRA = 0xFF;
	PORTA = 0;
    while(1)
    {
	   AvrXWaitSemaphore(&TimerSemaphore2);
	   PORTA = ~PORTA;
	   AvrXDelay(&timer1, 10);//阻塞函数
       AvrXSetSemaphore(&TimerSemaphore3); 
    }
}

NAKEDFUNC(task3)
{
    DDRC = 0xff;
	PORTC = 0x55;
    while(1)
    {
	   AvrXWaitSemaphore(&TimerSemaphore3);
	   PORTC = ~PORTC;
	   AvrXDelay(&timer1, 10);//阻塞函数
       AvrXSetSemaphore(&TimerSemaphore1); 
    }
}

AVRX_SIGINT(SIG_OVERFLOW0)
{
	DDRD= 0xff;
	PORTD = ~PORTD;
    IntProlog();                // Switch to kernel stack/context
    TCNT0 = TCNT0_INIT;
    AvrXTimerHandler();         // Call Time queue manager
    Epilog();                   // Return to tasks
}

⌨️ 快捷键说明

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