From 0d859af17f26a3be89530391d736793fc7e25a34 Mon Sep 17 00:00:00 2001 From: rtel Date: Sun, 21 Dec 2014 10:26:36 +0000 Subject: [PATCH] Kernel changes: + Made xTaskNotifyGiveFromISR() its own function, rather than a macro that calls xTaskNotifyFromISR() (minor performance improvement). + GCC and Keil Cortex-M4F ports now use vPortRaiseBASEPRI() in place of ulPortRaiseBASEPRI() where the return value is not required (minor performance improvement). Demo changes: Change the [very basic] FreeRTOS+UDP SAM4E driver to use task notifications rather than a semaphore (execution time now 55% what it was in FreeRTOS V8.1.2!). Robustness improvements to IntQueue.c standard demo task.h. Added the latest standard demo tasks, reg test tasks and int q tasks to the SAM4E demo. git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2317 1d2547de-c912-0410-9cb9-b8ca96c0e9e2 --- .../CLICommands/UDPCommandServer.c | 2 +- .../FreeRTOS-Plus-UDP/FreeRTOS_UDP_IP.c | 2 +- .../NetworkInterface/SAM4E/NetworkInterface.c | 36 +- .../RTOSDemo.uvopt | 121 +--- .../RTOSDemo.uvproj | 78 ++- .../RTOSDemo.atsuo | Bin 99328 -> 105472 bytes .../RTOSDemo.cproj | 40 +- .../src/ASF/sam/drivers/tc/tc.c | 596 ++++++++++++++++++ .../src/ASF/sam/drivers/tc/tc.h | 114 ++++ .../src/IntQueueTimer.c | 198 ++++++ .../src/IntQueueTimer.h | 74 +++ .../CORTEX_M4_ATSAM4E_Atmel_Studio/src/asf.h | 3 + .../src/config/FreeRTOSConfig.h | 30 +- .../CORTEX_M4_ATSAM4E_Atmel_Studio/src/main.c | 10 +- .../src/main_full.c | 494 ++++++++++++++- .../RTOSDemo.atsuo | Bin 62976 -> 64000 bytes .../RTOSDemo.cproj | 272 ++++---- .../src/IntQueueTimer.c | 2 +- .../CORTEX_MPU_LM3Sxxxx_Rowley/RTOSDemo.hzs | 15 +- FreeRTOS/Demo/Common/Minimal/IntQueue.c | 10 +- FreeRTOS/Source/include/task.h | 2 +- .../Source/portable/GCC/ARM_CM4F/portmacro.h | 18 +- .../Source/portable/RVDS/ARM_CM4F/portmacro.h | 17 +- FreeRTOS/Source/tasks.c | 88 ++- 24 files changed, 1899 insertions(+), 323 deletions(-) create mode 100644 FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/ASF/sam/drivers/tc/tc.c create mode 100644 FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/ASF/sam/drivers/tc/tc.h create mode 100644 FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/IntQueueTimer.c create mode 100644 FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/src/IntQueueTimer.h diff --git a/FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_UDP_Demos/CLICommands/UDPCommandServer.c b/FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_UDP_Demos/CLICommands/UDPCommandServer.c index e1211c18e..bcc805bb1 100644 --- a/FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_UDP_Demos/CLICommands/UDPCommandServer.c +++ b/FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_UDP_Demos/CLICommands/UDPCommandServer.c @@ -85,7 +85,7 @@ #define cmdMAX_INPUT_SIZE 60 /* Dimensions the buffer into which string outputs can be placed. */ -#define cmdMAX_OUTPUT_SIZE 1024 +#define cmdMAX_OUTPUT_SIZE 1250 /* Dimensions the buffer passed to the recvfrom() call. */ #define cmdSOCKET_INPUT_BUFFER_SIZE 60 diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-UDP/FreeRTOS_UDP_IP.c b/FreeRTOS-Plus/Source/FreeRTOS-Plus-UDP/FreeRTOS_UDP_IP.c index e9006adf7..a4d204b58 100644 --- a/FreeRTOS-Plus/Source/FreeRTOS-Plus-UDP/FreeRTOS_UDP_IP.c +++ b/FreeRTOS-Plus/Source/FreeRTOS-Plus-UDP/FreeRTOS_UDP_IP.c @@ -392,7 +392,7 @@ xIPStackEvent_t xReceivedEvent; /* Create the ARP timer, but don't start it until the network has connected. */ - xARPTimer = xTimerCreate( "ARPTimer", ( ipARP_TIMER_PERIOD_MS / portTICK_RATE_MS ), pdTRUE, ( void * ) eARPTimerEvent, vIPFunctionsTimerCallback ); + xARPTimer = xTimerCreate( "ARPTimer", ( ipARP_TIMER_PERIOD_MS / portTICK_RATE_MS ), pdTRUE, ( void * ) eARPTimerEvent, vIPFunctionsTimerCallback ); configASSERT( xARPTimer ); /* Generate a dummy message to say that the network connection has gone diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-UDP/portable/NetworkInterface/SAM4E/NetworkInterface.c b/FreeRTOS-Plus/Source/FreeRTOS-Plus-UDP/portable/NetworkInterface/SAM4E/NetworkInterface.c index 619bdee3a..0d262194a 100644 --- a/FreeRTOS-Plus/Source/FreeRTOS-Plus-UDP/portable/NetworkInterface/SAM4E/NetworkInterface.c +++ b/FreeRTOS-Plus/Source/FreeRTOS-Plus-UDP/portable/NetworkInterface/SAM4E/NetworkInterface.c @@ -81,13 +81,12 @@ static void prvGMACRxCallback( uint32_t ulStatus ); /* The queue used to communicate Ethernet events to the IP task. */ extern xQueueHandle xNetworkEventQueue; -/* The semaphore used to wake the deferred interrupt handler task when an Rx -interrupt is received. */ -static xSemaphoreHandle xGMACRxEventSemaphore = NULL; - /* The GMAC driver instance. */ static gmac_device_t xGMACStruct; +/* Handle of the task used to process MAC events. */ +static TaskHandle_t xMACEventHandlingTask = NULL; + /*-----------------------------------------------------------*/ BaseType_t xNetworkInterfaceInitialise( void ) @@ -123,20 +122,6 @@ BaseType_t xReturn = pdFALSE; vTaskDelay( xPHYDelay_400ms * 2UL ); if( ethernet_phy_set_link( GMAC, BOARD_GMAC_PHY_ADDR, 1 ) == GMAC_OK ) { - /* Create the event semaphore if it has not already been - created. */ - if( xGMACRxEventSemaphore == NULL ) - { - xGMACRxEventSemaphore = xSemaphoreCreateCounting( ULONG_MAX, 0 ); - #if ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS == 1 - { - /* If the trace recorder code is included name the semaphore for - viewing in FreeRTOS+Trace. */ - vTraceSetQueueName( xGMACRxEventSemaphore, "MAC_RX" ); - } - #endif /* ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS == 1 */ - } - /* Register the callbacks. */ gmac_dev_set_rx_callback( &xGMACStruct, prvGMACRxCallback ); @@ -149,7 +134,7 @@ BaseType_t xReturn = pdFALSE; configMINIMAL_STACK_SIZE, /* Stack allocated to the task (defined in words, not bytes). */ NULL, /* The task parameter is not used. */ configMAX_PRIORITIES - 1, /* The priority assigned to the task. */ - NULL ); /* The handle is not required, so NULL is passed. */ + &xMACEventHandlingTask ); /* The handle is stored so the ISR knows which task to notify. */ /* Enable the interrupt and set its priority as configured. THIS DRIVER REQUIRES configMAC_INTERRUPT_PRIORITY TO BE DEFINED, @@ -169,10 +154,12 @@ static void prvGMACRxCallback( uint32_t ulStatus ) { BaseType_t xHigherPriorityTaskWoken = pdFALSE; + configASSERT( xMACEventHandlingTask ); + /* Unblock the deferred interrupt handler task if the event was an Rx. */ if( ulStatus == GMAC_RSR_REC ) { - xSemaphoreGiveFromISR( xGMACRxEventSemaphore, &xHigherPriorityTaskWoken ); + xTaskNotifyGiveFromISR( xMACEventHandlingTask, &xHigherPriorityTaskWoken ); } portEND_SWITCHING_ISR( xHigherPriorityTaskWoken ); @@ -220,8 +207,9 @@ xIPStackEvent_t xRxEvent = { eEthernetRxEvent, NULL }; static const TickType_t xBufferWaitDelay = 1500UL / portTICK_RATE_MS; uint32_t ulReturned; + /* This is a very simply but also inefficient implementation. */ + ( void ) pvParameters; - configASSERT( xGMACRxEventSemaphore ); for( ;; ) { @@ -229,9 +217,9 @@ uint32_t ulReturned; received. The while() loop is only needed if INCLUDE_vTaskSuspend is set to 0 in FreeRTOSConfig.h. If INCLUDE_vTaskSuspend is set to 1 then portMAX_DELAY would be an indefinite block time and - xSemaphoreTake() would only return when the semaphore was actually - obtained. */ - while( xSemaphoreTake( xGMACRxEventSemaphore, portMAX_DELAY ) == pdFALSE ); + xTaskNotifyTake() would only return when the task was actually + notified. */ + while( ulTaskNotifyTake( pdFALSE, portMAX_DELAY ) == 0 ); /* Allocate a buffer to hold the data. */ pxNetworkBuffer = pxNetworkBufferGet( ipTOTAL_ETHERNET_FRAME_SIZE, xBufferWaitDelay ); diff --git a/FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Keil/RTOSDemo.uvopt b/FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Keil/RTOSDemo.uvopt index 4d3070ec6..40c44a1b1 100644 --- a/FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Keil/RTOSDemo.uvopt +++ b/FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Keil/RTOSDemo.uvopt @@ -73,7 +73,7 @@ 1 0 - 1 + 0 255 @@ -98,16 +98,6 @@ datashts\arm\cortex_m4\r0p1\DUI0553A_CORTEX_M4_DGUG.PDF - - SARMCM3.DLL - -MPU -REMAP - DCM.DLL - -pCM4 - SARMCM3.DLL - -MPU - TCM.DLL - -pCM4 - 0 1 @@ -126,9 +116,11 @@ 0 1 0 + 1 + 1 0 0 - 7 + 6 @@ -191,6 +183,7 @@ 1 5 0x0C000000 + 0 @@ -280,7 +273,7 @@ 1 0 - 0 + 1 255 @@ -305,16 +298,6 @@ datashts\arm\cortex_m4\r0p1\DUI0553A_CORTEX_M4_DGUG.PDF - - SARMCM3.DLL - -MPU -REMAP - DCM.DLL - -pCM4 - SARMCM3.DLL - -MPU - TCM.DLL - -pCM4 - 0 1 @@ -333,9 +316,11 @@ 0 1 0 + 1 + 1 0 0 - 7 + 6 @@ -391,6 +376,7 @@ 1 2 0x20005f90 + 0 @@ -399,7 +385,7 @@ 0 1 - 1 + 0 0 0 0 @@ -505,16 +491,6 @@ datashts\arm\cortex_m4\r0p1\DUI0553A_CORTEX_M4_DGUG.PDF - - SARMCM3.DLL - -MPU -REMAP - DCM.DLL - -pCM4 - SARMCM3.DLL - -MPU - TCM.DLL - -pCM4 - 0 1 @@ -533,6 +509,8 @@ 0 1 0 + 1 + 1 0 0 7 @@ -591,6 +569,7 @@ 1 5 0x0C000000 + 0 @@ -639,10 +618,7 @@ 2 0 0 - 0 0 - 277 - 289 0 .\startup_XMC4500.s startup_XMC4500.s @@ -655,10 +631,7 @@ 1 0 0 - 0 0 - 0 - 0 0 .\System_XMC4500.c System_XMC4500.c @@ -671,10 +644,7 @@ 2 0 0 - 0 0 - 276 - 288 0 .\startup_XMC4200.s startup_XMC4200.s @@ -687,10 +657,7 @@ 1 0 0 - 0 0 - 0 - 0 0 .\system_XMC4200.c system_XMC4200.c @@ -703,10 +670,7 @@ 1 0 0 - 7 0 - 0 - 0 0 .\system_XMC4400.c system_XMC4400.c @@ -719,10 +683,7 @@ 2 0 0 - 0 0 - 276 - 288 0 .\startup_XMC4400.s startup_XMC4400.s @@ -743,10 +704,7 @@ 1 0 0 - 45 0 - 63 - 97 0 .\main.c main.c @@ -759,10 +717,7 @@ 5 0 0 - 0 0 - 1 - 1 0 .\FreeRTOSConfig.h FreeRTOSConfig.h @@ -775,10 +730,7 @@ 1 0 0 - 0 0 - 0 - 0 0 .\RegTest.c RegTest.c @@ -791,10 +743,7 @@ 1 0 0 - 0 0 - 0 - 0 0 .\main_full.c main_full.c @@ -807,10 +756,7 @@ 1 0 0 - 0 0 - 0 - 0 0 .\main_blinky.c main_blinky.c @@ -831,10 +777,7 @@ 1 0 0 - 0 0 - 0 - 0 0 ..\..\Source\timers.c timers.c @@ -847,10 +790,7 @@ 1 0 0 - 0 0 - 0 - 0 0 ..\..\Source\list.c list.c @@ -863,10 +803,7 @@ 1 0 0 - 0 0 - 552 - 560 0 ..\..\Source\queue.c queue.c @@ -879,10 +816,7 @@ 1 0 0 - 0 0 - 0 - 0 0 ..\..\Source\tasks.c tasks.c @@ -895,10 +829,7 @@ 1 0 0 - 0 0 - 420 - 428 0 ..\..\Source\portable\RVDS\ARM_CM4F\port.c port.c @@ -911,10 +842,7 @@ 1 0 0 - 0 0 - 0 - 0 0 ..\..\Source\portable\MemMang\heap_4.c heap_4.c @@ -935,10 +863,7 @@ 1 0 0 - 0 0 - 0 - 0 0 ..\Common\Minimal\semtest.c semtest.c @@ -951,10 +876,7 @@ 1 0 0 - 0 0 - 254 - 262 0 ..\Common\Minimal\sp_flop.c sp_flop.c @@ -967,10 +889,7 @@ 1 0 0 - 0 0 - 0 - 0 0 ..\Common\Minimal\blocktim.c blocktim.c @@ -983,10 +902,7 @@ 1 0 0 - 0 0 - 0 - 0 0 ..\Common\Minimal\countsem.c countsem.c @@ -999,10 +915,7 @@ 1 0 0 - 0 0 - 0 - 0 0 ..\Common\Minimal\dynamic.c dynamic.c @@ -1015,10 +928,7 @@ 1 0 0 - 0 0 - 0 - 0 0 ..\Common\Minimal\GenQTest.c GenQTest.c @@ -1031,10 +941,7 @@ 1 0 0 - 0 0 - 0 - 0 0 ..\Common\Minimal\recmutex.c recmutex.c diff --git a/FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Keil/RTOSDemo.uvproj b/FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Keil/RTOSDemo.uvproj index eed7550aa..54126d504 100644 --- a/FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Keil/RTOSDemo.uvproj +++ b/FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Keil/RTOSDemo.uvproj @@ -30,6 +30,7 @@ SFD\Infineon\XMC4500\xmc4500.sfr + 0 0 @@ -71,6 +72,8 @@ 0 0 + 0 + 0 0 @@ -97,6 +100,7 @@ 3 + 1 SARMCM3.DLL @@ -126,6 +130,7 @@ 1 1 0 + 1 1 @@ -137,9 +142,10 @@ 0 1 0 + 1 0 - 7 + 6 @@ -169,6 +175,10 @@ BIN\UL2CM3.DLL "" () + + + + 0 @@ -347,6 +357,8 @@ 0 0 0 + 0 + 0 --cpu Cortex-M4.fp --no_allow_fpreg_for_nonfpdata rvkdm PART_XMC4500 @@ -363,6 +375,7 @@ 0 0 0 + 0 @@ -379,6 +392,7 @@ 0 0x0C000000 0x10000000 + @@ -421,6 +435,7 @@ 11 + 1 @@ -432,6 +447,7 @@ 2 2 2 + 2 @@ -461,6 +477,7 @@ 11 + 1 @@ -477,6 +494,8 @@ 0 2 2 + 2 + 2 @@ -506,6 +525,7 @@ 11 + 1 @@ -522,6 +542,8 @@ 0 2 2 + 2 + 2 @@ -551,6 +573,7 @@ 11 + 1 @@ -562,6 +585,7 @@ 2 2 2 + 2 @@ -705,6 +729,7 @@ SFD\Infineon\XMC4400\xmc4400.SFR + 0 0 @@ -746,6 +771,8 @@ 0 0 + 0 + 0 0 @@ -772,6 +799,7 @@ 3 + 1 SARMCM3.DLL @@ -801,6 +829,7 @@ 1 1 0 + 1 1 @@ -812,9 +841,10 @@ 0 1 0 + 1 0 - 7 + 6 @@ -844,6 +874,10 @@ BIN\UL2CM3.DLL + + + + 0 @@ -1010,7 +1044,7 @@ 1 - 2 + 1 0 0 0 @@ -1022,6 +1056,8 @@ 0 0 0 + 0 + 0 --cpu Cortex-M4.fp --no_allow_fpreg_for_nonfpdata rvkdm PART_XMC4400 @@ -1038,6 +1074,7 @@ 0 0 0 + 0 @@ -1054,6 +1091,7 @@ 0 0x0C000000 0x10000000 + @@ -1086,6 +1124,7 @@ 11 + 1 @@ -1097,6 +1136,7 @@ 2 2 2 + 2 @@ -1126,6 +1166,7 @@ 11 + 1 @@ -1142,6 +1183,8 @@ 0 2 2 + 2 + 2 @@ -1171,6 +1214,7 @@ 11 + 1 @@ -1182,6 +1226,7 @@ 2 2 2 + 2 @@ -1211,6 +1256,7 @@ 11 + 1 @@ -1227,6 +1273,8 @@ 0 2 2 + 2 + 2 @@ -1380,6 +1428,7 @@ SFD\Infineon\XMC4200-4100\xmc4200.SFR + 0 0 @@ -1421,6 +1470,8 @@ 0 0 + 0 + 0 0 @@ -1447,6 +1498,7 @@ 3 + 1 SARMCM3.DLL @@ -1476,6 +1528,7 @@ 1 1 0 + 1 1 @@ -1487,6 +1540,7 @@ 0 1 0 + 1 0 7 @@ -1519,6 +1573,10 @@ BIN\UL2CM3.DLL "" () + + + + 0 @@ -1697,6 +1755,8 @@ 0 0 0 + 0 + 0 --cpu Cortex-M4.fp --no_allow_fpreg_for_nonfpdata rvkdm PART_XMC4200 @@ -1713,6 +1773,7 @@ 0 0 0 + 0 @@ -1729,6 +1790,7 @@ 0 0x0C000000 0x10000000 + @@ -1761,6 +1823,7 @@ 11 + 1 @@ -1772,6 +1835,7 @@ 2 2 2 + 2 @@ -1801,6 +1865,7 @@ 11 + 1 @@ -1817,6 +1882,8 @@ 0 2 2 + 2 + 2 @@ -1856,6 +1923,7 @@ 11 + 1 @@ -1872,6 +1940,8 @@ 0 2 2 + 2 + 2 @@ -1901,6 +1971,7 @@ 11 + 1 @@ -1912,6 +1983,7 @@ 2 2 2 + 2 diff --git a/FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/RTOSDemo.atsuo b/FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/RTOSDemo.atsuo index 4cebd752971d5b9f3ae8a725c6e445f94d39b6bb..08cf7bfc19fe885da34795b35dcb85c47c0e1741 100644 GIT binary patch delta 3955 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 p4~d2cg) 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 diff --git a/FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/RTOSDemo.cproj b/FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/RTOSDemo.cproj index b917a2836..e3941f3a6 100644 --- a/FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/RTOSDemo.cproj +++ b/FreeRTOS/Demo/CORTEX_M4_ATSAM4E_Atmel_Studio/RTOSDemo.cproj @@ -15,8 +15,9 @@