- Timestamp:
- 08/04/08 20:51:26 (5 months ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
firmware/trunk/core/lwip/contrib/port/FreeRTOS/AT91SAM7X/sys_arch.c
r688 r778 39 39 #include "lwip/sys.h" 40 40 #include "lwip/mem.h" 41 42 /* Message queue constants. */ 43 #define archMESG_QUEUE_LENGTH ( 6 ) 44 #define archPOST_BLOCK_TIME_MS ( ( unsigned portLONG ) 10000 ) 41 #include "lwip/stats.h" 42 #include "lwipopts.h" 45 43 46 44 struct timeoutlist … … 51 49 52 50 /* This is the number of threads that can be started with sys_thread_new() */ 53 // #define SYS_THREAD_MAX 6 54 55 #define lwipTCP_STACK_SIZE 200 56 #define lwipBASIC_SERVER_STACK_SIZE 150 51 //#define SYS_THREAD_MAX 4 57 52 58 53 // static struct timeoutlist timeoutlist[SYS_THREAD_MAX]; … … 76 71 mbox = xQueueCreate( archMESG_QUEUE_LENGTH, sizeof( void * ) ); 77 72 73 #if SYS_STATS 74 ++lwip_stats.sys.mbox.used; 75 if (lwip_stats.sys.mbox.max < lwip_stats.sys.mbox.used) { 76 lwip_stats.sys.mbox.max = lwip_stats.sys.mbox.used; 77 } 78 #endif /* SYS_STATS */ 79 78 80 return mbox; 79 81 } … … 91 93 { 92 94 /* Line for breakpoint. Should never break here! */ 93 __asm volatile ( "NOP" ); 95 portNOP(); 96 #if SYS_STATS 97 lwip_stats.sys.mbox.err++; 98 #endif /* SYS_STATS */ 94 99 } 95 100 96 101 vQueueDelete( mbox ); 102 103 #if SYS_STATS 104 --lwip_stats.sys.mbox.used; 105 #endif /* SYS_STATS */ 97 106 } 98 107 … … 107 116 /*-----------------------------------------------------------------------------------*/ 108 117 // MakingThings - added for lwip 1.3.0 109 // Posts the "msg" to the mailbox. This function have to block until 110 // the "msg" is really posted. 118 // Posts the "msg" to the mailbox. 111 119 err_t 112 120 sys_mbox_trypost(sys_mbox_t mbox, void *msg) 113 { 114 portBASE_TYPE result = xQueueSend( mbox, &msg, ( portTickType ) ( archPOST_BLOCK_TIME_MS / portTICK_RATE_MS ) ); 115 while( result == errQUEUE_FULL) 116 { 117 vTaskDelay(1); 118 result = xQueueSend( mbox, &msg, ( portTickType ) ( archPOST_BLOCK_TIME_MS / portTICK_RATE_MS ) ); 119 } 120 return ERR_OK; 121 { 122 err_t result; 123 124 if ( xQueueSend( mbox, &msg, 0 ) == pdPASS ) 125 { 126 result = ERR_OK; 127 } 128 else { 129 // could not post, queue must be full 130 result = ERR_MEM; 131 #if SYS_STATS 132 lwip_stats.sys.mbox.err++; 133 #endif /* SYS_STATS */ 134 } 135 136 return result; 121 137 } 122 138 … … 185 201 186 202 /*-----------------------------------------------------------------------------------*/ 203 /* 204 Similar to sys_arch_mbox_fetch, but if message is not ready immediately, we'll 205 return with SYS_MBOX_EMPTY. On success, 0 is returned. 206 */ 207 u32_t sys_arch_mbox_tryfetch(sys_mbox_t mbox, void **msg) 208 { 209 void *dummyptr; 210 211 if ( msg == NULL ) 212 { 213 msg = &dummyptr; 214 } 215 216 if ( pdTRUE == xQueueReceive( mbox, &(*msg), 0 ) ) 217 { 218 return ERR_OK; 219 } 220 else 221 { 222 return SYS_MBOX_EMPTY; 223 } 224 } 225 226 /*-----------------------------------------------------------------------------------*/ 187 227 // Creates and returns a new semaphore. The "count" argument specifies 188 228 // the initial state of the semaphore. TBD finish and test … … 202 242 if( xSemaphore == NULL ) 203 243 { 244 #if SYS_STATS 245 ++lwip_stats.sys.sem.err; 246 #endif /* SYS_STATS */ 204 247 return NULL; // TBD need assert 205 248 } 206 249 else 207 250 { 251 #if SYS_STATS 252 ++lwip_stats.sys.sem.used; 253 if (lwip_stats.sys.sem.max < lwip_stats.sys.sem.used) { 254 lwip_stats.sys.sem.max = lwip_stats.sys.sem.used; 255 } 256 #endif /* SYS_STATS */ 208 257 return xSemaphore; 209 258 } … … 281 330 sys_sem_free(sys_sem_t sem) 282 331 { 332 #if SYS_STATS 333 --lwip_stats.sys.sem.used; 334 #endif /* SYS_STATS */ 283 335 vQueueDelete( sem ); 284 336 }
