📄 demo.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 + -