⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ucos_ii.c

📁 建立两个任务
💻 C
字号:
/***********************************************************************************************************                                                uC/OS-II*                                          The Real-Time Kernel**                        (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL*                                           All Rights Reserved**                                                  V2.00** File : uCOS_II.C* By   : Jean J. Labrosse**********************************************************************************************************/#define  OS_GLOBALS                           /* Declare GLOBAL variables                              */#include "includes.h"#include "..\inc\44b.h"#define  OS_CRITICAL_METHOD 	2//#define  OS_MASTER_FILE                       /* Prevent the following files from including includes.h *///#include "os_core.c"//#include "os_mbox.c"//#include "os_mem.c"//#include "os_q.c"//#include "os_sem.c"//#include "os_task.c"//#include "os_time.c"//#include "os_mutex.c"#define IRQ_VECTOR_OFFSET	(0x70)//-------------------------------------------------------// globle variables//-------------------------------------------------------volatile static int isrCount = 0;		// tick counter//volatile static unsigned int Dump_Pool[16];void HaltUndef(void){    Uart_Printf("Undefined instruction exception!!!\n");    while(1);}void HaltSwi(void){    Uart_Printf("SWI exception!!!\n");    while(1);}void HaltPabort(void){    Uart_Printf("Pabort exception!!!\n");    while(1);}void HaltDabort(void){    Uart_Printf("Dabort exception!!!\n");    while(1);}void Isr_Init(void){    int i;        pISR_UNDEF=(unsigned)HaltUndef;    pISR_SWI  =(unsigned)HaltSwi;    pISR_PABORT=(unsigned)HaltPabort;    pISR_DABORT=(unsigned)HaltDabort;         for(i=_RAM_STARTADDRESS;i<(_RAM_STARTADDRESS+0x20);i+=4)    {	*((volatile unsigned *)i)=0xEA000000+0x1FFE;    }    rINTCON=0x5;	  // Non-vectored,IRQ enable,FIQ disable        rINTMOD=0x0;	  // All=IRQ mode    rINTMSK|=BIT_GLOBAL|BIT_EINT3;	  // All interrupt is masked.}//-------------------------------------------------------// OS_Tick Hook Fubction//-------------------------------------------------------void tick_hook(void){	isrCount++;	rI_ISPC = (unsigned int)1 << 20;}//-------------------------------------------------------// install a new ISR// this function must be synchronized//-------------------------------------------------------unsigned int ISR_Install(unsigned int offset, void *pf_ISR){	unsigned int pOldEntry;	// get absolute address of IRQ vector	// _ISR_STARTADDRESS : see Option.h	offset += _ISR_STARTADDRESS;	// get the Old ISR service routine entry point	pOldEntry = *((unsigned int *)offset);		// install new interrupt service routine	*((unsigned int *)offset) = (unsigned int)pf_ISR;	return pOldEntry;}//-------------------------------------------------------// must be synchronized//-------------------------------------------------------void tick_off(void){	rRTCCON = (unsigned char)1;		rTICNT = (unsigned char)0;		rRTCCON = (unsigned char)0;}//--------------------------------------------------------// set or clear TICK interrupt mask// this function must be synchronized//--------------------------------------------------------void tick_int_enable(unsigned char bEnabled){	// clear interrupt pending first	rI_ISPC = (unsigned int)0x01 << 20;		rINTMSK &= (unsigned int)~(0x01 << 20);}//--------------------------------------------------------// start tick function of RTC// interval = (1 + div) / 128  second// this function must be synchronized// div MUST >= 1 && <= 128//--------------------------------------------------------void tick_init(unsigned char div){	rRTCCON = (unsigned char)1;//	ASSERT(div >= 1 && div <= 127);	rTICNT = (unsigned char)(div | 0x80);	rRTCCON = (unsigned char)0;	tick_int_enable(1);}//--------------------------------------------------------// interrupt controler initilization//--------------------------------------------------------void intcon_init(void){	rINTMOD = 0;			// all interrupt sources configed as IRQ	rI_ISPC = 0x7ffffff;	// clear all intrrupt request	rINTCON = 0x05;			// irq interrupt available}//--------------------------------------------------------// globel interrupt enable//--------------------------------------------------------void globle_int_enable(unsigned char bEnabled){	if(bEnabled)		rINTMSK &= ~(0x03 << 26);	else		rINTMSK |= 0x01 << 26;}__inline void Sleep(INT16U uSec){	OSTimeDly((INT16U) (uSec));}void sys_init(void){	tick_off();	tick_int_enable(0);	globle_int_enable(0);	intcon_init();	isrCount = 0;		// Set the function of the pins	Isr_Init();	Port_Init();	Uart_Init(0, 115200);		// hook the tick ISR	ISR_Install(IRQ_VECTOR_OFFSET, (void *)OSTickISR);	globle_int_enable(1);}

⌨️ 快捷键说明

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