📄 demo.c
字号:
{
int MySocket,NewSocket;
struct addr_struct servaddr; /* holds the server address structure */
struct addr_struct client_addr;
int status,Count;
NU_Socket(NU_FAMILY_IP,NU_TYPE_STREAM,NU_PROTO_TCP);
while(1)
{
servaddr.family = NU_FAMILY_IP;
servaddr.port = 23;
memcpy(servaddr.id.is_ip_addrs, LocalIp, 4);
NU_Sleep(200);
if(1)
{
MySocket=GetMySocketNumber(next_socket_no);
MySocket=0;
if( (NU_Bind(MySocket, &servaddr, 0))>=0 )
{
status = NU_Listen(MySocket, 10);
NewSocket= NU_Accept(MySocket, &servaddr, 0);
Printf("\r\nServer start!\r\n");
Count=1;
while(Count>=0)
{
NU_fcntl(NewSocket, NU_SETFLAG, NU_BLOCK, 0); //set block flag
Count=NU_Recv(NewSocket,ServerBuf,1500,0); //to get data
NU_fcntl(NewSocket, NU_SETFLAG, NU_FALSE, 0); //clear block flag
if(Count>=0)
{
ServerBuf[Count]=0x00;
Printf(ServerBuf);
}
}
NU_Close_Socket(NewSocket);
Printf("\r\nServer shutdown for connection lost!\r\n");
}
else
{
Printf("\r\nServer Bind fail!\r\n");
}
}
else
{
Printf("\r\nServer socket open fail!\r\n");
}
}
}
//to start another Task to sta. how many add. the cpu can do in 1 sec.
void p_CpuTime(UNSIGNED argc, VOID *argv)
{
VOID *pointer;
NU_TASK CpuAddTime;
NU_TIMER timer_demo;
// asm(" MOVE.L #$10000248,A0 ");
// asm(" MOVE.W #$0000,(A0) ");
// NU_Sleep(10);
// NU_Allocate_Memory(&System_Memory, &pointer, 1024, NU_NO_SUSPEND);
// NU_Create_Task(&CpuAddTime, "CpuATime", p_CpuAddTime, 0, NU_NULL, pointer, 1024, 255, 3,
// NU_PREEMPT, NU_NO_START);
// NU_Sleep(10);
// CpuSpeed=0;
// asm(" MOVE.L #$10000248,A0 ");
// asm(" MOVE.W #$FFFF,(A0) ");
// NU_Resume_Task(&CpuAddTime);
// NU_Sleep(100);
// MaxSpeed=CpuSpeed;
// CpuSpeed=0;
// asm(" MOVE.L #$10000248,A0 ");
// asm(" MOVE.W #$0000,(A0) ");
// NU_Create_Timer(&timer_demo, "TIMER", expiration_routine, 1, 100, 100,NU_ENABLE_TIMER);
NU_Resume_Task(&Task_1);
NU_Resume_Task(&Task_2);
NU_Resume_Task(&Task_3);
// NU_Suspend_Task(&CpuTime);
}
void p_CpuAddTime(UNSIGNED argc, VOID *argv)
{
while(1)
{
CpuSpeed++;
}
}
void expiration_routine(UNSIGNED id)
{
unsigned short Temp;
Temp=MaxSpeed/1000;
CurrentSpeed=CpuSpeed;
CpuSpeed=0;
CpuUsage=1000-(CurrentSpeed/(Temp+100) );
if(CpuUsage<0) CpuUsage=0;
}
void task_debug(UNSIGNED argc, VOID *argv)
{
unsigned long KeyNumber;
unsigned long dat;
Printf(">"); //display the prompt
while(1)
{
KeyNumber=GetKey(); //return until "ENTER" pressed ,KeyNumber presents how many key received
/* to explain the key */
switch(RxData[0])
{
case '1':ShowTask();break;
case '2':TodoARP(); break;
case '3':TodoTCP(); break;
case '4':DisTCP(); break;
default: {
if(NU_TRUE!=NU_Is_Connected(MySocketNumber))
Printf("Bad command or command not found\r\n");
else
{
NU_Send(MySocketNumber,RxData,KeyNumber,0);
Printf("\r\n*********Command Send to socket! ********\r\n");
}
}
}
Printf(">");
//dat = imm->IMR;
}
}
void ShowTask(void)
{
unsigned long TaskNumber,i;
NU_TASK *Pointer_Array[MaxNumberOfTask];
char Buf[20];
char Buf1[20];
struct TaskInfo
{
char Name[9];
DATA_ELEMENT task_status;
UNSIGNED scheduled_count;
OPTION priority;
OPTION preempt;
UNSIGNED time_slice;
VOID *stack_base;
UNSIGNED stack_size;
UNSIGNED minimum_stack;
};
struct TaskInfo Info;
Printf("\r\n\r\nName Status sch._count Pri. Pre. Slice S._base S._size Min._stack \r\n");
TaskNumber = NU_Task_Pointers(&Pointer_Array[0],MaxNumberOfTask);
for(i=0;i<TaskNumber;i++)
{
Info.Name[8]=0x00;
NU_Task_Information(Pointer_Array[i],
(Info.Name),
&(Info.task_status),
&(Info.scheduled_count),
&(Info.priority),
&(Info.preempt),
&(Info.time_slice),
&(Info.stack_base),
&(Info.stack_size),
&(Info.minimum_stack)
);
switch(Info.task_status)
{
case(NU_READY): sprintf(Buf,"READY");break;
case(NU_PURE_SUSPEND): sprintf(Buf,"PURE_S");break;
case(NU_FINISHED): sprintf(Buf,"FINISHED");break;
case(NU_TERMINATED): sprintf(Buf,"TERMINATED");break;
case(NU_SLEEP_SUSPEND): sprintf(Buf,"SLEEP_S");break;
case(NU_MAILBOX_SUSPEND): sprintf(Buf,"MAILBOX_S");break;
case(NU_QUEUE_SUSPEND): sprintf(Buf,"QUEUE_S");break;
case(NU_PIPE_SUSPEND): sprintf(Buf,"PIPE_S");break;
case(NU_EVENT_SUSPEND): sprintf(Buf,"EVENT_S");break;
case(NU_SEMAPHORE_SUSPEND): sprintf(Buf,"SEMAPHORE_S");break;
case(NU_MEMORY_SUSPEND): sprintf(Buf,"MEMORY_S");break;
case(NU_PARTITION_SUSPEND): sprintf(Buf,"PARTITION_S");break;
case(NU_DRIVER_SUSPEND): sprintf(Buf,"DRIVER_S");break;
default:sprintf(Buf,"UNKNOWN");
}
switch(Info.preempt)
{
case(NU_NO_PREEMPT): sprintf(Buf1,"No");break;
case(NU_PREEMPT): sprintf(Buf1,"Yes");break;
default:sprintf(Buf1,"UNKNOWN");
}
sprintf(DebugBuffer,"%-8s%-11s%11ld %3d %-3s %5ld 0x%08lX 0x%08lX 0x%08lX\r\n",
Info.Name,
Buf,
Info.scheduled_count,
Info.priority,
Buf1,
Info.time_slice,
Info.stack_base,
Info.stack_size,
Info.minimum_stack
);
Printf(DebugBuffer);
}
// sprintf(DebugBuffer,"\r\nCpu Usage is about %03d /1000\r\n",CpuUsage);
// Printf(DebugBuffer);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -