📄 test2.c
字号:
#define Test1_GLOBALS
#include "includes.h"
//******************************************************************************
// Constants
#define TaskStartPrio 10 // Task-Prioritaeten
//*****************************************************************************
// Variablen
INT8U display[5];
INT8U h,m,s,state;
OS_STK Task1Stack[OS_TASK_DEF_STK_SIZE]; // startup task stack
OS_STK Task2Stack[OS_TASK_DEF_STK_SIZE];
//ICC-AVR application builder : 2003-12-28 21:52:56
// Target : M8
// Crystal: 8.0000Mhz
#include <iom64v.h>
#include <macros.h>
//#include <stdio.h>
#include "uart.h"
//*****************************************************************************
// Prototypes
/*
#define BAUD 9600
#define CRYSTAL 11059200
#define BAUD_SETTING (unsigned int)((unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1)
#define BAUD_H (unsigned char)(BAUD_SETTING>>8)
#define BAUD_L (unsigned char)(BAUD_SETTING)
void uartInit(uint8 uartNum)
{
if(1==uartNum)
{
UCSR1B = 0x00; //disable while setting baud rate
UCSR1A = 0x00;
UCSR1C = 0x06;
UBRR1L = BAUD_L; //set baud rate lo
UBRR1H = BAUD_H; //set baud rate hi
UCSR1B = 0x18;
///共有3个中断源, 接受, 发送, 寄存器空, 对应此寄存器的高3位
}
else
{
UCSR0B = 0x00; //disable while setting baud rate
UCSR0A = 0x00;
UCSR0C = 0x06; //set frame format, 8 bits, 2stop]
UBRR0H = BAUD_H;
UBRR0L = BAUD_L;
UCSR0B = 0x18; //enable receive and transmite
}
}
void putChar(uint8 num, uint8 dat)
{
ENTER_CRITICAL();
if(1==num)
{
UDR1 = dat;
while(!(UCSR1A&BIT(TXC1))); //发送寄存器空
UCSR1A|=BIT(TXC1);
}
else
{
UDR0 = dat;
while(!(UCSR0A&BIT(TXC0)));
UCSR0A|=BIT(TXC0);
}
EXIT_CRITICAL();
}
*/
//*****************************************************************************
// TickISR
//*****************************************************************************
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 1Hz
// actual value: Out of range
void t1Init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0x79; //setup
TCNT1L = 0x02;
OCR1AH = 0x00;
OCR1AL = 0x00;
OCR1BH = 0x00;
OCR1BL = 0x00;
OCR1CH = 0x00;
OCR1CL = 0x00;
ICR1H = 0x00;
ICR1L = 0x00;
TCCR1A = 0x00;
TCCR1B = 0x02; //start Timer
//时钟源选择
}
//*****************************************************************************
//8倍分频, 11.0592M晶振, 定时25ms
//#pragma interrupt_handler OSTickISR:15
void OSTickISR(void);
#pragma interrupt_handler fuc:15
void fuc()
{
TCNT1H = 0x79;
TCNT1L = 0x00;
OSTickISR();
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
XDIV = 0x00; //xtal divider
XMCRA = 0x00; //external memory
t1Init();
MCUCR = 0x00;
EICRA = 0x00; //extended ext ints
EICRB = 0x00; //extended ext ints
EIMSK = 0x00;
TIMSK = 0x04; //timer interrupt sources
ETIMSK = 0x00; //extended timer interrupt sources
//SEI(); //re-enable interrupts
}
void Task1(void *pdata);
void Task2(void *pdata);
//*****************************************************************************
// Start
#define LED() PORTC = PORTC^BIT(4);
void main(void){
PORTC=BIT(4);
DDRC=BIT(4);
LED();
OSInit(); // OS init
OSTaskCreate(Task1,
(void *)0,
&Task1Stack[OS_TASK_DEF_STK_SIZE-1],
7);
OSTaskCreate(Task2,
(void *)0,
&Task2Stack[OS_TASK_DEF_STK_SIZE-1],
6);
// init und start tick
init_devices();
uartInit(1);
OSStart(); // start multitasking
}
//*****************************************************************************
void Task1(void *data)
{
SEI();
for (;;)
{
LED();
putStr(1, "task 1!\n\r");
OSTimeDly (20);
LED();
OSTimeDly (20);
}
}
void Task2(void *data)
{
SEI();
for (;;)
{
putStr(1, "task 2!\n\r");
OSTimeDly (80);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -