/*\r
- FreeRTOS V9.0.1 - Copyright (C) 2017 Real Time Engineers Ltd.\r
- All rights reserved\r
-\r
- VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
-\r
- This file is part of the FreeRTOS distribution.\r
-\r
- FreeRTOS is free software; you can redistribute it and/or modify it under\r
- the terms of the GNU General Public License (version 2) as published by the\r
- Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.\r
-\r
- ***************************************************************************\r
- >>! NOTE: The modification to the GPL is included to allow you to !<<\r
- >>! distribute a combined work that includes FreeRTOS without being !<<\r
- >>! obliged to provide the source code for proprietary components !<<\r
- >>! outside of the FreeRTOS kernel. !<<\r
- ***************************************************************************\r
-\r
- FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
- FOR A PARTICULAR PURPOSE. Full license text is available on the following\r
- link: http://www.freertos.org/a00114.html\r
-\r
- ***************************************************************************\r
- * *\r
- * FreeRTOS provides completely free yet professionally developed, *\r
- * robust, strictly quality controlled, supported, and cross *\r
- * platform software that is more than just the market leader, it *\r
- * is the industry's de facto standard. *\r
- * *\r
- * Help yourself get started quickly while simultaneously helping *\r
- * to support the FreeRTOS project by purchasing a FreeRTOS *\r
- * tutorial book, reference manual, or both: *\r
- * http://www.FreeRTOS.org/Documentation *\r
- * *\r
- ***************************************************************************\r
-\r
- http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading\r
- the FAQ page "My application does not run, what could be wrong?". Have you\r
- defined configASSERT()?\r
-\r
- http://www.FreeRTOS.org/support - In return for receiving this top quality\r
- embedded software for free we request you assist our global community by\r
- participating in the support forum.\r
-\r
- http://www.FreeRTOS.org/training - Investing in training allows your team to\r
- be as productive as possible as early as possible. Now you can receive\r
- FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers\r
- Ltd, and the world's leading authority on the world's leading RTOS.\r
-\r
- http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
- including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
- compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
-\r
- http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.\r
- Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.\r
-\r
- http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High\r
- Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS\r
- licenses offer ticketed support, indemnification and commercial middleware.\r
-\r
- http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
- engineered and independently SIL3 certified version for use in safety and\r
- mission critical applications that require provable dependability.\r
-\r
- 1 tab == 4 spaces!\r
-*/\r
+ * FreeRTOS Kernel V10.0.0\r
+ * Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
+ * this software and associated documentation files (the "Software"), to deal in\r
+ * the Software without restriction, including without limitation the rights to\r
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r
+ * the Software, and to permit persons to whom the Software is furnished to do so,\r
+ * subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included in all\r
+ * copies or substantial portions of the Software. If you wish to use our Amazon\r
+ * FreeRTOS name, please do so in a fair use way that does not cause confusion.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ *\r
+ * http://www.FreeRTOS.org\r
+ * http://aws.amazon.com/freertos\r
+ *\r
+ * 1 tab == 4 spaces!\r
+ */\r
\r
\r
/*\r
#include "semphr.h"\r
#include "timers.h"\r
#include "event_groups.h"\r
+#include "stream_buffer.h"\r
\r
/*-----------------------------------------------------------*/\r
\r
static void prvExerciseEventGroupAPI( void );\r
static void prvExerciseSemaphoreAPI( void );\r
static void prvExerciseTaskNotificationAPI( void );\r
+static void prvExerciseStreamBufferAPI( void );\r
\r
/*\r
* Just configures any clocks and IO necessary.\r
/* The timer that periodically sends data to the check task on the queue. */\r
static TimerHandle_t xTimer = NULL;\r
\r
+/* Just used to check start up code for initialised an uninitialised data. */\r
+volatile uint32_t ul1 = 0x123, ul2 = 0;\r
+\r
#if defined ( __GNUC__ )\r
+ /* Memory map read directl from linker variables. */\r
extern uint32_t __FLASH_segment_start__[];\r
extern uint32_t __FLASH_segment_end__[];\r
extern uint32_t __SRAM_segment_start__[];\r
extern uint32_t __privileged_functions_actual_end__[];\r
extern uint32_t __privileged_data_actual_end__[];\r
#else\r
+ /* Must be set manually to match memory map. */\r
const uint32_t * __FLASH_segment_start__ = ( uint32_t * ) 0x00UL;\r
const uint32_t * __FLASH_segment_end__ = ( uint32_t * ) 0x00080000UL;\r
const uint32_t * __SRAM_segment_start__ = ( uint32_t * ) 0x20000000UL;\r
\r
/*-----------------------------------------------------------*/\r
\r
-volatile uint32_t ul1 = 0x123, ul2 = 0;\r
-\r
int main( void )\r
{\r
+ /* Used to check linker configuration. */\r
configASSERT( ul1 == 0x123 );\r
configASSERT( ul2 == 0 );\r
prvSetupHardware();\r
that this task has access to. */\r
volatile uint32_t *pulOverlaidCounter3 = ( uint32_t * ) &( cReadWriteArray[ 0 ] ), *pulOverlaidCounter4 = ( uint32_t * ) &( cReadWriteArray[ 4 ] );\r
\r
-/* ulCycleCount is incremented on each cycle of the check task. It can be \r
+/* ulCycleCount is incremented on each cycle of the check task. It can be\r
viewed updating in the Keil watch window as the simulator does not print to\r
the ITM port. */\r
volatile uint32_t ulCycleCount = 0;\r
\r
/**** Print pcStatusMessage here. ****/\r
( void ) pcStatusMessage;\r
- \r
+\r
/* The cycle count can be viewed updating in the Keil watch\r
window if ITM printf is not being used. */\r
ulCycleCount++;\r
prvExerciseEventGroupAPI();\r
prvExerciseSemaphoreAPI();\r
prvExerciseTaskNotificationAPI();\r
+ prvExerciseStreamBufferAPI();\r
\r
/* For code coverage test purposes it is deleted by the Idle task. */\r
configASSERT( uxTaskGetStackHighWaterMark( NULL ) > 0 );\r
}\r
/*-----------------------------------------------------------*/\r
\r
+static void prvExerciseStreamBufferAPI( void )\r
+{\r
+uint8_t ucBuffer[ 10 ];\r
+BaseType_t x, xRead;\r
+size_t xReturned;\r
+StreamBufferHandle_t xStreamBuffer;\r
+\r
+ /* Just makes API calls to ensure the MPU versions are used. */\r
+\r
+ xStreamBuffer = xStreamBufferCreate( sizeof( ucBuffer ) , 1 );\r
+ configASSERT( xStreamBuffer );\r
+\r
+ for( x = 0; x < ( sizeof( ucBuffer ) * 2 ); x++ )\r
+ {\r
+ /* Write and check the value is written, then read and check the value\r
+ read is expected. */\r
+ xReturned = xStreamBufferSend( xStreamBuffer,\r
+ ( void * ) &x,\r
+ sizeof( x ),\r
+ 0 );\r
+ configASSERT( xReturned == sizeof( x ) );\r
+\r
+ xReturned = xStreamBufferReceive( xStreamBuffer,\r
+ ( void * ) &xRead,\r
+ sizeof( xRead ),\r
+ 0 );\r
+ configASSERT( xReturned == sizeof( xRead ) );\r
+ configASSERT( xRead == x );\r
+\r
+ xStreamBufferSendFromISR( xStreamBuffer,\r
+ ( void * ) &x,\r
+ sizeof( x ),\r
+ NULL );\r
+ configASSERT( xReturned == sizeof( x ) );\r
+\r
+ xReturned = xStreamBufferReceiveFromISR( xStreamBuffer,\r
+ ( void * ) &xRead,\r
+ sizeof( xRead ),\r
+ NULL );\r
+ configASSERT( xReturned == sizeof( xRead ) );\r
+ configASSERT( xRead == x );\r
+ configASSERT( xStreamBufferIsFull( xStreamBuffer ) == pdFALSE );\r
+ configASSERT( xStreamBufferIsEmpty( xStreamBuffer ) == pdTRUE );\r
+ configASSERT( xStreamBufferSpacesAvailable( xStreamBuffer ) == sizeof( ucBuffer ) );\r
+ configASSERT( xStreamBufferBytesAvailable( xStreamBuffer ) == 0 );\r
+ }\r
+\r
+ /* Call the functions that have not been exercised yet before finishing by\r
+ deleting the stream buffer. */\r
+ configASSERT( xStreamBufferSetTriggerLevel( xStreamBuffer, 0 ) == pdTRUE );\r
+ configASSERT( xStreamBufferReset( xStreamBuffer ) == pdPASS );\r
+ vStreamBufferDelete( xStreamBuffer );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
void vApplicationIdleHook( void )\r
{\r
volatile const uint32_t *pul;\r