Add IAR demo for the SiFive RISC-V HiFive Rev B board.
parent
f6edf4adf9
commit
4922cff4ce
@ -0,0 +1,101 @@
|
|||||||
|
/*
|
||||||
|
* FreeRTOS Kernel V10.2.1
|
||||||
|
* Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
* subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* http://www.FreeRTOS.org
|
||||||
|
* http://aws.amazon.com/freertos
|
||||||
|
*
|
||||||
|
* 1 tab == 4 spaces!
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FREERTOS_CONFIG_H
|
||||||
|
#define FREERTOS_CONFIG_H
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------
|
||||||
|
* Application specific definitions.
|
||||||
|
*
|
||||||
|
* These definitions should be adjusted for your particular hardware and
|
||||||
|
* application requirements.
|
||||||
|
*
|
||||||
|
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
|
||||||
|
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
|
||||||
|
*
|
||||||
|
* See http://www.freertos.org/a00110.html.
|
||||||
|
*----------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define configISR_STACK_SIZE_WORDS ( 200 )
|
||||||
|
#define configCLINT_BASE_ADDRESS 0x2000000
|
||||||
|
|
||||||
|
#define configUSE_PREEMPTION 1
|
||||||
|
#define configUSE_IDLE_HOOK 0
|
||||||
|
#define configUSE_TICK_HOOK 1
|
||||||
|
#define configCPU_CLOCK_HZ ( ( uint32_t ) ( 32768 ) )
|
||||||
|
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
|
||||||
|
#define configMAX_PRIORITIES ( 7 )
|
||||||
|
#define configMINIMAL_STACK_SIZE ( ( uint32_t ) 100 ) /* Can be as low as 60 but some of the demo tasks that use this constant require it to be higher. */
|
||||||
|
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 12 * 1024 ) )
|
||||||
|
#define configMAX_TASK_NAME_LEN ( 16 )
|
||||||
|
#define configUSE_TRACE_FACILITY 0
|
||||||
|
#define configUSE_16_BIT_TICKS 0
|
||||||
|
#define configIDLE_SHOULD_YIELD 0
|
||||||
|
#define configUSE_MUTEXES 1
|
||||||
|
#define configQUEUE_REGISTRY_SIZE 8
|
||||||
|
#define configCHECK_FOR_STACK_OVERFLOW 3
|
||||||
|
#define configUSE_RECURSIVE_MUTEXES 1
|
||||||
|
#define configUSE_MALLOC_FAILED_HOOK 1
|
||||||
|
#define configUSE_APPLICATION_TASK_TAG 0
|
||||||
|
#define configUSE_COUNTING_SEMAPHORES 1
|
||||||
|
#define configGENERATE_RUN_TIME_STATS 0
|
||||||
|
|
||||||
|
/* Co-routine definitions. */
|
||||||
|
#define configUSE_CO_ROUTINES 0
|
||||||
|
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
|
||||||
|
|
||||||
|
/* Software timer definitions. */
|
||||||
|
#define configUSE_TIMERS 1
|
||||||
|
#define configTIMER_TASK_PRIORITY ( configMAX_PRIORITIES - 1 )
|
||||||
|
#define configTIMER_QUEUE_LENGTH 4
|
||||||
|
#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE )
|
||||||
|
|
||||||
|
/* Task priorities. Allow these to be overridden. */
|
||||||
|
#ifndef uartPRIMARY_PRIORITY
|
||||||
|
#define uartPRIMARY_PRIORITY ( configMAX_PRIORITIES - 3 )
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Set the following definitions to 1 to include the API function, or zero
|
||||||
|
to exclude the API function. */
|
||||||
|
#define INCLUDE_vTaskPrioritySet 1
|
||||||
|
#define INCLUDE_uxTaskPriorityGet 1
|
||||||
|
#define INCLUDE_vTaskDelete 1
|
||||||
|
#define INCLUDE_vTaskCleanUpResources 1
|
||||||
|
#define INCLUDE_vTaskSuspend 1
|
||||||
|
#define INCLUDE_vTaskDelayUntil 1
|
||||||
|
#define INCLUDE_vTaskDelay 1
|
||||||
|
#define INCLUDE_eTaskGetState 1
|
||||||
|
#define INCLUDE_xTimerPendFunctionCall 1
|
||||||
|
#define INCLUDE_xTaskAbortDelay 1
|
||||||
|
#define INCLUDE_xTaskGetHandle 1
|
||||||
|
#define INCLUDE_xSemaphoreGetMutexHolder 1
|
||||||
|
|
||||||
|
/* Normal assert() semantics without relying on the provision of an assert.h
|
||||||
|
header file. */
|
||||||
|
#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); __asm volatile( "ebreak" ); for( ;; ); }
|
||||||
|
|
||||||
|
#endif /* FREERTOS_CONFIG_H */
|
@ -0,0 +1,632 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project>
|
||||||
|
<fileVersion>3</fileVersion>
|
||||||
|
<configuration>
|
||||||
|
<name>Debug</name>
|
||||||
|
<toolchain>
|
||||||
|
<name>RISCV</name>
|
||||||
|
</toolchain>
|
||||||
|
<debug>1</debug>
|
||||||
|
<settings>
|
||||||
|
<name>C-SPY</name>
|
||||||
|
<archiveVersion>1</archiveVersion>
|
||||||
|
<data>
|
||||||
|
<version>0</version>
|
||||||
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
<debug>1</debug>
|
||||||
|
<option>
|
||||||
|
<name>CSPYInput</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYProcessor</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYDynDriver</name>
|
||||||
|
<state>IJETRISCV</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYRunToEnable</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYRunoToName</name>
|
||||||
|
<state>main</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYMacOverride</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYMacFile</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYMemOverride</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYMemFile</name>
|
||||||
|
<state>$TOOLKIT_DIR$\config\debugger\SiFive\hifive1.ddf</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYMandatory</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYDDFileSlave</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesSuppressCheck1</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesPath1</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesSuppressCheck2</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesPath2</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesSuppressCheck3</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesPath3</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesOffset1</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesOffset2</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesOffset3</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesUse1</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesUse2</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesUse3</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYExtraOptionsCheck</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYExtraOptions</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OCDownloadSuppressDownload</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OCDownloadVerifyAll</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>UseFlashLoader</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OverrideDefFlashBoard</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>FlashLoaders</name>
|
||||||
|
<state>$TOOLKIT_DIR$\config\flashloader\SiFive\hifive1.board</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>MassEraseBeforeFlashing</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
</data>
|
||||||
|
</settings>
|
||||||
|
<settings>
|
||||||
|
<name>IJETRISCV</name>
|
||||||
|
<archiveVersion>2</archiveVersion>
|
||||||
|
<data>
|
||||||
|
<version>0</version>
|
||||||
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
<debug>1</debug>
|
||||||
|
<option>
|
||||||
|
<name>OCDriverInfo</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OCIarProbeScriptFile</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OCProbeCfgOverride</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OCProbeConfig</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetProbeConfigRadio</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetSelectedCPUBehaviour</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>ICpuName</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetResetList</name>
|
||||||
|
<version>0</version>
|
||||||
|
<state>2</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetHWResetDuration</name>
|
||||||
|
<state>300</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetHWResetDelay</name>
|
||||||
|
<state>1500</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetPowerFromProbe</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetPowerRadio</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCIjetUsbSerialNo</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCIjetUsbSerialNoSelect</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetDoLogfile</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetLogFile</name>
|
||||||
|
<state>$PROJ_DIR$\cspycomm.log</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetInterfaceRadio</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetInterfaceCmdLine</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetMultiTargetEnable</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetMultiTarget</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetScanChainNonRISCVDevices</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetIRLength</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetMultiCPUEnable</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetMultiCPUNumber</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetJtagSpeedList</name>
|
||||||
|
<version>0</version>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetBreakpointRadio</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetRestoreBreakpointsCheck</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetUpdateBreakpointsEdit</name>
|
||||||
|
<state>_call_main</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>RDICatchReset</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CatchDummy</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OCJetEmuParams</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>FlashBoardPathSlave</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
</data>
|
||||||
|
</settings>
|
||||||
|
<settings>
|
||||||
|
<name>SIMRISCV</name>
|
||||||
|
<archiveVersion>1</archiveVersion>
|
||||||
|
<data>
|
||||||
|
<version>0</version>
|
||||||
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
<debug>1</debug>
|
||||||
|
<option>
|
||||||
|
<name>SIMMandatory</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
</data>
|
||||||
|
</settings>
|
||||||
|
<debuggerPlugins>
|
||||||
|
<plugin>
|
||||||
|
<file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>
|
||||||
|
<loadFlag>1</loadFlag>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<file>$TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin</file>
|
||||||
|
<loadFlag>0</loadFlag>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
|
||||||
|
<loadFlag>0</loadFlag>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<file>$EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin</file>
|
||||||
|
<loadFlag>0</loadFlag>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<file>$EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin</file>
|
||||||
|
<loadFlag>0</loadFlag>
|
||||||
|
</plugin>
|
||||||
|
</debuggerPlugins>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>Release</name>
|
||||||
|
<toolchain>
|
||||||
|
<name>RISCV</name>
|
||||||
|
</toolchain>
|
||||||
|
<debug>0</debug>
|
||||||
|
<settings>
|
||||||
|
<name>C-SPY</name>
|
||||||
|
<archiveVersion>1</archiveVersion>
|
||||||
|
<data>
|
||||||
|
<version>0</version>
|
||||||
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
<debug>0</debug>
|
||||||
|
<option>
|
||||||
|
<name>CSPYInput</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYProcessor</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYDynDriver</name>
|
||||||
|
<state>SIMRISCV</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYRunToEnable</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYRunoToName</name>
|
||||||
|
<state>main</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYMacOverride</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYMacFile</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYMemOverride</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYMemFile</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYMandatory</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYDDFileSlave</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesSuppressCheck1</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesPath1</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesSuppressCheck2</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesPath2</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesSuppressCheck3</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesPath3</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesOffset1</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesOffset2</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesOffset3</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesUse1</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesUse2</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYImagesUse3</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYExtraOptionsCheck</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CSPYExtraOptions</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OCDownloadSuppressDownload</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OCDownloadVerifyAll</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>UseFlashLoader</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OverrideDefFlashBoard</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>FlashLoaders</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>MassEraseBeforeFlashing</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
</data>
|
||||||
|
</settings>
|
||||||
|
<settings>
|
||||||
|
<name>IJETRISCV</name>
|
||||||
|
<archiveVersion>2</archiveVersion>
|
||||||
|
<data>
|
||||||
|
<version>0</version>
|
||||||
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
<debug>0</debug>
|
||||||
|
<option>
|
||||||
|
<name>OCDriverInfo</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OCIarProbeScriptFile</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OCProbeCfgOverride</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OCProbeConfig</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetProbeConfigRadio</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetSelectedCPUBehaviour</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>ICpuName</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetResetList</name>
|
||||||
|
<version>0</version>
|
||||||
|
<state>10</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetHWResetDuration</name>
|
||||||
|
<state>300</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetHWResetDelay</name>
|
||||||
|
<state>200</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetPowerFromProbe</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetPowerRadio</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCIjetUsbSerialNo</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCIjetUsbSerialNoSelect</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetDoLogfile</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetLogFile</name>
|
||||||
|
<state>$PROJ_DIR$\cspycomm.log</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetInterfaceRadio</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetInterfaceCmdLine</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetMultiTargetEnable</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetMultiTarget</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetScanChainNonRISCVDevices</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetIRLength</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetMultiCPUEnable</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetMultiCPUNumber</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetJtagSpeedList</name>
|
||||||
|
<version>0</version>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetBreakpointRadio</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetRestoreBreakpointsCheck</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetUpdateBreakpointsEdit</name>
|
||||||
|
<state>_call_main</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>RDICatchReset</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CatchDummy</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OCJetEmuParams</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>FlashBoardPathSlave</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
</data>
|
||||||
|
</settings>
|
||||||
|
<settings>
|
||||||
|
<name>SIMRISCV</name>
|
||||||
|
<archiveVersion>1</archiveVersion>
|
||||||
|
<data>
|
||||||
|
<version>0</version>
|
||||||
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
<debug>0</debug>
|
||||||
|
<option>
|
||||||
|
<name>SIMMandatory</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
</data>
|
||||||
|
</settings>
|
||||||
|
<debuggerPlugins>
|
||||||
|
<plugin>
|
||||||
|
<file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>
|
||||||
|
<loadFlag>0</loadFlag>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<file>$TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin</file>
|
||||||
|
<loadFlag>0</loadFlag>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
|
||||||
|
<loadFlag>0</loadFlag>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<file>$EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin</file>
|
||||||
|
<loadFlag>0</loadFlag>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<file>$EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin</file>
|
||||||
|
<loadFlag>0</loadFlag>
|
||||||
|
</plugin>
|
||||||
|
</debuggerPlugins>
|
||||||
|
</configuration>
|
||||||
|
</project>
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<workspace>
|
||||||
|
<project>
|
||||||
|
<path>$WS_DIR$\RTOSDemo.ewp</path>
|
||||||
|
</project>
|
||||||
|
<batchBuild />
|
||||||
|
</workspace>
|
@ -0,0 +1,205 @@
|
|||||||
|
/*
|
||||||
|
* FreeRTOS Kernel V10.2.1
|
||||||
|
* Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
* subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* http://www.FreeRTOS.org
|
||||||
|
* http://aws.amazon.com/freertos
|
||||||
|
*
|
||||||
|
* 1 tab == 4 spaces!
|
||||||
|
*/
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* NOTE 1: This project provides two demo applications. A simple blinky
|
||||||
|
* style project, and a more comprehensive test and demo application. The
|
||||||
|
* mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting in main.c is used to select
|
||||||
|
* between the two. See the notes on using mainCREATE_SIMPLE_BLINKY_DEMO_ONLY
|
||||||
|
* in main.c. This file implements the simply blinky style version.
|
||||||
|
*
|
||||||
|
* NOTE 2: This file only contains the source code that is specific to the
|
||||||
|
* basic demo. Generic functions, such FreeRTOS hook functions, and functions
|
||||||
|
* required to configure the hardware are defined in main.c.
|
||||||
|
******************************************************************************
|
||||||
|
*
|
||||||
|
* main_blinky() creates one queue, and two tasks. It then starts the
|
||||||
|
* scheduler.
|
||||||
|
*
|
||||||
|
* The Queue Send Task:
|
||||||
|
* The queue send task is implemented by the prvQueueSendTask() function in
|
||||||
|
* this file. prvQueueSendTask() sits in a loop that causes it to repeatedly
|
||||||
|
* block for 1000 milliseconds, before sending the value 100 to the queue that
|
||||||
|
* was created within main_blinky(). Once the value is sent, the task loops
|
||||||
|
* back around to block for another 1000 milliseconds...and so on.
|
||||||
|
*
|
||||||
|
* The Queue Receive Task:
|
||||||
|
* The queue receive task is implemented by the prvQueueReceiveTask() function
|
||||||
|
* in this file. prvQueueReceiveTask() sits in a loop where it repeatedly
|
||||||
|
* blocks on attempts to read data from the queue that was created within
|
||||||
|
* main_blinky(). When data is received, the task checks the value of the
|
||||||
|
* data, and if the value equals the expected 100, writes 'Blink' to the UART
|
||||||
|
* (the UART is used in place of the LED to allow easy execution in QEMU). The
|
||||||
|
* 'block time' parameter passed to the queue receive function specifies that
|
||||||
|
* the task should be held in the Blocked state indefinitely to wait for data to
|
||||||
|
* be available on the queue. The queue receive task will only leave the
|
||||||
|
* Blocked state when the queue send task writes to the queue. As the queue
|
||||||
|
* send task writes to the queue every 1000 milliseconds, the queue receive
|
||||||
|
* task leaves the Blocked state every 1000 milliseconds, and therefore toggles
|
||||||
|
* the LED every 200 milliseconds.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Standard includes. */
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
/* Kernel includes. */
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "task.h"
|
||||||
|
#include "queue.h"
|
||||||
|
|
||||||
|
/* Priorities used by the tasks. */
|
||||||
|
#define mainQUEUE_RECEIVE_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||||
|
#define mainQUEUE_SEND_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
||||||
|
|
||||||
|
/* The rate at which data is sent to the queue. The 200ms value is converted
|
||||||
|
to ticks using the pdMS_TO_TICKS() macro. */
|
||||||
|
#define mainQUEUE_SEND_FREQUENCY_MS pdMS_TO_TICKS( 1000 )
|
||||||
|
|
||||||
|
/* The maximum number items the queue can hold. The priority of the receiving
|
||||||
|
task is above the priority of the sending task, so the receiving task will
|
||||||
|
preempt the sending task and remove the queue items each time the sending task
|
||||||
|
writes to the queue. Therefore the queue will never have more than one item in
|
||||||
|
it at any time, and even with a queue length of 1, the sending task will never
|
||||||
|
find the queue full. */
|
||||||
|
#define mainQUEUE_LENGTH ( 1 )
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Called by main when mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1 in
|
||||||
|
* main.c.
|
||||||
|
*/
|
||||||
|
void main_blinky( void );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The tasks as described in the comments at the top of this file.
|
||||||
|
*/
|
||||||
|
static void prvQueueReceiveTask( void *pvParameters );
|
||||||
|
static void prvQueueSendTask( void *pvParameters );
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* The queue used by both tasks. */
|
||||||
|
static QueueHandle_t xQueue = NULL;
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void main_blinky( void )
|
||||||
|
{
|
||||||
|
/* Create the queue. */
|
||||||
|
xQueue = xQueueCreate( mainQUEUE_LENGTH, sizeof( uint32_t ) );
|
||||||
|
|
||||||
|
if( xQueue != NULL )
|
||||||
|
{
|
||||||
|
/* Start the two tasks as described in the comments at the top of this
|
||||||
|
file. */
|
||||||
|
xTaskCreate( prvQueueReceiveTask, /* The function that implements the task. */
|
||||||
|
"Rx", /* The text name assigned to the task - for debug only as it is not used by the kernel. */
|
||||||
|
configMINIMAL_STACK_SIZE * 2U, /* The size of the stack to allocate to the task. */
|
||||||
|
NULL, /* The parameter passed to the task - not used in this case. */
|
||||||
|
mainQUEUE_RECEIVE_TASK_PRIORITY, /* The priority assigned to the task. */
|
||||||
|
NULL ); /* The task handle is not required, so NULL is passed. */
|
||||||
|
|
||||||
|
xTaskCreate( prvQueueSendTask, "TX", configMINIMAL_STACK_SIZE * 2U, NULL, mainQUEUE_SEND_TASK_PRIORITY, NULL );
|
||||||
|
|
||||||
|
/* Start the tasks and timer running. */
|
||||||
|
vTaskStartScheduler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If all is well, the scheduler will now be running, and the following
|
||||||
|
line will never be reached. If the following line does execute, then
|
||||||
|
there was insufficient FreeRTOS heap memory available for the Idle and/or
|
||||||
|
timer tasks to be created. See the memory management section on the
|
||||||
|
FreeRTOS web site for more details on the FreeRTOS heap
|
||||||
|
http://www.freertos.org/a00111.html. */
|
||||||
|
for( ;; );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void prvQueueSendTask( void *pvParameters )
|
||||||
|
{
|
||||||
|
TickType_t xNextWakeTime;
|
||||||
|
const unsigned long ulValueToSend = 100UL;
|
||||||
|
BaseType_t xReturned;
|
||||||
|
|
||||||
|
/* Remove compiler warning about unused parameter. */
|
||||||
|
( void ) pvParameters;
|
||||||
|
|
||||||
|
/* Initialise xNextWakeTime - this only needs to be done once. */
|
||||||
|
xNextWakeTime = xTaskGetTickCount();
|
||||||
|
|
||||||
|
for( ;; )
|
||||||
|
{
|
||||||
|
/* Place this task in the blocked state until it is time to run again. */
|
||||||
|
vTaskDelayUntil( &xNextWakeTime, mainQUEUE_SEND_FREQUENCY_MS );
|
||||||
|
|
||||||
|
/* Send to the queue - causing the queue receive task to unblock and
|
||||||
|
toggle the LED. 0 is used as the block time so the sending operation
|
||||||
|
will not block - it shouldn't need to block as the queue should always
|
||||||
|
be empty at this point in the code. */
|
||||||
|
xReturned = xQueueSend( xQueue, &ulValueToSend, 0U );
|
||||||
|
configASSERT( xReturned == pdPASS );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void prvQueueReceiveTask( void *pvParameters )
|
||||||
|
{
|
||||||
|
unsigned long ulReceivedValue;
|
||||||
|
const unsigned long ulExpectedValue = 100UL;
|
||||||
|
const char * const pcPassMessage = "Blink\r\n";
|
||||||
|
const char * const pcFailMessage = "Unexpected value received\r\n";
|
||||||
|
extern void vSendString( const char * const pcString );
|
||||||
|
extern void vToggleLED( void );
|
||||||
|
|
||||||
|
/* Remove compiler warning about unused parameter. */
|
||||||
|
( void ) pvParameters;
|
||||||
|
|
||||||
|
for( ;; )
|
||||||
|
{
|
||||||
|
/* Wait until something arrives in the queue - this task will block
|
||||||
|
indefinitely provided INCLUDE_vTaskSuspend is set to 1 in
|
||||||
|
FreeRTOSConfig.h. */
|
||||||
|
xQueueReceive( xQueue, &ulReceivedValue, portMAX_DELAY );
|
||||||
|
|
||||||
|
/* To get here something must have been received from the queue, but
|
||||||
|
is it the expected value? If it is, toggle the LED. */
|
||||||
|
if( ulReceivedValue == ulExpectedValue )
|
||||||
|
{
|
||||||
|
vSendString( pcPassMessage );
|
||||||
|
vToggleLED();
|
||||||
|
ulReceivedValue = 0U;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vSendString( pcFailMessage );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
@ -0,0 +1,266 @@
|
|||||||
|
/*
|
||||||
|
* FreeRTOS Kernel V10.2.1
|
||||||
|
* Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
* subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* http://www.FreeRTOS.org
|
||||||
|
* http://aws.amazon.com/freertos
|
||||||
|
*
|
||||||
|
* 1 tab == 4 spaces!
|
||||||
|
*/
|
||||||
|
|
||||||
|
EXTERN pulRegTest1LoopCounter
|
||||||
|
EXTERN pulRegTest2LoopCounter
|
||||||
|
|
||||||
|
PUBLIC vRegTest1Implementation
|
||||||
|
PUBLIC vRegTest2Implementation
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
SECTION `.text`:CODE:NOROOT(2)
|
||||||
|
CODE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The register check tasks are described in the comments at the top of
|
||||||
|
* main_full.c.
|
||||||
|
*/
|
||||||
|
|
||||||
|
ALIGN 8
|
||||||
|
vRegTest1Implementation:
|
||||||
|
|
||||||
|
/* Fill the core registers with known values. */
|
||||||
|
li x5, 0x5
|
||||||
|
li x6, 0x6
|
||||||
|
li x7, 0x7
|
||||||
|
li x8, 0x8
|
||||||
|
li x9, 0x9
|
||||||
|
li x10, 0xa
|
||||||
|
li x11, 0xb
|
||||||
|
li x12, 0xc
|
||||||
|
li x13, 0xd
|
||||||
|
li x14, 0xe
|
||||||
|
li x15, 0xf
|
||||||
|
li x16, 0x10
|
||||||
|
li x17, 0x11
|
||||||
|
li x18, 0x12
|
||||||
|
li x19, 0x13
|
||||||
|
li x20, 0x14
|
||||||
|
li x21, 0x15
|
||||||
|
li x22, 0x16
|
||||||
|
li x23, 0x17
|
||||||
|
li x24, 0x18
|
||||||
|
li x25, 0x19
|
||||||
|
li x26, 0x1a
|
||||||
|
li x27, 0x1b
|
||||||
|
li x28, 0x1c
|
||||||
|
li x29, 0x1d
|
||||||
|
li x30, 0x1e
|
||||||
|
|
||||||
|
reg1_loop:
|
||||||
|
|
||||||
|
/* Check each register still contains the expected known value.
|
||||||
|
vRegTest1Implementation uses x31 as the temporary, vRegTest2Implementation
|
||||||
|
uses x5 as the temporary. */
|
||||||
|
li x31, 0x5
|
||||||
|
bne x31, x5, reg1_error_loop
|
||||||
|
li x31, 0x6
|
||||||
|
bne x31, x6, reg1_error_loop
|
||||||
|
li x31, 0x7
|
||||||
|
bne x31, x7, reg1_error_loop
|
||||||
|
li x31, 0x8
|
||||||
|
bne x31, x8, reg1_error_loop
|
||||||
|
li x31, 0x9
|
||||||
|
bne x31, x9, reg1_error_loop
|
||||||
|
li x31, 0xa
|
||||||
|
bne x31, x10, reg1_error_loop
|
||||||
|
li x31, 0xb
|
||||||
|
bne x31, x11, reg1_error_loop
|
||||||
|
li x31, 0xc
|
||||||
|
bne x31, x12, reg1_error_loop
|
||||||
|
li x31, 0xd
|
||||||
|
bne x31, x13, reg1_error_loop
|
||||||
|
li x31, 0xe
|
||||||
|
bne x31, x14, reg1_error_loop
|
||||||
|
li x31, 0xf
|
||||||
|
bne x31, x15, reg1_error_loop
|
||||||
|
li x31, 0x10
|
||||||
|
bne x31, x16, reg1_error_loop
|
||||||
|
li x31, 0x11
|
||||||
|
bne x31, x17, reg1_error_loop
|
||||||
|
li x31, 0x12
|
||||||
|
bne x31, x18, reg1_error_loop
|
||||||
|
li x31, 0x13
|
||||||
|
bne x31, x19, reg1_error_loop
|
||||||
|
li x31, 0x14
|
||||||
|
bne x31, x20, reg1_error_loop
|
||||||
|
li x31, 0x15
|
||||||
|
bne x31, x21, reg1_error_loop
|
||||||
|
li x31, 0x16
|
||||||
|
bne x31, x22, reg1_error_loop
|
||||||
|
li x31, 0x17
|
||||||
|
bne x31, x23, reg1_error_loop
|
||||||
|
li x31, 0x18
|
||||||
|
bne x31, x24, reg1_error_loop
|
||||||
|
li x31, 0x19
|
||||||
|
bne x31, x25, reg1_error_loop
|
||||||
|
li x31, 0x1a
|
||||||
|
bne x31, x26, reg1_error_loop
|
||||||
|
li x31, 0x1b
|
||||||
|
bne x31, x27, reg1_error_loop
|
||||||
|
li x31, 0x1c
|
||||||
|
bne x31, x28, reg1_error_loop
|
||||||
|
li x31, 0x1d
|
||||||
|
bne x31, x29, reg1_error_loop
|
||||||
|
li x31, 0x1e
|
||||||
|
bne x31, x30, reg1_error_loop
|
||||||
|
|
||||||
|
/* Everything passed, increment the loop counter. */
|
||||||
|
lw x31, pulRegTest1LoopCounter
|
||||||
|
lw x30, 0(x31)
|
||||||
|
addi x30, x30, 1
|
||||||
|
sw x30, 0(x31)
|
||||||
|
|
||||||
|
/* Restore clobbered register reading for next loop. */
|
||||||
|
li x30, 0x1e
|
||||||
|
|
||||||
|
/* Yield to increase code coverage. */
|
||||||
|
ecall
|
||||||
|
|
||||||
|
/* Start again. */
|
||||||
|
jal reg1_loop
|
||||||
|
|
||||||
|
reg1_error_loop:
|
||||||
|
/* Jump here if a register contains an uxpected value. This stops the loop
|
||||||
|
counter being incremented so the check task knows an error was found. */
|
||||||
|
ebreak
|
||||||
|
jal reg1_error_loop
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
ALIGN 8
|
||||||
|
vRegTest2Implementation:
|
||||||
|
|
||||||
|
/* Fill the core registers with known values. */
|
||||||
|
li x6, 0x61
|
||||||
|
li x7, 0x71
|
||||||
|
li x8, 0x81
|
||||||
|
li x9, 0x91
|
||||||
|
li x10, 0xa1
|
||||||
|
li x11, 0xb1
|
||||||
|
li x12, 0xc1
|
||||||
|
li x13, 0xd1
|
||||||
|
li x14, 0xe1
|
||||||
|
li x15, 0xf1
|
||||||
|
li x16, 0x20
|
||||||
|
li x17, 0x21
|
||||||
|
li x18, 0x22
|
||||||
|
li x19, 0x23
|
||||||
|
li x20, 0x24
|
||||||
|
li x21, 0x25
|
||||||
|
li x22, 0x26
|
||||||
|
li x23, 0x27
|
||||||
|
li x24, 0x28
|
||||||
|
li x25, 0x29
|
||||||
|
li x26, 0x2a
|
||||||
|
li x27, 0x2b
|
||||||
|
li x28, 0x2c
|
||||||
|
li x29, 0x2d
|
||||||
|
li x30, 0x2e
|
||||||
|
li x31, 0x2f
|
||||||
|
|
||||||
|
Reg2_loop:
|
||||||
|
|
||||||
|
/* Check each register still contains the expected known value.
|
||||||
|
vRegTest2Implementation uses x5 as the temporary, vRegTest1Implementation
|
||||||
|
uses x31 as the temporary. */
|
||||||
|
li x5, 0x61
|
||||||
|
bne x5, x6, reg2_error_loop
|
||||||
|
li x5, 0x71
|
||||||
|
bne x5, x7, reg2_error_loop
|
||||||
|
li x5, 0x81
|
||||||
|
bne x5, x8, reg2_error_loop
|
||||||
|
li x5, 0x91
|
||||||
|
bne x5, x9, reg2_error_loop
|
||||||
|
li x5, 0xa1
|
||||||
|
bne x5, x10, reg2_error_loop
|
||||||
|
li x5, 0xb1
|
||||||
|
bne x5, x11, reg2_error_loop
|
||||||
|
li x5, 0xc1
|
||||||
|
bne x5, x12, reg2_error_loop
|
||||||
|
li x5, 0xd1
|
||||||
|
bne x5, x13, reg2_error_loop
|
||||||
|
li x5, 0xe1
|
||||||
|
bne x5, x14, reg2_error_loop
|
||||||
|
li x5, 0xf1
|
||||||
|
bne x5, x15, reg2_error_loop
|
||||||
|
li x5, 0x20
|
||||||
|
bne x5, x16, reg2_error_loop
|
||||||
|
li x5, 0x21
|
||||||
|
bne x5, x17, reg2_error_loop
|
||||||
|
li x5, 0x22
|
||||||
|
bne x5, x18, reg2_error_loop
|
||||||
|
li x5, 0x23
|
||||||
|
bne x5, x19, reg2_error_loop
|
||||||
|
li x5, 0x24
|
||||||
|
bne x5, x20, reg2_error_loop
|
||||||
|
li x5, 0x25
|
||||||
|
bne x5, x21, reg2_error_loop
|
||||||
|
li x5, 0x26
|
||||||
|
bne x5, x22, reg2_error_loop
|
||||||
|
li x5, 0x27
|
||||||
|
bne x5, x23, reg2_error_loop
|
||||||
|
li x5, 0x28
|
||||||
|
bne x5, x24, reg2_error_loop
|
||||||
|
li x5, 0x29
|
||||||
|
bne x5, x25, reg2_error_loop
|
||||||
|
li x5, 0x2a
|
||||||
|
bne x5, x26, reg2_error_loop
|
||||||
|
li x5, 0x2b
|
||||||
|
bne x5, x27, reg2_error_loop
|
||||||
|
li x5, 0x2c
|
||||||
|
bne x5, x28, reg2_error_loop
|
||||||
|
li x5, 0x2d
|
||||||
|
bne x5, x29, reg2_error_loop
|
||||||
|
li x5, 0x2e
|
||||||
|
bne x5, x30, reg2_error_loop
|
||||||
|
li x5, 0x2f
|
||||||
|
bne x5, x31, reg2_error_loop
|
||||||
|
|
||||||
|
/* Everything passed, increment the loop counter. */
|
||||||
|
lw x5, pulRegTest2LoopCounter
|
||||||
|
lw x6, 0(x5)
|
||||||
|
addi x6, x6, 1
|
||||||
|
sw x6, 0(x5)
|
||||||
|
|
||||||
|
/* Restore clobbered register reading for next loop. */
|
||||||
|
li x6, 0x61
|
||||||
|
|
||||||
|
/* Start again. */
|
||||||
|
jal Reg2_loop
|
||||||
|
|
||||||
|
reg2_error_loop:
|
||||||
|
/* Jump here if a register contains an uxpected value. This stops the loop
|
||||||
|
counter being incremented so the check task knows an error was found. */
|
||||||
|
ebreak
|
||||||
|
jal reg2_error_loop
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,305 @@
|
|||||||
|
/*
|
||||||
|
* FreeRTOS Kernel V10.2.1
|
||||||
|
* Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
* subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* http://www.FreeRTOS.org
|
||||||
|
* http://aws.amazon.com/freertos
|
||||||
|
*
|
||||||
|
* 1 tab == 4 spaces!
|
||||||
|
*/
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* NOTE 1: This project provides two demo applications. A simple blinky style
|
||||||
|
* project, and a more comprehensive test and demo application. The
|
||||||
|
* mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting in main.c is used to select
|
||||||
|
* between the two. See the notes on using mainCREATE_SIMPLE_BLINKY_DEMO_ONLY
|
||||||
|
* in main.c. This file implements the comprehensive test and demo version.
|
||||||
|
*
|
||||||
|
* NOTE 2: This file only contains the source code that is specific to the
|
||||||
|
* full demo. Generic functions, such FreeRTOS hook functions, and functions
|
||||||
|
* required to configure the hardware, are defined in main.c.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*
|
||||||
|
* main_full() creates all the demo application tasks and software timers, then
|
||||||
|
* starts the scheduler. The web documentation provides more details of the
|
||||||
|
* standard demo application tasks, which provide no particular functionality,
|
||||||
|
* but do provide a good example of how to use the FreeRTOS API.
|
||||||
|
*
|
||||||
|
* In addition to the standard demo tasks, the following tasks and tests are
|
||||||
|
* defined and/or created within this file:
|
||||||
|
*
|
||||||
|
* "Reg test" tasks - These fill both the core registers with known values, then
|
||||||
|
* check that each register maintains its expected value for the lifetime of the
|
||||||
|
* task. Each task uses a different set of values. The reg test tasks execute
|
||||||
|
* with a very low priority, so get preempted very frequently. A register
|
||||||
|
* containing an unexpected value is indicative of an error in the context
|
||||||
|
* switching mechanism.
|
||||||
|
*
|
||||||
|
* "Check" task - The check executes every three seconds. It checks that all
|
||||||
|
* the standard demo tasks, and the register check tasks, are not only still
|
||||||
|
* executing, but are executing without reporting any errors. The check task
|
||||||
|
* toggles the LED every three seconds if all the standard demo tasks are
|
||||||
|
* executing as expected, or every 500ms if a potential error is discovered in
|
||||||
|
* any task.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Standard includes. */
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
/* Kernel includes. */
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "task.h"
|
||||||
|
#include "timers.h"
|
||||||
|
#include "semphr.h"
|
||||||
|
|
||||||
|
/* Standard demo application includes. */
|
||||||
|
#include "dynamic.h"
|
||||||
|
#include "blocktim.h"
|
||||||
|
#include "TimerDemo.h"
|
||||||
|
#include "TaskNotify.h"
|
||||||
|
|
||||||
|
/* Priorities for the demo application tasks. */
|
||||||
|
#define mainCHECK_TASK_PRIORITY ( configMAX_PRIORITIES - 1 )
|
||||||
|
|
||||||
|
/* The period of the check task, in ms, converted to ticks using the
|
||||||
|
pdMS_TO_TICKS() macro. mainNO_ERROR_CHECK_TASK_PERIOD is used if no errors have
|
||||||
|
been found, mainERROR_CHECK_TASK_PERIOD is used if an error has been found. */
|
||||||
|
#define mainNO_ERROR_CHECK_TASK_PERIOD pdMS_TO_TICKS( 3000UL )
|
||||||
|
#define mainERROR_CHECK_TASK_PERIOD pdMS_TO_TICKS( 500UL )
|
||||||
|
|
||||||
|
/* Parameters that are passed into the register check tasks solely for the
|
||||||
|
purpose of ensuring parameters are passed into tasks correctly. */
|
||||||
|
#define mainREG_TEST_TASK_1_PARAMETER ( ( void * ) 0x12345678 )
|
||||||
|
#define mainREG_TEST_TASK_2_PARAMETER ( ( void * ) 0x87654321 )
|
||||||
|
|
||||||
|
/* The base period used by the timer test tasks. */
|
||||||
|
#define mainTIMER_TEST_PERIOD ( 50 )
|
||||||
|
|
||||||
|
/* The size of the stack allocated to the check task (as described in the
|
||||||
|
comments at the top of this file. */
|
||||||
|
#define mainCHECK_TASK_STACK_SIZE_WORDS 100
|
||||||
|
|
||||||
|
/* Size of the stacks to allocated for the register check tasks. */
|
||||||
|
#define mainREG_TEST_STACK_SIZE_WORDS 70
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Called by main() to run the full demo (as opposed to the blinky demo) when
|
||||||
|
* mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 0.
|
||||||
|
*/
|
||||||
|
void main_full( void );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The check task, as described at the top of this file.
|
||||||
|
*/
|
||||||
|
static void prvCheckTask( void *pvParameters );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Register check tasks as described at the top of this file. The nature of
|
||||||
|
* these files necessitates that they are written in an assembly file, but the
|
||||||
|
* entry points are kept in the C file for the convenience of checking the task
|
||||||
|
* parameter.
|
||||||
|
*/
|
||||||
|
static void prvRegTestTaskEntry1( void *pvParameters );
|
||||||
|
extern void vRegTest1Implementation( void );
|
||||||
|
static void prvRegTestTaskEntry2( void *pvParameters );
|
||||||
|
extern void vRegTest2Implementation( void );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Tick hook used by the full demo, which includes code that interacts with
|
||||||
|
* some of the tests.
|
||||||
|
*/
|
||||||
|
void vFullDemoTickHook( void );
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* The following two variables are used to communicate the status of the
|
||||||
|
register check tasks to the check task. If the variables keep incrementing,
|
||||||
|
then the register check tasks have not discovered any errors. If a variable
|
||||||
|
stops incrementing, then an error has been found. */
|
||||||
|
uint32_t ulRegTest1LoopCounter = 0UL, ulRegTest2LoopCounter = 0UL;
|
||||||
|
volatile uint32_t *pulRegTest1LoopCounter = &ulRegTest1LoopCounter;
|
||||||
|
volatile uint32_t *pulRegTest2LoopCounter = &ulRegTest2LoopCounter;
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void main_full( void )
|
||||||
|
{
|
||||||
|
/* Start all the other standard demo/test tasks. They have no particular
|
||||||
|
functionality, but do demonstrate how to use the FreeRTOS API and test the
|
||||||
|
kernel port. */
|
||||||
|
vCreateBlockTimeTasks();
|
||||||
|
vStartTimerDemoTask( mainTIMER_TEST_PERIOD );
|
||||||
|
vStartDynamicPriorityTasks();
|
||||||
|
vStartTaskNotifyTask();
|
||||||
|
|
||||||
|
/* Create the register check tasks, as described at the top of this file.
|
||||||
|
Use xTaskCreateStatic() to create a task using only statically allocated
|
||||||
|
memory. */
|
||||||
|
xTaskCreate( prvRegTestTaskEntry1, /* The function that implements the task. */
|
||||||
|
"Reg1", /* The name of the task. */
|
||||||
|
mainREG_TEST_STACK_SIZE_WORDS, /* Size of stack to allocate for the task - in words not bytes!. */
|
||||||
|
mainREG_TEST_TASK_1_PARAMETER, /* Parameter passed into the task. */
|
||||||
|
tskIDLE_PRIORITY, /* Priority of the task. */
|
||||||
|
NULL ); /* Can be used to pass out a handle to the created task. */
|
||||||
|
xTaskCreate( prvRegTestTaskEntry2, "Reg2", mainREG_TEST_STACK_SIZE_WORDS, mainREG_TEST_TASK_2_PARAMETER, tskIDLE_PRIORITY, NULL );
|
||||||
|
|
||||||
|
/* Create the task that performs the 'check' functionality, as described at
|
||||||
|
the top of this file. */
|
||||||
|
xTaskCreate( prvCheckTask, "Check", mainCHECK_TASK_STACK_SIZE_WORDS, NULL, mainCHECK_TASK_PRIORITY, NULL );
|
||||||
|
|
||||||
|
/* Start the scheduler. */
|
||||||
|
vTaskStartScheduler();
|
||||||
|
|
||||||
|
/* If all is well, the scheduler will now be running, and the following
|
||||||
|
line will never be reached. If the following line does execute, then
|
||||||
|
there was insufficient FreeRTOS heap memory available for the Idle and/or
|
||||||
|
timer tasks to be created. See the memory management section on the
|
||||||
|
FreeRTOS web site for more details on the FreeRTOS heap
|
||||||
|
http://www.freertos.org/a00111.html. */
|
||||||
|
for( ;; );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void prvCheckTask( void *pvParameters )
|
||||||
|
{
|
||||||
|
TickType_t xDelayPeriod = mainNO_ERROR_CHECK_TASK_PERIOD;
|
||||||
|
TickType_t xLastExecutionTime;
|
||||||
|
uint32_t ulLastRegTest1Value = 0, ulLastRegTest2Value = 0;
|
||||||
|
char * const pcPassMessage = ".";
|
||||||
|
char * pcStatusMessage = pcPassMessage;
|
||||||
|
extern void vToggleLED( void );
|
||||||
|
|
||||||
|
/* Just to stop compiler warnings. */
|
||||||
|
( void ) pvParameters;
|
||||||
|
|
||||||
|
/* Initialise xLastExecutionTime so the first call to vTaskDelayUntil()
|
||||||
|
works correctly. */
|
||||||
|
xLastExecutionTime = xTaskGetTickCount();
|
||||||
|
|
||||||
|
/* Cycle for ever, delaying then checking all the other tasks are still
|
||||||
|
operating without error. The onboard LED is toggled on each iteration.
|
||||||
|
If an error is detected then the delay period is decreased from
|
||||||
|
mainNO_ERROR_CHECK_TASK_PERIOD to mainERROR_CHECK_TASK_PERIOD. This has the
|
||||||
|
effect of increasing the rate at which the onboard LED toggles, and in so
|
||||||
|
doing gives visual feedback of the system status. */
|
||||||
|
for( ;; )
|
||||||
|
{
|
||||||
|
/* Delay until it is time to execute again. */
|
||||||
|
vTaskDelayUntil( &xLastExecutionTime, xDelayPeriod );
|
||||||
|
|
||||||
|
/* Check all the demo tasks (other than the flash tasks) to ensure
|
||||||
|
that they are all still running, and that none have detected an error. */
|
||||||
|
if( xAreDynamicPriorityTasksStillRunning() == pdFALSE )
|
||||||
|
{
|
||||||
|
pcStatusMessage = "ERROR: Dynamic priority demo/tests.\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if( xAreBlockTimeTestTasksStillRunning() == pdFALSE )
|
||||||
|
{
|
||||||
|
pcStatusMessage = "ERROR: Block time demo/tests.\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if( xAreTimerDemoTasksStillRunning( ( TickType_t ) xDelayPeriod ) == pdFALSE )
|
||||||
|
{
|
||||||
|
pcStatusMessage = "ERROR: Timer demo/tests.\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if( xAreTaskNotificationTasksStillRunning() == pdFALSE )
|
||||||
|
{
|
||||||
|
pcStatusMessage = "ERROR: Task notification demo/tests.\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check that the register test 1 task is still running. */
|
||||||
|
if( ulLastRegTest1Value == ulRegTest1LoopCounter )
|
||||||
|
{
|
||||||
|
pcStatusMessage = "ERROR: Register test 1.\r\n";
|
||||||
|
}
|
||||||
|
ulLastRegTest1Value = ulRegTest1LoopCounter;
|
||||||
|
|
||||||
|
/* Check that the register test 2 task is still running. */
|
||||||
|
if( ulLastRegTest2Value == ulRegTest2LoopCounter )
|
||||||
|
{
|
||||||
|
pcStatusMessage = "ERROR: Register test 2.\r\n";
|
||||||
|
}
|
||||||
|
ulLastRegTest2Value = ulRegTest2LoopCounter;
|
||||||
|
|
||||||
|
/* Write the status message to the UART and toggle the LED to show the
|
||||||
|
system status if the UART is not connected. */
|
||||||
|
vToggleLED();
|
||||||
|
|
||||||
|
/* If an error has been found then increase the LED toggle rate by
|
||||||
|
increasing the cycle frequency. */
|
||||||
|
if( pcStatusMessage != pcPassMessage )
|
||||||
|
{
|
||||||
|
xDelayPeriod = mainERROR_CHECK_TASK_PERIOD;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void prvRegTestTaskEntry1( void *pvParameters )
|
||||||
|
{
|
||||||
|
/* Although the regtest task is written in assembler, its entry point is
|
||||||
|
written in C for convenience of checking the task parameter is being passed
|
||||||
|
in correctly. */
|
||||||
|
if( pvParameters == mainREG_TEST_TASK_1_PARAMETER )
|
||||||
|
{
|
||||||
|
/* Start the part of the test that is written in assembler. */
|
||||||
|
vRegTest1Implementation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The following line will only execute if the task parameter is found to
|
||||||
|
be incorrect. The check task will detect that the regtest loop counter is
|
||||||
|
not being incremented and flag an error. */
|
||||||
|
vTaskDelete( NULL );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void prvRegTestTaskEntry2( void *pvParameters )
|
||||||
|
{
|
||||||
|
/* Although the regtest task is written in assembler, its entry point is
|
||||||
|
written in C for convenience of checking the task parameter is being passed
|
||||||
|
in correctly. */
|
||||||
|
if( pvParameters == mainREG_TEST_TASK_2_PARAMETER )
|
||||||
|
{
|
||||||
|
/* Start the part of the test that is written in assembler. */
|
||||||
|
vRegTest2Implementation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The following line will only execute if the task parameter is found to
|
||||||
|
be incorrect. The check task will detect that the regtest loop counter is
|
||||||
|
not being incremented and flag an error. */
|
||||||
|
vTaskDelete( NULL );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vFullDemoTickHook( void )
|
||||||
|
{
|
||||||
|
/* Called from vApplicationTickHook() when the project is configured to
|
||||||
|
build the full test/demo applications. */
|
||||||
|
|
||||||
|
/* Use task notifications from an interrupt. */
|
||||||
|
xNotifyTaskFromISR();
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
@ -0,0 +1,302 @@
|
|||||||
|
/*
|
||||||
|
* FreeRTOS Kernel V10.2.1
|
||||||
|
* Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
* subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* http://www.FreeRTOS.org
|
||||||
|
* http://aws.amazon.com/freertos
|
||||||
|
*
|
||||||
|
* 1 tab == 4 spaces!
|
||||||
|
*/
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* This project provides two demo applications. A simple blinky style project,
|
||||||
|
* and a more comprehensive test and demo application. The
|
||||||
|
* mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting (defined in this file) is used to
|
||||||
|
* select between the two. The simply blinky demo is implemented and described
|
||||||
|
* in main_blinky.c. The more comprehensive test and demo application is
|
||||||
|
* implemented and described in main_full.c.
|
||||||
|
*
|
||||||
|
* This file implements the code that is not demo specific, including the
|
||||||
|
* hardware setup and standard FreeRTOS hook functions.
|
||||||
|
*
|
||||||
|
* When running on the HiFive Rev B hardware:
|
||||||
|
* When executing correctly the red LED will toggle every three seconds. If
|
||||||
|
* the red LED toggles every 500ms then one of the self-monitoring test tasks
|
||||||
|
* discovered a potential issue. If the red led stops toggling then a hardware
|
||||||
|
* exception occurred or an assert was hit.
|
||||||
|
*
|
||||||
|
* ENSURE TO READ THE DOCUMENTATION PAGE FOR THIS PORT AND DEMO APPLICATION ON
|
||||||
|
* THE http://www.FreeRTOS.org WEB SITE FOR FULL INFORMATION ON USING THIS DEMO
|
||||||
|
* APPLICATION, AND ITS ASSOCIATE FreeRTOS ARCHITECTURE PORT!
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* FreeRTOS kernel includes. */
|
||||||
|
#include <FreeRTOS.h>
|
||||||
|
#include <task.h>
|
||||||
|
|
||||||
|
/* Standard includes. */
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
/* Set mainCREATE_SIMPLE_BLINKY_DEMO_ONLY to one to run the simple blinky demo,
|
||||||
|
or 0 to run the more comprehensive test and demo application. */
|
||||||
|
#define mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 0
|
||||||
|
|
||||||
|
/* UART hardware constants. */
|
||||||
|
#define mainUART_BASE_ADDRESS ( *( volatile uint32_t * ) 0x20000000UL )
|
||||||
|
#define mainUART_TX_DATA 0x00
|
||||||
|
#define mainUART_TX_CTRL 0x08
|
||||||
|
#define mainUART_RX_CTRL 0x0c
|
||||||
|
#define mainUART_CLOCK_DIV 0x18
|
||||||
|
#define mainUART_TX_ENABLE_BIT (1UL << 0UL)
|
||||||
|
#define mainUART_RX_ENABLE_BIT (1UL << 0UL)
|
||||||
|
#define mainUART_TX_FULL_BIT (1UL << 31UL)
|
||||||
|
#define mainUART_REGISTER( offset ) ( ( mainUART_BASE_ADDRESS + offset ) )
|
||||||
|
#define mainUART_REGISTER_WORD( offset ) ( *( ( uint32_t * ) mainUART_REGISTER( offset ) ) )
|
||||||
|
|
||||||
|
/* Hardware LED specifics. */
|
||||||
|
#define mainRED_LED_PIN ( 1UL << 0x16UL )
|
||||||
|
#define mainLED_IO_BASE_ADDRESS ( 0x10012000UL )
|
||||||
|
#define mainRED_LED_INPUT_ENABLE_REG ( * ( uint32_t * ) ( mainLED_IO_BASE_ADDRESS + 4UL ) )
|
||||||
|
#define mainRED_LED_OUTPUT_ENABLE_REG ( * ( uint32_t * ) ( mainLED_IO_BASE_ADDRESS + 8UL ) )
|
||||||
|
|
||||||
|
/* Hardware LED specifics. */
|
||||||
|
#define mainUART_PINMUX_BASE_ADDRESS ( 0x10012000 )
|
||||||
|
#define mainUART0_BASE_ADDRESS 0x10013000UL
|
||||||
|
#define mainUART_CLOCK_RATE 16000000UL
|
||||||
|
#define mainUART_BAUD_RATE 115200UL
|
||||||
|
#define mainUART0_TX_DATA_REG ( * ( uint32_t * ) ( mainUART0_BASE_ADDRESS + 0UL ) )
|
||||||
|
#define mainUART0_TX_DATA_BYTE_REG ( * ( uint8_t * ) ( mainUART0_BASE_ADDRESS + 0UL ) )
|
||||||
|
#define mainUART0_DIV_REG ( * ( uint32_t * ) ( mainUART0_BASE_ADDRESS + 24UL ) )
|
||||||
|
#define mainUART0_TXCTRL_REG ( * ( uint32_t * ) ( mainUART0_BASE_ADDRESS + 8UL ) )
|
||||||
|
#define mainUART0_RXCTRL_REG ( * ( uint32_t * ) ( mainUART0_BASE_ADDRESS + 12UL ) )
|
||||||
|
#define mainUART0_GPIO_SEL_REG ( * ( uint32_t * ) ( mainUART_PINMUX_BASE_ADDRESS + 60UL ) )
|
||||||
|
#define mainUART0_GPIO_SEL_EN ( * ( uint32_t * ) ( mainUART_PINMUX_BASE_ADDRESS + 56UL ) )
|
||||||
|
#define mainUART_TXEN_BIT ( 1UL )
|
||||||
|
#define mainUART0_PIN ( 0x30000UL )
|
||||||
|
|
||||||
|
/* Registers used to initialise the PLIC. */
|
||||||
|
#define mainPLIC_PENDING_0 ( * ( ( volatile uint32_t * ) 0x0C001000UL ) )
|
||||||
|
#define mainPLIC_PENDING_1 ( * ( ( volatile uint32_t * ) 0x0C001004UL ) )
|
||||||
|
#define mainPLIC_ENABLE_0 ( * ( ( volatile uint32_t * ) 0x0C002000UL ) )
|
||||||
|
#define mainPLIC_ENABLE_1 ( * ( ( volatile uint32_t * ) 0x0C002004UL ) )
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* main_blinky() is used when mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1.
|
||||||
|
* main_full() is used when mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 0.
|
||||||
|
*/
|
||||||
|
#if mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1
|
||||||
|
extern void main_blinky( void );
|
||||||
|
#else
|
||||||
|
extern void main_full( void );
|
||||||
|
#endif /* #if mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Prototypes for the standard FreeRTOS callback/hook functions implemented
|
||||||
|
* within this file. See https://www.freertos.org/a00016.html
|
||||||
|
*/
|
||||||
|
void vApplicationMallocFailedHook( void );
|
||||||
|
void vApplicationIdleHook( void );
|
||||||
|
void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName );
|
||||||
|
void vApplicationTickHook( void );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Setup the hardware to run this demo.
|
||||||
|
*/
|
||||||
|
static void prvSetupHardware( void );
|
||||||
|
|
||||||
|
/* Simple polling UART send function. */
|
||||||
|
void vSendString( const char * const pcString );
|
||||||
|
|
||||||
|
/* Toggle the red LED. */
|
||||||
|
void vTogglelED( void );
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
int main( void )
|
||||||
|
{
|
||||||
|
prvSetupHardware();
|
||||||
|
|
||||||
|
/* The mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting is described at the top
|
||||||
|
of this file. */
|
||||||
|
#if( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1 )
|
||||||
|
{
|
||||||
|
main_blinky();
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
{
|
||||||
|
main_full();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void prvSetupHardware( void )
|
||||||
|
{
|
||||||
|
/* Set all interrupt enable bits to 0. */
|
||||||
|
mainPLIC_ENABLE_0 = 0UL;
|
||||||
|
mainPLIC_ENABLE_1 = 0UL;
|
||||||
|
|
||||||
|
/* Clear all pending interrupts. */
|
||||||
|
mainPLIC_PENDING_0 = 0UL;
|
||||||
|
mainPLIC_PENDING_1 = 0UL;
|
||||||
|
|
||||||
|
/* Disable Red LED input. */
|
||||||
|
mainRED_LED_INPUT_ENABLE_REG &= ~mainRED_LED_PIN;
|
||||||
|
|
||||||
|
/* Enable Red LED output. */
|
||||||
|
mainRED_LED_OUTPUT_ENABLE_REG |= mainRED_LED_PIN;
|
||||||
|
|
||||||
|
/* Set UART baud rate. */
|
||||||
|
mainUART0_DIV_REG = ( mainUART_CLOCK_RATE / mainUART_BAUD_RATE ) - 1;
|
||||||
|
|
||||||
|
/* Enable UART Tx. */
|
||||||
|
mainUART0_TXCTRL_REG |= mainUART_TXEN_BIT;
|
||||||
|
mainUART0_GPIO_SEL_REG &= mainUART0_PIN;
|
||||||
|
mainUART0_GPIO_SEL_EN |= mainUART0_PIN;
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vToggleLED( void )
|
||||||
|
{
|
||||||
|
static uint32_t ulLEDState = 0;
|
||||||
|
|
||||||
|
if( ulLEDState == 0 )
|
||||||
|
{
|
||||||
|
mainRED_LED_OUTPUT_ENABLE_REG |= mainRED_LED_PIN;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mainRED_LED_OUTPUT_ENABLE_REG &= ~mainRED_LED_PIN;
|
||||||
|
}
|
||||||
|
ulLEDState = !ulLEDState;
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vSendString( const char * const pcString )
|
||||||
|
{
|
||||||
|
uint32_t ulIndex = 0;
|
||||||
|
|
||||||
|
/* Crude polling UART Tx. */
|
||||||
|
while( pcString[ ulIndex ] != 0x00 )
|
||||||
|
{
|
||||||
|
while( ( mainUART0_TX_DATA_REG & mainUART_TX_FULL_BIT ) != 0UL );
|
||||||
|
mainUART0_TX_DATA_BYTE_REG = pcString[ ulIndex ];
|
||||||
|
ulIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vApplicationMallocFailedHook( void )
|
||||||
|
{
|
||||||
|
/* vApplicationMallocFailedHook() will only be called if
|
||||||
|
configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h. It is a hook
|
||||||
|
function that will get called if a call to pvPortMalloc() fails.
|
||||||
|
pvPortMalloc() is called internally by the kernel whenever a task, queue,
|
||||||
|
timer or semaphore is created. It is also called by various parts of the
|
||||||
|
demo application. If heap_1.c or heap_2.c are used, then the size of the
|
||||||
|
heap available to pvPortMalloc() is defined by configTOTAL_HEAP_SIZE in
|
||||||
|
FreeRTOSConfig.h, and the xPortGetFreeHeapSize() API function can be used
|
||||||
|
to query the size of free heap space that remains (although it does not
|
||||||
|
provide information on how the remaining heap might be fragmented). */
|
||||||
|
taskDISABLE_INTERRUPTS();
|
||||||
|
__asm volatile( "ebreak" );
|
||||||
|
for( ;; );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vApplicationIdleHook( void )
|
||||||
|
{
|
||||||
|
/* vApplicationIdleHook() will only be called if configUSE_IDLE_HOOK is set
|
||||||
|
to 1 in FreeRTOSConfig.h. It will be called on each iteration of the idle
|
||||||
|
task. It is essential that code added to this hook function never attempts
|
||||||
|
to block in any way (for example, call xQueueReceive() with a block time
|
||||||
|
specified, or call vTaskDelay()). If the application makes use of the
|
||||||
|
vTaskDelete() API function (as this demo application does) then it is also
|
||||||
|
important that vApplicationIdleHook() is permitted to return to its calling
|
||||||
|
function, because it is the responsibility of the idle task to clean up
|
||||||
|
memory allocated by the kernel to any task that has since been deleted. */
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName )
|
||||||
|
{
|
||||||
|
( void ) pcTaskName;
|
||||||
|
( void ) pxTask;
|
||||||
|
|
||||||
|
/* Run time stack overflow checking is performed if
|
||||||
|
configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook
|
||||||
|
function is called if a stack overflow is detected. */
|
||||||
|
taskDISABLE_INTERRUPTS();
|
||||||
|
__asm volatile( "ebreak" );
|
||||||
|
for( ;; );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vApplicationTickHook( void )
|
||||||
|
{
|
||||||
|
/* The tests in the full demo expect some interaction with interrupts. */
|
||||||
|
#if( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY != 1 )
|
||||||
|
{
|
||||||
|
extern void vFullDemoTickHook( void );
|
||||||
|
vFullDemoTickHook();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Called from the kernel's port layer to handle device specific external
|
||||||
|
interrupts. */
|
||||||
|
void vApplicationHandleTrap( uint32_t mcause )
|
||||||
|
{
|
||||||
|
char pcCause[ 20 ];
|
||||||
|
|
||||||
|
/* Not implemented yet. */
|
||||||
|
sprintf( pcCause, "%u", mcause );
|
||||||
|
vSendString( pcCause );
|
||||||
|
configASSERT( mcause == 0 );
|
||||||
|
#warning vApplicationHandleTrap not implemented.
|
||||||
|
#if 0
|
||||||
|
uint32_t ulInterruptNumber;
|
||||||
|
typedef void ( * irq_handler_t )( void );
|
||||||
|
extern const irq_handler_t isrTable[];
|
||||||
|
|
||||||
|
ulInterruptNumber = PLIC->TARGET[ 0 ].CLAIM_COMPLETE;
|
||||||
|
|
||||||
|
/* Read handler from table. */
|
||||||
|
/* Call handler. */
|
||||||
|
|
||||||
|
PLIC->TARGET[ 0 ].CLAIM_COMPLETE = ulInterruptNumber;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void *malloc( size_t xSize )
|
||||||
|
{
|
||||||
|
/* The linker script does not define a heap so artificially force an assert()
|
||||||
|
if something unexpectedly uses the C library heap. See
|
||||||
|
https://www.freertos.org/a00111.html for more information. */
|
||||||
|
configASSERT( xTaskGetTickCount() == 0x00 );
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
@ -0,0 +1,40 @@
|
|||||||
|
@REM This batch file has been generated by the IAR Embedded Workbench
|
||||||
|
@REM C-SPY Debugger, as an aid to preparing a command line for running
|
||||||
|
@REM the cspybat command line utility using the appropriate settings.
|
||||||
|
@REM
|
||||||
|
@REM Note that this file is generated every time a new debug session
|
||||||
|
@REM is initialized, so you may want to move or rename the file before
|
||||||
|
@REM making changes.
|
||||||
|
@REM
|
||||||
|
@REM You can launch cspybat by typing the name of this batch file followed
|
||||||
|
@REM by the name of the debug file (usually an ELF/DWARF or UBROF file).
|
||||||
|
@REM
|
||||||
|
@REM Read about available command line parameters in the C-SPY Debugging
|
||||||
|
@REM Guide. Hints about additional command line parameters that may be
|
||||||
|
@REM useful in specific cases:
|
||||||
|
@REM --download_only Downloads a code image without starting a debug
|
||||||
|
@REM session afterwards.
|
||||||
|
@REM --silent Omits the sign-on message.
|
||||||
|
@REM --timeout Limits the maximum allowed execution time.
|
||||||
|
@REM
|
||||||
|
|
||||||
|
|
||||||
|
@echo off
|
||||||
|
|
||||||
|
if not "%~1" == "" goto debugFile
|
||||||
|
|
||||||
|
@echo on
|
||||||
|
|
||||||
|
"C:\devtools\IAR Systems\Embedded Workbench 8.3\common\bin\cspybat" -f "C:\Users\ribarry\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\RISC-V_RV32_SiFive_HiFive1_IAR\settings\RTOSDemo.Debug.general.xcl" --backend -f "C:\Users\ribarry\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\RISC-V_RV32_SiFive_HiFive1_IAR\settings\RTOSDemo.Debug.driver.xcl"
|
||||||
|
|
||||||
|
@echo off
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:debugFile
|
||||||
|
|
||||||
|
@echo on
|
||||||
|
|
||||||
|
"C:\devtools\IAR Systems\Embedded Workbench 8.3\common\bin\cspybat" -f "C:\Users\ribarry\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\RISC-V_RV32_SiFive_HiFive1_IAR\settings\RTOSDemo.Debug.general.xcl" "--debug_file=%~1" --backend -f "C:\Users\ribarry\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\RISC-V_RV32_SiFive_HiFive1_IAR\settings\RTOSDemo.Debug.driver.xcl"
|
||||||
|
|
||||||
|
@echo off
|
||||||
|
:end
|
@ -0,0 +1,21 @@
|
|||||||
|
"--core=RV32IMAC"
|
||||||
|
|
||||||
|
"-p"
|
||||||
|
|
||||||
|
"C:\devtools\IAR Systems\Embedded Workbench 8.3\riscv\config\debugger\SiFive\hifive1.ddf"
|
||||||
|
|
||||||
|
"--drv_verify_download"
|
||||||
|
|
||||||
|
"--jet_standard_reset=2,300,1500"
|
||||||
|
|
||||||
|
"--reset_style=\"0,-,0,Disabled__no_reset_\""
|
||||||
|
|
||||||
|
"--reset_style=\"1,-,0,Software\""
|
||||||
|
|
||||||
|
"--reset_style=\"2,-,1,Hardware\""
|
||||||
|
|
||||||
|
"--jet_emu_param=cJtagOpt=Fmt:OScan1"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,13 @@
|
|||||||
|
"C:\devtools\IAR Systems\Embedded Workbench 8.3\riscv\bin\riscvproc.dll"
|
||||||
|
|
||||||
|
"C:\devtools\IAR Systems\Embedded Workbench 8.3\riscv\bin\riscvijet.dll"
|
||||||
|
|
||||||
|
"C:\Users\ribarry\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\RISC-V_RV32_SiFive_HiFive1_IAR\Debug\Exe\RTOSDemo.out"
|
||||||
|
|
||||||
|
--plugin="C:\devtools\IAR Systems\Embedded Workbench 8.3\riscv\bin\riscvbat.dll"
|
||||||
|
|
||||||
|
--flash_loader="C:\devtools\IAR Systems\Embedded Workbench 8.3\riscv\config\flashloader\SiFive\hifive1.board"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,119 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<settings>
|
||||||
|
<Stack>
|
||||||
|
<FillEnabled>0</FillEnabled>
|
||||||
|
<OverflowWarningsEnabled>1</OverflowWarningsEnabled>
|
||||||
|
<WarningThreshold>90</WarningThreshold>
|
||||||
|
<SpWarningsEnabled>1</SpWarningsEnabled>
|
||||||
|
<WarnLogOnly>1</WarnLogOnly>
|
||||||
|
<UseTrigger>1</UseTrigger>
|
||||||
|
<TriggerName>main</TriggerName>
|
||||||
|
<LimitSize>0</LimitSize>
|
||||||
|
<ByteLimit>50</ByteLimit>
|
||||||
|
</Stack>
|
||||||
|
<DebugChecksum>
|
||||||
|
<Checksum>2321671989</Checksum>
|
||||||
|
</DebugChecksum>
|
||||||
|
<Disassembly>
|
||||||
|
<InstrCount>0</InstrCount>
|
||||||
|
<MixedMode>1</MixedMode>
|
||||||
|
</Disassembly>
|
||||||
|
<CodeCoverage>
|
||||||
|
<Enabled>0</Enabled>
|
||||||
|
<ShowSource>0</ShowSource>
|
||||||
|
<HideCovered>0</HideCovered>
|
||||||
|
</CodeCoverage>
|
||||||
|
<CallStack>
|
||||||
|
<ShowArgs>0</ShowArgs>
|
||||||
|
</CallStack>
|
||||||
|
<DataAlign>
|
||||||
|
<Action>1</Action>
|
||||||
|
<Notification>1</Notification>
|
||||||
|
</DataAlign>
|
||||||
|
<Jet>
|
||||||
|
<JetConnSerialNo>73866</JetConnSerialNo>
|
||||||
|
<JetConnFoundProbes />
|
||||||
|
<PrevWtdReset>Hardware</PrevWtdReset>
|
||||||
|
<OnlineReset>Software</OnlineReset>
|
||||||
|
<DisableInterrupts>0</DisableInterrupts>
|
||||||
|
<LeaveRunning>1</LeaveRunning>
|
||||||
|
<MultiCoreRunAll>0</MultiCoreRunAll>
|
||||||
|
</Jet>
|
||||||
|
<PlDriver>
|
||||||
|
<FirstRun>0</FirstRun>
|
||||||
|
<MemConfigValue>C:\devtools\IAR Systems\Embedded Workbench 8.3\riscv\config\debugger\SiFive\hifive1.ddf</MemConfigValue>
|
||||||
|
</PlDriver>
|
||||||
|
<RiscvDriver>
|
||||||
|
<EnableCache>1</EnableCache>
|
||||||
|
</RiscvDriver>
|
||||||
|
<Trace1>
|
||||||
|
<Enabled>0</Enabled>
|
||||||
|
<ShowSource>1</ShowSource>
|
||||||
|
</Trace1>
|
||||||
|
<DriverProfiling>
|
||||||
|
<Enabled>0</Enabled>
|
||||||
|
<Mode>1</Mode>
|
||||||
|
<Graph>0</Graph>
|
||||||
|
<Symbiont>0</Symbiont>
|
||||||
|
</DriverProfiling>
|
||||||
|
<CallStackLog>
|
||||||
|
<Enabled>0</Enabled>
|
||||||
|
</CallStackLog>
|
||||||
|
<CallStackStripe>
|
||||||
|
<ShowTiming>1</ShowTiming>
|
||||||
|
</CallStackStripe>
|
||||||
|
<InterruptLog>
|
||||||
|
<LogEnabled>0</LogEnabled>
|
||||||
|
<GraphEnabled>0</GraphEnabled>
|
||||||
|
<ShowTimeLog>1</ShowTimeLog>
|
||||||
|
<SumEnabled>0</SumEnabled>
|
||||||
|
<ShowTimeSum>1</ShowTimeSum>
|
||||||
|
<SumSortOrder>0</SumSortOrder>
|
||||||
|
</InterruptLog>
|
||||||
|
<DataLog>
|
||||||
|
<LogEnabled>0</LogEnabled>
|
||||||
|
<GraphEnabled>0</GraphEnabled>
|
||||||
|
<ShowTimeLog>1</ShowTimeLog>
|
||||||
|
<SumEnabled>0</SumEnabled>
|
||||||
|
<ShowTimeSum>1</ShowTimeSum>
|
||||||
|
</DataLog>
|
||||||
|
<Interrupts>
|
||||||
|
<Enabled>1</Enabled>
|
||||||
|
</Interrupts>
|
||||||
|
<MemConfig>
|
||||||
|
<Base>1</Base>
|
||||||
|
<Manual>0</Manual>
|
||||||
|
<Ddf>1</Ddf>
|
||||||
|
<TypeViol>0</TypeViol>
|
||||||
|
<Stop>1</Stop>
|
||||||
|
</MemConfig>
|
||||||
|
<Simulator>
|
||||||
|
<Freq>50000000</Freq>
|
||||||
|
<FreqHi>0</FreqHi>
|
||||||
|
<MultiCoreRunAll>1</MultiCoreRunAll>
|
||||||
|
</Simulator>
|
||||||
|
<SfrWindow>
|
||||||
|
<Show>1 1</Show>
|
||||||
|
<Sort>4 0</Sort>
|
||||||
|
</SfrWindow>
|
||||||
|
<TermIOLog>
|
||||||
|
<LoggingEnabled>_ 0</LoggingEnabled>
|
||||||
|
<LogFile>_ ""</LogFile>
|
||||||
|
</TermIOLog>
|
||||||
|
<LogFile>
|
||||||
|
<LoggingEnabled>_ 0</LoggingEnabled>
|
||||||
|
<LogFile>_ ""</LogFile>
|
||||||
|
<Category>_ 0</Category>
|
||||||
|
</LogFile>
|
||||||
|
<Breakpoints2>
|
||||||
|
<Bp0>_ 0 "EMUL_CODE" "{$PROJ_DIR$\..\Common\Minimal\MessageBufferDemo.c}.813.21" 0 0 1 "" 0 "" 0</Bp0>
|
||||||
|
<Bp1>_ 0 "EMUL_CODE" "0x200129EE" 0 0 1 "" 0 "" 0</Bp1>
|
||||||
|
<Bp2>_ 0 "EMUL_CODE" "{$PROJ_DIR$\..\Common\Minimal\MessageBufferDemo.c}.813.21" 0 0 1 "" 0 "" 0</Bp2>
|
||||||
|
<Bp3>_ 0 "EMUL_CODE" "0x200126BE" 0 0 1 "" 0 "" 0</Bp3>
|
||||||
|
<Count>4</Count>
|
||||||
|
</Breakpoints2>
|
||||||
|
<Aliases>
|
||||||
|
<Count>0</Count>
|
||||||
|
<SuppressDialog>0</SuppressDialog>
|
||||||
|
</Aliases>
|
||||||
|
</settings>
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue