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

📄 demo.c

📁 著名的嵌入式操作系统Nucleus的源代码
💻 C
字号:
#include "e:\nucleus\nucleus_plus\nucleus.h"
#include "e:\nucleus\nucleus_plus\io.h"
#include "uart.h"
#include "wtx.h"
#include "flash.h"
#include <string.h>
#define STKSIZE	1024

 
 
extern STATUS URT_Mode;
extern void Erase_Entire_Chip();
extern void Program(unsigned short *Src, unsigned short *Dst, unsigned long size);
unsigned long ledcode[10]={0x17c00,0x1800,0xec00,0xbc00,0x19800,0x1b400,0x1f400,0x1c00,0x1fc00,0x1bc00};
INT 		timeno=0;
NU_TASK		task_1;
NU_TASK		hard_ini;
NU_TASK		URT_Monitor;
NU_TIMER       Timer;
NU_MEMORY_POOL  System_Memory;
NU_PIPE		URT_Pipe;		//It is used to send frames from UART

typedef struct {
char i:1;
char j:2;
char k:3;
char kl:1;
char jj:1;
char k1:3;
char kl1:1;
char jj1:1;
char k2:3;
char kl2:1;
char jj2:1;
}st;
st tmp;
int j;

void    task1ent( UNSIGNED argc, VOID *argv );
void 	led_init( UNSIGNED argc, VOID *argv );
void 	timer_hander(UNSIGNED u);
void    URT_Reply( UNSIGNED argc, VOID *argv );
extern URT_Init(URT_Struct uart);

/* Application initializing */
void    Application_Initialize(void *first_available_memory)
{
	void *pointer;
	STATUS status;
    /* Create a system memory pool that will be used to allocate task stacks,
       queue areas, etc.  */
    status=NU_Create_Memory_Pool(&System_Memory, "SYSMEM",	first_available_memory,
    					  200*1024, 50, NU_FIFO); //creat 1M system memory

    /* Allocate stack space for and create each task in the system.  */
    status=NU_Allocate_Memory(&System_Memory, &pointer, 1024, NU_NO_SUSPEND);
    
   status=NU_Create_Task(&hard_ini, "HARD_INIT", led_init, 0, NU_NULL,
					pointer, STKSIZE, 5, 0, NU_PREEMPT, NU_START);

     /* Allocate stack space for and create each task in the system.  */
    status=NU_Allocate_Memory(&System_Memory, &pointer, STKSIZE, NU_NO_SUSPEND);
    
   status=NU_Create_Task(&task_1, "Task_1", task1ent, 0, NU_NULL,
					pointer, STKSIZE, 5, 0, NU_PREEMPT, NU_START);

     /* Allocate stack space for and create each task in the system.  */
    status=NU_Allocate_Memory(&System_Memory, &pointer, STKSIZE, NU_NO_SUSPEND);
    
   status=NU_Create_Task(&URT_Monitor, "UART_Monitor", URT_Reply, 0, NU_NULL,
					pointer, STKSIZE, 5, 0, NU_PREEMPT, NU_START);
					
    /* Allocate stack space for and create each task in the system.  */
    status=NU_Allocate_Memory(&System_Memory, &pointer, 100, NU_NO_SUSPEND);
    
    status=NU_Create_Pipe(&URT_Pipe, "URT_PIPE", pointer, 100, NU_FIXED_SIZE, 4, NU_FIFO);

    status = NU_Create_Timer(&Timer, "Timer_1", timer_hander, 0, 20, 20, NU_ENABLE_TIMER);
}

void 	led_init( UNSIGNED argc, VOID *argv )
{
	STATUS          status;
	URT_Struct 	uart;
	
	uart.uartno = UART0;		//use uart 0
	uart.BAUDRate = URT_115200BPS;  //19200 BPS
	uart.ClkSel = SERCLK_IN;		// Internal Clock
	uart.DataLenth = DATA_8_BIT;	// 8 bits data
	uart.ParityMode = PARITY_EVEN; //even parity
	uart.StopBit = STOP_1_BIT;		// 1 stop bit 
	uart.URTMode = UART_NOM;		// Uart Normal mode
	URT_Mode=1;
	status = URT_Init(uart);
	
	/* Access argc and argv just to avoid compilation warnings.  */
    	status =  (STATUS) argc + (STATUS) argv;
	*(volatile unsigned long*)(IOPMOD)=0x0001FCF0 ;		/*Shut down all LEDs*/
	*(volatile unsigned long*)(IOPDATA)=0x000000ff;
	timeno=0;
//	while(1)
//	;
	printf("%d",URT_Mode);
}

void    task1ent( UNSIGNED argc, VOID *argv )
{
	STATUS          status;
	INT			i=0,j;
/*	char		y;
	int	      k;
	k=(int)((int *)(&k));
	k-=(int)((int *)(&y));
	k=(int)((int *)(&y));
	k-=(int)((int *)(&j));*/
	/* Access argc and argv just to avoid compilation warnings.  */
    	status =  (STATUS) argc + (STATUS) argv;
    	 *(volatile unsigned long*)(IOPDATA)=ledcode[0] ;		/*light all LED segments*/
	do{
	//	NU_Sleep(100);
		}while(1);//timeno<1);
	
	for(;;)
		{
			j=i;
			i++;
			if(i>10000)i=0;
			NU_Sleep(100);
		}
}

void 	timer_hander(UNSIGNED u)
{
	unsigned char temp,temp2;
		if(timeno>=7)
		{
			timeno=0;
			NU_Reset_Task(&hard_ini,0,NULL);
			NU_Resume_Task(&hard_ini);
		}
		else timeno++;	
		temp2=timeno / 4;
		temp=timeno %2;
		*(volatile unsigned long*)(IOPDATA)=(temp2*0x8+temp*0x2+0x1)*0x10+0xf ;	
}

void    URT_Reply( UNSIGNED argc, VOID *argv )
{
	STATUS          status;
	unsigned 	char *Urt_data;
	unsigned 	char *hhi;
	UNSIGNED	sdf[1];
	UNSIGNED 	actual_size;
	UNSIGNED	aa;
	unsigned short *temp;
	char ok[5]="OK\r\n";
	 
	/* Access argc and argv just to avoid compilation warnings.  */
    	status =  (STATUS) argc + (STATUS) argv;
	aa=1;
	URT_Mode=aa;		//Put UART0 to String mode
	temp=(unsigned short*)0x1800000; 
    	do{
		NU_Receive_From_Pipe(&URT_Pipe, (VOID *)sdf, 4, &actual_size, NU_SUSPEND);
		Urt_data=(unsigned char *)*sdf;
		//if receive "ts" just send back "OK"
		if((strstr((const char *)Urt_data,"ts"))!=NULL)
			{
			SendChar(0, (unsigned char *) ok, sizeof(ok));
			}

		//if receive "program" then prepare to program flash memory
		if((strstr((const char *)Urt_data,"program"))!=NULL)
			{
			URT_Mode=2;		//Put UART0 into NET mode
			SendChar(0, (unsigned char *) ok, sizeof(ok));
			NU_Receive_From_Pipe(&URT_Pipe, (VOID *)sdf, 4, &actual_size, NU_SUSPEND);
			Urt_data=(unsigned char *)*sdf;
			Erase_Entire_Chip();
			Program((unsigned short *)Urt_data, temp, BUFFSIZE);
			hhi=(unsigned char *)temp;
			hhi+=BUFFSIZE;
			temp=(unsigned short *)hhi;

			//Back to String Mode
			URT_Mode=aa;
			}
		if((strstr((const char *)Urt_data,"end"))!=NULL)
			{
			SendChar(0, (unsigned char *) ok, sizeof(ok));
		}
		if((unsigned int)Urt_data[0]>47 && (unsigned int)Urt_data[0]<57)
			*(volatile unsigned long*)(IOPDATA)=ledcode[Urt_data[0]-48];
		else
			*(volatile unsigned long*)(IOPDATA)=ledcode[0];
    		}while(1);
    	
}

⌨️ 快捷键说明

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