I am trying to interface RS232,CAN and Ethernet to ARM7 using RL-ARM Library. I am using MCB2300 Evaluation Board for this. I am referring EasyWeb example program for interfacing Ethernet. First I interfaced RS232 and CAN using RL-ARM to ARM7. It worked perfectly. Then I tried to interface Ethernet along with that. Here the problem rises. Below is the overall program in which I interfaced all the three serial communication drivers. Only Ethernet task is running. Control is not moving to other tasks. I tried by changing priority of all tasks. I didn't get the expected result.
#include <RTL.h> #include <LPC23xx.h> #include "RTX_CAN.h" #include "LCD.h" #include <stdio.h> #include "Net_Config.h" #include <stdlib.h> #include <string.h> #define extern __task void task_init (void); __task void task_send_CAN (void); __task void task_rece_CAN (void); __task void task_disp (void); __task void task_srec (void); //serial send __task void task_ssend (void); //serial receive __task void task_ethernet (void); U32 Tx_val = 0, Rx_val = 0; char hex_chars[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; typedef struct { U32 v; } mboxx; os_mbx_declare (MsgBox,4); _declare_box (mpool,sizeof(mboxx),16); __task void task_init (void) { os_tsk_create (task_srec, 1); os_tsk_create (task_ssend, 1); os_tsk_create (task_send_CAN, 1); os_tsk_create (task_rece_CAN, 1); os_tsk_create (task_disp , 1); os_tsk_create (task_ethernet, 1); os_tsk_delete_self(); } __task void task_disp (void) { for (;;) { Out_Val (); os_dly_wait (10); } } __task void task_srec (void) { mboxx *rptr; for (;;) { os_mbx_wait (MsgBox, (void **)&rptr, 0xffff); printf ("\nAD Value:%d\n",rptr->v); _free_box (mpool, rptr); } } __task void task_ssend (void) { mboxx *mptr; os_mbx_init (MsgBox, sizeof(MsgBox)); os_dly_wait (5); mptr = _alloc_box (mpool); for(;;) { mptr->v=0x05; os_mbx_send (MsgBox, mptr, 0xffff); IOSET1 = 0x10000; os_dly_wait (100); } } __task void task_ethernet (void) { TCPLowLevelInit(); HTTPStatus = 0; TCPLocalPort = TCP_PORT_HTTP; for(;;) { if (!(SocketStatus & SOCK_ACTIVE)) TCPPassiveOpen(); DoNetworkStuff(); os_tsk_prio_self(5); } } int main (void) { serial_init (); In_Init (); Out_Init (); _init_box (mpool, sizeof(mpool),sizeof(mboxx)); os_sys_init (task_init); } void HTTPServer(void) { if (SocketStatus & SOCK_CONNECTED) { if (SocketStatus & SOCK_DATA_AVAILABLE) TCPReleaseRxBuffer(); if (SocketStatus & SOCK_TX_BUF_RELEASED) { if (!(HTTPStatus & HTTP_SEND_PAGE)) { HTTPBytesToSend = sizeof(WebSide) - 1; PWebSide = (unsigned char *)WebSide; } if (HTTPBytesToSend > MAX_TCP_TX_DATA_SIZE) { if (!(HTTPStatus & HTTP_SEND_PAGE)) { memcpy(TCP_TX_BUF, GetResponse, sizeof(GetResponse) - 1); memcpy(TCP_TX_BUF + sizeof(GetResponse) - 1, PWebSide, MAX_TCP_TX_DATA_SIZE - sizeof(GetResponse) + 1); HTTPBytesToSend -= MAX_TCP_TX_DATA_SIZE - sizeof(GetResponse) + 1; PWebSide += MAX_TCP_TX_DATA_SIZE - sizeof(GetResponse) + 1; } else { memcpy(TCP_TX_BUF, PWebSide, MAX_TCP_TX_DATA_SIZE); HTTPBytesToSend -= MAX_TCP_TX_DATA_SIZE; PWebSide += MAX_TCP_TX_DATA_SIZE; } TCPTxDataCount = MAX_TCP_TX_DATA_SIZE; InsertDynamicValues(); TCPTransmitTxBuffer();} else if (HTTPBytesToSend) { memcpy(TCP_TX_BUF, PWebSide, HTTPBytesToSend); TCPTxDataCount = HTTPBytesToSend; InsertDynamicValues(); TCPTransmitTxBuffer(); TCPClose(); HTTPBytesToSend = 0; } HTTPStatus |= HTTP_SEND_PAGE; } } else HTTPStatus &= ~HTTP_SEND_PAGE; } void InsertDynamicValues(void) { unsigned char *Key; char NewKey[5]; unsigned int i; unsigned int vv,vv1; if (TCPTxDataCount < 4) return; Key = TCP_TX_BUF; for (i = 0; i < (TCPTxDataCount - 3); i++) { if (*Key == 'A') if (*(Key + 1) == 'D') if (*(Key + 3) == '%') switch (*(Key + 2)) { case '7' : { vv=In_Get(); sprintf(NewKey, "%3u", vv); memcpy(Key, NewKey, 3); break; } case 'A' : { vv1=In_Get(); sprintf(NewKey, "%3u", vv1); memcpy(Key, NewKey, 3); break; } } Key++; } }
Actually I am new to RTOS. I don't know where I am making mistake. Anybody please point out the mistake I made. Note: I removed some functions and two tasks(CAN send and CAN receive). Those are working good.