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 + -
显示快捷键?