mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-09-01 11:53:53 -04:00
Add FreeRTOS-Plus directory.
This commit is contained in:
parent
7bd5f21ad5
commit
f508a5f653
6798 changed files with 134949 additions and 19 deletions
1049
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/.cproject
Normal file
1049
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/.cproject
Normal file
File diff suppressed because it is too large
Load diff
89
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/.project
Normal file
89
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/.project
Normal file
|
@ -0,0 +1,89 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>FreeRTOS_Demo</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
|
||||
<triggers>clean,full,incremental,</triggers>
|
||||
<arguments>
|
||||
<dictionary>
|
||||
<key>?children?</key>
|
||||
<value>?name?=outputEntries\|?children?=?name?=entry\\\\\\\|\\\|?name?=entry\\\\\\\|\\\|\||</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>?name?</key>
|
||||
<value></value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.append_environment</key>
|
||||
<value>true</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.autoBuildTarget</key>
|
||||
<value>all</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.buildArguments</key>
|
||||
<value></value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.buildCommand</key>
|
||||
<value>make</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.buildLocation</key>
|
||||
<value>${workspace_loc:/FreeRTOS_Demo/iROM}</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
|
||||
<value>clean</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.contents</key>
|
||||
<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
|
||||
<value>false</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
|
||||
<value>true</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.enableFullBuild</key>
|
||||
<value>true</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.fullBuildTarget</key>
|
||||
<value>all</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.stopOnError</key>
|
||||
<value>true</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
|
||||
<value>true</value>
|
||||
</dictionary>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
|
||||
<triggers>full,incremental,</triggers>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.cdt.core.cnature</nature>
|
||||
<nature>com.rt.hightec.buildsystem.global.project.nature</nature>
|
||||
<nature>com.rt.hightec.buildsystem.tricore.nature</nature>
|
||||
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
||||
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||
<nature>com.rt.hightec.modeling.linker.core.project.nature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
|
@ -0,0 +1,58 @@
|
|||
[Main]
|
||||
Signature=UDE_TARGINFO_2.0
|
||||
MCUs=Controller0
|
||||
Description=Triboard with TC1782 (DAS)
|
||||
Architecture=TriCore
|
||||
Vendor=Infineon
|
||||
Board=TC1782 Starterkit
|
||||
|
||||
[Controller0]
|
||||
Family=TriCore
|
||||
Type=TC1782
|
||||
MemDevs=
|
||||
Enabled=1
|
||||
ExtClock=20000
|
||||
IntClock=150000
|
||||
|
||||
[Controller0.Core]
|
||||
Protocol=TC_JTAG
|
||||
Enabled=1
|
||||
|
||||
[Controller0.Core.LoadedAddOn]
|
||||
UDEMemtool=1
|
||||
|
||||
[Controller0.LicenseCheck]
|
||||
LicenseCheckMode=33
|
||||
|
||||
[Controller0.Core.TcCoreTargIntf]
|
||||
PortType=DAS
|
||||
MaxJtagClk=5000
|
||||
|
||||
[Controller0.PCP]
|
||||
Master=Core
|
||||
Enabled=0
|
||||
|
||||
[Controller0.PFLASH]
|
||||
Enabled=1
|
||||
Descrition=2,5MB Internal Flash
|
||||
Range0Start=0xA0000000
|
||||
Range0Size=0x280000
|
||||
AdvancedRemap=True
|
||||
NumOfRemapRanges=2
|
||||
RemapRange0=0x80000000,0x00280000
|
||||
RemapRange1=0xA0000000,0x00280000
|
||||
AutoErase=True
|
||||
AutoVerify=True
|
||||
EnableMemtoolByDefault=1
|
||||
|
||||
[Controller0.DFLASH]
|
||||
Enabled=1
|
||||
AutoErase=True
|
||||
AutoVerify=True
|
||||
EnableMemtoolByDefault=1
|
||||
|
||||
[Controller0.Core.TcCoreTargIntf.OnStart]
|
||||
ExecInitCmds=0
|
||||
[Controller0.Core.TcCoreTargIntf.OnHalt]
|
||||
ExecInitCmds=0
|
||||
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,62 @@
|
|||
REM This file should be executed from the command line prior to the first
|
||||
REM build. It will be necessary to refresh the Eclipse project once the
|
||||
REM .bat file has been executed (normally just press F5 to refresh).
|
||||
|
||||
REM Copies all the required files from their location within the standard
|
||||
REM FreeRTOS directory structure to under the Eclipse project directory.
|
||||
REM This permits the Eclipse project to be used in 'managed' mode and without
|
||||
REM having to setup any linked resources.
|
||||
|
||||
REM Standard paths
|
||||
SET FREERTOS_SOURCE=..\..\..\Source
|
||||
SET COMMON_SOURCE=..\..\Common\minimal
|
||||
SET COMMON_INCLUDE=..\..\Common\include
|
||||
|
||||
REM Have the files already been copied?
|
||||
IF EXIST FreeRTOS_Source Goto END
|
||||
|
||||
REM Create the required directory structure.
|
||||
MD FreeRTOS_Source
|
||||
MD FreeRTOS_Source\include
|
||||
MD FreeRTOS_Source\portable\GCC
|
||||
MD FreeRTOS_Source\portable\GCC\TriCore_1782
|
||||
MD FreeRTOS_Source\portable\MemMang
|
||||
MD Common_Demo_Source
|
||||
MD Common_Demo_Source\include
|
||||
|
||||
REM Copy the core kernel files into the SDK projects directory
|
||||
copy %FREERTOS_SOURCE%\tasks.c FreeRTOS_Source
|
||||
copy %FREERTOS_SOURCE%\queue.c FreeRTOS_Source
|
||||
copy %FREERTOS_SOURCE%\list.c FreeRTOS_Source
|
||||
copy %FREERTOS_SOURCE%\timers.c FreeRTOS_Source
|
||||
|
||||
REM Copy the common header files into the SDK projects directory
|
||||
copy %FREERTOS_SOURCE%\include\*.* FreeRTOS_Source\include
|
||||
|
||||
REM Copy the portable layer files into the projects directory
|
||||
copy %FREERTOS_SOURCE%\portable\GCC\TriCore_1782\*.* FreeRTOS_Source\portable\GCC\TriCore_1782
|
||||
|
||||
REM Copy the basic memory allocation files into the SDK projects directory
|
||||
copy %FREERTOS_SOURCE%\portable\MemMang\heap_2.c FreeRTOS_Source\portable\MemMang
|
||||
|
||||
REM Copy the files that define the common demo tasks.
|
||||
copy %COMMON_SOURCE%\dynamic.c Common_Demo_Source
|
||||
copy %COMMON_SOURCE%\BlockQ.c Common_Demo_Source
|
||||
copy %COMMON_SOURCE%\death.c Common_Demo_Source
|
||||
copy %COMMON_SOURCE%\blocktim.c Common_Demo_Source
|
||||
copy %COMMON_SOURCE%\semtest.c Common_Demo_Source
|
||||
copy %COMMON_SOURCE%\PollQ.c Common_Demo_Source
|
||||
copy %COMMON_SOURCE%\GenQTest.c Common_Demo_Source
|
||||
copy %COMMON_SOURCE%\QPeek.c Common_Demo_Source
|
||||
copy %COMMON_SOURCE%\recmutex.c Common_Demo_Source
|
||||
copy %COMMON_SOURCE%\flop.c Common_Demo_Source
|
||||
copy %COMMON_SOURCE%\flash.c Common_Demo_Source
|
||||
copy %COMMON_SOURCE%\comtest.c Common_Demo_Source
|
||||
copy %COMMON_SOURCE%\TimerDemo.c Common_Demo_Source
|
||||
copy %COMMON_SOURCE%\countsem.c Common_Demo_Source
|
||||
copy %COMMON_SOURCE%\integer.c Common_Demo_Source
|
||||
|
||||
REM Copy the common demo file headers.
|
||||
copy %COMMON_INCLUDE%\*.h Common_Demo_Source\include
|
||||
|
||||
: END
|
|
@ -0,0 +1,148 @@
|
|||
/*
|
||||
FreeRTOS V7.1.1 - Copyright (C) 2012 Real Time Engineers Ltd.
|
||||
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* FreeRTOS tutorial books are available in pdf and paperback. *
|
||||
* Complete, revised, and edited pdf reference manuals are also *
|
||||
* available. *
|
||||
* *
|
||||
* Purchasing FreeRTOS documentation will not only help you, by *
|
||||
* ensuring you get running as quickly as possible and with an *
|
||||
* in-depth knowledge of how to use FreeRTOS, it will also help *
|
||||
* the FreeRTOS project to continue with its mission of providing *
|
||||
* professional grade, cross platform, de facto standard solutions *
|
||||
* for microcontrollers - completely free of charge! *
|
||||
* *
|
||||
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
|
||||
* *
|
||||
* Thank you for using FreeRTOS, and thank you for your support! *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
|
||||
This file is part of the FreeRTOS distribution.
|
||||
|
||||
FreeRTOS is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License (version 2) as published by the
|
||||
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
|
||||
>>>NOTE<<< The modification to the GPL is included to allow you to
|
||||
distribute a combined work that includes FreeRTOS without being obliged to
|
||||
provide the source code for proprietary components outside of the FreeRTOS
|
||||
kernel. FreeRTOS is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
more details. You should have received a copy of the GNU General Public
|
||||
License and the FreeRTOS license exception along with FreeRTOS; if not it
|
||||
can be viewed here: http://www.freertos.org/a00114.html and also obtained
|
||||
by writing to Richard Barry, contact details for whom are available on the
|
||||
FreeRTOS WEB site.
|
||||
|
||||
1 tab == 4 spaces!
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* Having a problem? Start by reading the FAQ "My application does *
|
||||
* not run, what could be wrong? *
|
||||
* *
|
||||
* http://www.FreeRTOS.org/FAQHelp.html *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, training, latest information,
|
||||
license and contact details.
|
||||
|
||||
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
||||
including FreeRTOS+Trace - an indispensable productivity tool.
|
||||
|
||||
Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell
|
||||
the code with commercial support, indemnification, and middleware, under
|
||||
the OpenRTOS brand: http://www.OpenRTOS.com. High Integrity Systems also
|
||||
provide a safety engineered and independently SIL3 certified version under
|
||||
the SafeRTOS brand: http://www.SafeRTOS.com.
|
||||
*/
|
||||
|
||||
#ifndef FREERTOS_CONFIG_H
|
||||
#define FREERTOS_CONFIG_H
|
||||
|
||||
/*
|
||||
* The following #error directive is to remind users that a batch file must be
|
||||
* executed prior to this project being built. The batch file *cannot* be
|
||||
* executed from within the IDE! Once it has been executed, re-open or refresh
|
||||
* the Eclipse project and remove the #error line below.
|
||||
*/
|
||||
#error Ensure CreateProjectDirectoryStructure.bat has been executed before building. See comment immediately above.
|
||||
|
||||
/*-----------------------------------------------------------
|
||||
* 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 configUSE_PREEMPTION 1
|
||||
#define configUSE_IDLE_HOOK 1
|
||||
/* CPU is actually 150MHz but FPIDIV is 1 meaning divide by 2 for the
|
||||
peripheral clock. */
|
||||
#define configCPU_CLOCK_HZ ( ( unsigned long ) 150000000UL )
|
||||
#define configPERIPHERAL_CLOCK_HZ ( ( unsigned long ) configCPU_CLOCK_HZ / 2UL )
|
||||
#define configTICK_RATE_HZ ( ( portTickType ) 1000UL )
|
||||
#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 6 )
|
||||
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 128 )
|
||||
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 35U * 1024U ) )
|
||||
#define configMAX_TASK_NAME_LEN ( 16 )
|
||||
#define configUSE_TRACE_FACILITY 0
|
||||
#define configUSE_16_BIT_TICKS 0
|
||||
#define configIDLE_SHOULD_YIELD 0
|
||||
#define configUSE_MALLOC_FAILED_HOOK 1
|
||||
#define configCHECK_FOR_STACK_OVERFLOW 0
|
||||
#define configUSE_TICK_HOOK 1
|
||||
#define configUSE_COUNTING_SEMAPHORES 1
|
||||
#define configUSE_RECURSIVE_MUTEXES 1
|
||||
#define configUSE_MUTEXES 1
|
||||
|
||||
/* Co-routine definitions. */
|
||||
#define configUSE_CO_ROUTINES 0
|
||||
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
|
||||
|
||||
/* Software timer configuration. */
|
||||
#define configUSE_TIMERS 1
|
||||
#define configTIMER_TASK_PRIORITY ( 4 )
|
||||
#define configTIMER_QUEUE_LENGTH ( 5 )
|
||||
#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE
|
||||
|
||||
/* 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 configMAX_SYSCALL_INTERRUPT_PRIORITY 64 /* Interrupt above priority 64 are not effected by critical sections, but cannot call interrupt safe FreeRTOS functions. */
|
||||
#define configKERNEL_INTERRUPT_PRIORITY 2 /* This is defined here for clarity, but the value must not be changed from 2. */
|
||||
#define configKERNEL_YIELD_PRIORITY 1 /* This is defined here for clarity, but must not be changed from its default value of 1. */
|
||||
|
||||
/* Interrupt priorities. */
|
||||
#define configINTERRUPT_PRIORITY_TX 16
|
||||
#define configINTERRUPT_PRIORITY_RX 18
|
||||
#define configHIGH_FREQUENCY_TIMER_PRIORITY ( configMAX_SYSCALL_INTERRUPT_PRIORITY - 1UL )
|
||||
|
||||
/* Default definition of configASSERT(). */
|
||||
#define configASSERT( x ) if( ( x ) == 0 ) { portDISABLE_INTERRUPTS(); for( ;; ); }
|
||||
|
||||
|
||||
#endif /* FREERTOS_CONFIG_H */
|
||||
|
|
@ -0,0 +1,250 @@
|
|||
/*
|
||||
FreeRTOS V7.1.1 - Copyright (C) 2012 Real Time Engineers Ltd.
|
||||
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* FreeRTOS tutorial books are available in pdf and paperback. *
|
||||
* Complete, revised, and edited pdf reference manuals are also *
|
||||
* available. *
|
||||
* *
|
||||
* Purchasing FreeRTOS documentation will not only help you, by *
|
||||
* ensuring you get running as quickly as possible and with an *
|
||||
* in-depth knowledge of how to use FreeRTOS, it will also help *
|
||||
* the FreeRTOS project to continue with its mission of providing *
|
||||
* professional grade, cross platform, de facto standard solutions *
|
||||
* for microcontrollers - completely free of charge! *
|
||||
* *
|
||||
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
|
||||
* *
|
||||
* Thank you for using FreeRTOS, and thank you for your support! *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
|
||||
This file is part of the FreeRTOS distribution.
|
||||
|
||||
FreeRTOS is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License (version 2) as published by the
|
||||
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
|
||||
>>>NOTE<<< The modification to the GPL is included to allow you to
|
||||
distribute a combined work that includes FreeRTOS without being obliged to
|
||||
provide the source code for proprietary components outside of the FreeRTOS
|
||||
kernel. FreeRTOS is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
more details. You should have received a copy of the GNU General Public
|
||||
License and the FreeRTOS license exception along with FreeRTOS; if not it
|
||||
can be viewed here: http://www.freertos.org/a00114.html and also obtained
|
||||
by writing to Richard Barry, contact details for whom are available on the
|
||||
FreeRTOS WEB site.
|
||||
|
||||
1 tab == 4 spaces!
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* Having a problem? Start by reading the FAQ "My application does *
|
||||
* not run, what could be wrong? *
|
||||
* *
|
||||
* http://www.FreeRTOS.org/FAQHelp.html *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, training, latest information,
|
||||
license and contact details.
|
||||
|
||||
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
||||
including FreeRTOS+Trace - an indispensable productivity tool.
|
||||
|
||||
Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell
|
||||
the code with commercial support, indemnification, and middleware, under
|
||||
the OpenRTOS brand: http://www.OpenRTOS.com. High Integrity Systems also
|
||||
provide a safety engineered and independently SIL3 certified version under
|
||||
the SafeRTOS brand: http://www.SafeRTOS.com.
|
||||
*/
|
||||
|
||||
/*
|
||||
* It is intended that the tasks and timers in this file cause interrupts to
|
||||
* nest at least one level deeper than they would otherwise.
|
||||
*
|
||||
* A timer is configured to create an interrupt at moderately high frequency,
|
||||
* as defined by the tmrtestHIGH_FREQUENCY_TIMER_TEST_HZ constant. The
|
||||
* interrupt priority is by configHIGH_FREQUENCY_TIMER_PRIORITY, which is set
|
||||
* to ( configMAX_SYSCALL_INTERRUPT_PRIORITY - 1UL ), the second highest
|
||||
* priority from which interrupt safe FreeRTOS API calls can be made.
|
||||
*
|
||||
* The timer interrupt handler counts the number of times it is called. When
|
||||
* it has determined that the number of calls means that 10ms has passed, it
|
||||
* 'gives' a semaphore, and resets it call count.
|
||||
*
|
||||
* A high priority task is used to receive the data posted to the queue by the
|
||||
* interrupt service routine. The task should, then, leave the blocked state
|
||||
* and 'take' the available semaphore every 10ms. The frequency at which it
|
||||
* actually leaves the blocked state is verified by the demo's check task (see
|
||||
* the the documentation for the entire demo on the FreeRTOS.org web site),
|
||||
* which then flags an error if the frequency lower than expected.
|
||||
*/
|
||||
|
||||
/* Standard includes. */
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* Scheduler includes. */
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
#include "semphr.h"
|
||||
|
||||
/* Demo application includes. */
|
||||
#include "InterruptNestTest.h"
|
||||
|
||||
/* TriCore specific includes. */
|
||||
#include <tc1782.h>
|
||||
#include <machine/intrinsics.h>
|
||||
#include <machine/cint.h>
|
||||
#include <machine/wdtcon.h>
|
||||
|
||||
/* This constant is specific to this test application. It allows the high
|
||||
frequency (interrupt nesting test) timer to know how often to trigger, and the
|
||||
check task to know how many iterations to expect at any given time. */
|
||||
#define tmrtestHIGH_FREQUENCY_TIMER_TEST_HZ ( 8931UL )
|
||||
|
||||
/*
|
||||
* The handler for the high priority timer interrupt.
|
||||
*/
|
||||
static void prvPortHighFrequencyTimerHandler( int iArg ) __attribute__((longcall));
|
||||
|
||||
/*
|
||||
* The task that receives messages posted to a queue by the higher priority
|
||||
* timer interrupt.
|
||||
*/
|
||||
static void prvHighFrequencyTimerTask( void *pvParameters );
|
||||
|
||||
/* Constants used to configure the timer and determine how often the task
|
||||
should receive data. */
|
||||
static const unsigned long ulCompareMatchValue = configPERIPHERAL_CLOCK_HZ / tmrtestHIGH_FREQUENCY_TIMER_TEST_HZ;
|
||||
static const unsigned long ulInterruptsPer10ms = tmrtestHIGH_FREQUENCY_TIMER_TEST_HZ / 100UL;
|
||||
static const unsigned long ulSemaphoreGiveRate_ms = 10UL;
|
||||
|
||||
/* The semaphore used to synchronise the interrupt with the task. */
|
||||
static xSemaphoreHandle xHighFrequencyTimerSemaphore = NULL;
|
||||
|
||||
/* Holds the count of the number of times the task is unblocked by the timer. */
|
||||
static volatile unsigned long ulHighFrequencyTaskIterations = 0UL;
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vSetupInterruptNestingTest( void )
|
||||
{
|
||||
unsigned long ulCompareMatchBits;
|
||||
|
||||
/* Create the semaphore used to communicate between the high frequency
|
||||
interrupt and the task. */
|
||||
vSemaphoreCreateBinary( xHighFrequencyTimerSemaphore );
|
||||
configASSERT( xHighFrequencyTimerSemaphore );
|
||||
|
||||
/* Create the task that pends on the semaphore that is given by the
|
||||
high frequency interrupt. */
|
||||
xTaskCreate( prvHighFrequencyTimerTask, ( signed char * ) "HFTmr", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL );
|
||||
|
||||
/* Setup the interrupt itself. The STM module clock divider is setup when
|
||||
the tick interrupt is configured - which is when the scheduler is started -
|
||||
so there is no need to do it here.
|
||||
|
||||
The tick interrupt uses compare match 0, so this test uses compare match
|
||||
1, which means shifting up the values by 16 before writing them to the
|
||||
register. */
|
||||
ulCompareMatchBits = ( 0x1fUL - __CLZ( ulCompareMatchValue ) );
|
||||
ulCompareMatchBits <<= 16UL;
|
||||
|
||||
/* Write the values to the relevant SMT registers, without changing other
|
||||
bits. */
|
||||
taskENTER_CRITICAL();
|
||||
{
|
||||
STM_CMCON.reg &= ~( 0x1fUL << 16UL );
|
||||
STM_CMCON.reg |= ulCompareMatchBits;
|
||||
STM_CMP1.reg = ulCompareMatchValue;
|
||||
|
||||
if( 0 != _install_int_handler( configHIGH_FREQUENCY_TIMER_PRIORITY, prvPortHighFrequencyTimerHandler, 0 ) )
|
||||
{
|
||||
/* Set-up the interrupt. */
|
||||
STM_SRC1.reg = ( configHIGH_FREQUENCY_TIMER_PRIORITY | 0x00005000UL );
|
||||
|
||||
/* Enable the Interrupt. */
|
||||
STM_ISRR.reg &= ~( 0x03UL << 2UL );
|
||||
STM_ISRR.reg |= ( 0x1UL << 2UL );
|
||||
STM_ICR.reg &= ~( 0x07UL << 4UL );
|
||||
STM_ICR.reg |= ( 0x5UL << 4UL );
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Failed to install the interrupt. */
|
||||
configASSERT( ( ( volatile void * ) NULL ) );
|
||||
}
|
||||
}
|
||||
taskEXIT_CRITICAL();
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
unsigned long ulInterruptNestingTestGetIterationCount( unsigned long *pulExpectedIncFrequency_ms )
|
||||
{
|
||||
unsigned long ulReturn;
|
||||
|
||||
*pulExpectedIncFrequency_ms = ulSemaphoreGiveRate_ms;
|
||||
portENTER_CRITICAL();
|
||||
{
|
||||
ulReturn = ulHighFrequencyTaskIterations;
|
||||
ulHighFrequencyTaskIterations = 0UL;
|
||||
}
|
||||
|
||||
return ulReturn;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvHighFrequencyTimerTask( void *pvParameters )
|
||||
{
|
||||
/* Just to remove compiler warnings about the unused parameter. */
|
||||
( void ) pvParameters;
|
||||
|
||||
for( ;; )
|
||||
{
|
||||
/* Wait for the next trigger from the high frequency timer interrupt. */
|
||||
xSemaphoreTake( xHighFrequencyTimerSemaphore, portMAX_DELAY );
|
||||
|
||||
/* Just count how many times the task has been unblocked before
|
||||
returning to wait for the semaphore again. */
|
||||
ulHighFrequencyTaskIterations++;
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvPortHighFrequencyTimerHandler( int iArg )
|
||||
{
|
||||
static volatile unsigned long ulExecutionCounter = 0UL;
|
||||
unsigned long ulHigherPriorityTaskWoken = pdFALSE;
|
||||
|
||||
/* Just to avoid compiler warnings about unused parameters. */
|
||||
( void ) iArg;
|
||||
|
||||
/* Clear the interrupt source. */
|
||||
STM_ISRR.reg = 1UL << 2UL;
|
||||
|
||||
/* Reload the Compare Match register for X ticks into the future.*/
|
||||
STM_CMP1.reg += ulCompareMatchValue;
|
||||
|
||||
ulExecutionCounter++;
|
||||
|
||||
if( ulExecutionCounter >= ulInterruptsPer10ms )
|
||||
{
|
||||
ulExecutionCounter = xSemaphoreGiveFromISR( xHighFrequencyTimerSemaphore, &ulHigherPriorityTaskWoken );
|
||||
|
||||
/* If the semaphore was given ulExeuctionCounter will now be pdTRUE. */
|
||||
configASSERT( ulExecutionCounter == pdTRUE );
|
||||
|
||||
/* Start counting again. */
|
||||
ulExecutionCounter = 0UL;
|
||||
}
|
||||
|
||||
/* Context switch on exit if necessary. */
|
||||
portYIELD_FROM_ISR( ulHigherPriorityTaskWoken );
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
/*
|
||||
FreeRTOS V7.1.1 - Copyright (C) 2012 Real Time Engineers Ltd.
|
||||
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* FreeRTOS tutorial books are available in pdf and paperback. *
|
||||
* Complete, revised, and edited pdf reference manuals are also *
|
||||
* available. *
|
||||
* *
|
||||
* Purchasing FreeRTOS documentation will not only help you, by *
|
||||
* ensuring you get running as quickly as possible and with an *
|
||||
* in-depth knowledge of how to use FreeRTOS, it will also help *
|
||||
* the FreeRTOS project to continue with its mission of providing *
|
||||
* professional grade, cross platform, de facto standard solutions *
|
||||
* for microcontrollers - completely free of charge! *
|
||||
* *
|
||||
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
|
||||
* *
|
||||
* Thank you for using FreeRTOS, and thank you for your support! *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
|
||||
This file is part of the FreeRTOS distribution.
|
||||
|
||||
FreeRTOS is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License (version 2) as published by the
|
||||
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
|
||||
>>>NOTE<<< The modification to the GPL is included to allow you to
|
||||
distribute a combined work that includes FreeRTOS without being obliged to
|
||||
provide the source code for proprietary components outside of the FreeRTOS
|
||||
kernel. FreeRTOS is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
more details. You should have received a copy of the GNU General Public
|
||||
License and the FreeRTOS license exception along with FreeRTOS; if not it
|
||||
can be viewed here: http://www.freertos.org/a00114.html and also obtained
|
||||
by writing to Richard Barry, contact details for whom are available on the
|
||||
FreeRTOS WEB site.
|
||||
|
||||
1 tab == 4 spaces!
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* Having a problem? Start by reading the FAQ "My application does *
|
||||
* not run, what could be wrong? *
|
||||
* *
|
||||
* http://www.FreeRTOS.org/FAQHelp.html *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, training, latest information,
|
||||
license and contact details.
|
||||
|
||||
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
||||
including FreeRTOS+Trace - an indispensable productivity tool.
|
||||
|
||||
Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell
|
||||
the code with commercial support, indemnification, and middleware, under
|
||||
the OpenRTOS brand: http://www.OpenRTOS.com. High Integrity Systems also
|
||||
provide a safety engineered and independently SIL3 certified version under
|
||||
the SafeRTOS brand: http://www.SafeRTOS.com.
|
||||
*/
|
||||
|
||||
#ifndef INTERRUPT_NEST_TEST_H
|
||||
#define INTERRUPT_NEST_TEST_H
|
||||
|
||||
void vSetupInterruptNestingTest( void );
|
||||
unsigned long ulInterruptNestingTestGetIterationCount( unsigned long *pulExpectedIncFrequency_ms );
|
||||
|
||||
#endif /* INTERRUPT_NEST_TEST_H */
|
||||
|
109
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/RTOSDemo/ParTest.c
Normal file
109
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/RTOSDemo/ParTest.c
Normal file
|
@ -0,0 +1,109 @@
|
|||
/*
|
||||
FreeRTOS V7.1.1 - Copyright (C) 2012 Real Time Engineers Ltd.
|
||||
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* FreeRTOS tutorial books are available in pdf and paperback. *
|
||||
* Complete, revised, and edited pdf reference manuals are also *
|
||||
* available. *
|
||||
* *
|
||||
* Purchasing FreeRTOS documentation will not only help you, by *
|
||||
* ensuring you get running as quickly as possible and with an *
|
||||
* in-depth knowledge of how to use FreeRTOS, it will also help *
|
||||
* the FreeRTOS project to continue with its mission of providing *
|
||||
* professional grade, cross platform, de facto standard solutions *
|
||||
* for microcontrollers - completely free of charge! *
|
||||
* *
|
||||
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
|
||||
* *
|
||||
* Thank you for using FreeRTOS, and thank you for your support! *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
|
||||
This file is part of the FreeRTOS distribution.
|
||||
|
||||
FreeRTOS is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License (version 2) as published by the
|
||||
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
|
||||
>>>NOTE<<< The modification to the GPL is included to allow you to
|
||||
distribute a combined work that includes FreeRTOS without being obliged to
|
||||
provide the source code for proprietary components outside of the FreeRTOS
|
||||
kernel. FreeRTOS is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
more details. You should have received a copy of the GNU General Public
|
||||
License and the FreeRTOS license exception along with FreeRTOS; if not it
|
||||
can be viewed here: http://www.freertos.org/a00114.html and also obtained
|
||||
by writing to Richard Barry, contact details for whom are available on the
|
||||
FreeRTOS WEB site.
|
||||
|
||||
1 tab == 4 spaces!
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* Having a problem? Start by reading the FAQ "My application does *
|
||||
* not run, what could be wrong? *
|
||||
* *
|
||||
* http://www.FreeRTOS.org/FAQHelp.html *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, training, latest information,
|
||||
license and contact details.
|
||||
|
||||
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
||||
including FreeRTOS+Trace - an indispensable productivity tool.
|
||||
|
||||
Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell
|
||||
the code with commercial support, indemnification, and middleware, under
|
||||
the OpenRTOS brand: http://www.OpenRTOS.com. High Integrity Systems also
|
||||
provide a safety engineered and independently SIL3 certified version under
|
||||
the SafeRTOS brand: http://www.SafeRTOS.com.
|
||||
*/
|
||||
|
||||
/* Scheduler Includes. */
|
||||
#include "FreeRTOS.h"
|
||||
|
||||
/* Demo Includes. */
|
||||
#include "partest.h"
|
||||
|
||||
/* Hardware specific includes. */
|
||||
#include <tc1782.h>
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
void vParTestInitialise( void )
|
||||
{
|
||||
/* The TriBoard TC1782 v2.1 has 8 LEDs connected to GPIO5. */
|
||||
P5_IOCR0.reg = 0xC0C0C0C0UL;
|
||||
P5_IOCR4.reg = 0xC0C0C0C0UL;
|
||||
P5_PDR.reg = 0x00000000UL;
|
||||
P5_OMR.reg = 0x0000FFFFUL;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )
|
||||
{
|
||||
unsigned long ulBitPattern = 1UL << uxLED;
|
||||
|
||||
if( xValue != 0 )
|
||||
{
|
||||
P5_OMR.reg = ulBitPattern;
|
||||
}
|
||||
else
|
||||
{
|
||||
P5_OMR.reg = ulBitPattern << 16UL;
|
||||
}
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
void vParTestToggleLED( unsigned portBASE_TYPE uxLED )
|
||||
{
|
||||
unsigned long ulBitPattern = 1UL << uxLED;
|
||||
|
||||
P5_OMR.reg = ( ulBitPattern << 16 ) | ulBitPattern;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
|
@ -0,0 +1,162 @@
|
|||
/*====================================================================
|
||||
* Project: Board Support Package (BSP)
|
||||
* Developed using:
|
||||
* Function: Determine the frequency the CPU is running at (TC1782)
|
||||
*
|
||||
* Copyright HighTec EDV-Systeme GmbH 1982-2010
|
||||
*====================================================================*/
|
||||
|
||||
#include <machine/wdtcon.h>
|
||||
#include <tc1782/scu.h>
|
||||
#include <tc1782/cpu.h>
|
||||
|
||||
|
||||
#ifndef DEF_FRQ
|
||||
#define DEF_FRQ 20000000U /* TriBoard-TC1782 quartz frequency is 20 MHz */
|
||||
#endif /* DEF_FRQ */
|
||||
|
||||
#define VCOBASE_FREQ 400000000U /* ?? */
|
||||
|
||||
/* divider values for 150 MHz */
|
||||
#define SYS_CFG_PDIV 2
|
||||
#define SYS_CFG_NDIV 30
|
||||
#define SYS_CFG_K1DIV 2
|
||||
#define SYS_CFG_K2DIV 2
|
||||
|
||||
|
||||
/* prototypes for global functions */
|
||||
void set_cpu_frequency(void);
|
||||
unsigned int get_cpu_frequency(void);
|
||||
|
||||
/* initialization flag: prevent multiple initialization of PLL_CLC */
|
||||
static int freq_init = 0;
|
||||
|
||||
|
||||
/* Set the frequency the CPU is running at */
|
||||
|
||||
void set_cpu_frequency(void)
|
||||
{
|
||||
SCU_PLLCON0_t_nonv pllcon0;
|
||||
SCU_PLLCON1_t_nonv pllcon1;
|
||||
|
||||
if (freq_init)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
freq_init = 1;
|
||||
|
||||
/* check whether we are already running at desired clockrate */
|
||||
pllcon0 = SCU_PLLCON0;
|
||||
pllcon1 = SCU_PLLCON1;
|
||||
if ( ((SYS_CFG_NDIV - 1) == pllcon0.bits.NDIV)
|
||||
&& ((SYS_CFG_PDIV - 1) == pllcon0.bits.PDIV)
|
||||
&& ((SYS_CFG_K1DIV - 1) == pllcon1.bits.K1DIV)
|
||||
&& ((SYS_CFG_K2DIV - 1) == pllcon1.bits.K2DIV)
|
||||
&& SCU_PLLSTAT.bits.VCOLOCK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!SCU_PLLSTAT.bits.PWDSTAT)
|
||||
{
|
||||
/* set speed to 180 MHz with 20MHz Crystal */
|
||||
pllcon0.reg = 0;
|
||||
pllcon1.reg = 0;
|
||||
pllcon0.bits.NDIV = SYS_CFG_NDIV - 1;
|
||||
pllcon0.bits.PDIV = SYS_CFG_PDIV - 1;
|
||||
pllcon1.bits.K2DIV = SYS_CFG_K2DIV - 1;
|
||||
pllcon1.bits.K1DIV = SYS_CFG_K1DIV - 1;
|
||||
pllcon0.bits.VCOBYP = 1;
|
||||
pllcon0.bits.CLRFINDIS = 1;
|
||||
pllcon0.bits.PLLPWD = 1;
|
||||
pllcon0.bits.RESLD = 1;
|
||||
|
||||
unlock_wdtcon();
|
||||
/* FPI at half CPU speed */
|
||||
SCU_CCUCON0.reg = 1;
|
||||
|
||||
/* force prescaler mode */
|
||||
SCU_PLLCON0.bits.VCOBYP = 1;
|
||||
|
||||
/* wait for prescaler mode */
|
||||
while (!SCU_PLLSTAT.bits.VCOBYST)
|
||||
;
|
||||
|
||||
/* write new control values */
|
||||
SCU_PLLCON1 = pllcon1;
|
||||
SCU_PLLCON0 = pllcon0;
|
||||
lock_wdtcon();
|
||||
|
||||
/* wait for stable VCO frequency */
|
||||
while (!SCU_PLLSTAT.bits.VCOLOCK)
|
||||
;
|
||||
|
||||
unlock_wdtcon();
|
||||
/* leave prescaler mode */
|
||||
SCU_PLLCON0.bits.VCOBYP = 0;
|
||||
lock_wdtcon();
|
||||
}
|
||||
}
|
||||
|
||||
/* Determine the frequency the CPU is running at */
|
||||
|
||||
unsigned int get_cpu_frequency(void)
|
||||
{
|
||||
unsigned int frequency;
|
||||
unsigned int fpidiv;
|
||||
SCU_PLLCON0_t_nonv pllcon0;
|
||||
SCU_PLLCON1_t_nonv pllcon1;
|
||||
SCU_PLLSTAT_t_nonv pllstat;
|
||||
|
||||
if (!freq_init)
|
||||
{
|
||||
set_cpu_frequency();
|
||||
|
||||
#ifdef ENABLE_ICACHE
|
||||
/* enable instruction cache (PMI_CON0) */
|
||||
unlock_wdtcon();
|
||||
PMI_CON0.bits.PCBYP = 0;
|
||||
lock_wdtcon();
|
||||
#endif /* ENABLE_ICACHE */
|
||||
}
|
||||
|
||||
pllcon0 = SCU_PLLCON0;
|
||||
pllcon1 = SCU_PLLCON1;
|
||||
pllstat = SCU_PLLSTAT;
|
||||
|
||||
/* read FPI divider value */
|
||||
fpidiv = SCU_CCUCON0.bits.FPIDIV;
|
||||
|
||||
if (pllstat.bits.VCOBYST)
|
||||
{
|
||||
/* prescaler mode */
|
||||
unsigned int k_div;
|
||||
|
||||
k_div = pllcon1.bits.K1DIV + 1;
|
||||
frequency = DEF_FRQ / k_div;
|
||||
}
|
||||
else if (pllstat.bits.FINDIS)
|
||||
{
|
||||
/* freerunning mode */
|
||||
unsigned int k_div;
|
||||
|
||||
k_div = pllcon1.bits.K2DIV + 1;
|
||||
frequency = VCOBASE_FREQ / k_div;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* normal mode */
|
||||
unsigned int k_div, n_div, p_div;
|
||||
|
||||
n_div = pllcon0.bits.NDIV + 1;
|
||||
p_div = pllcon0.bits.PDIV + 1;
|
||||
k_div = pllcon1.bits.K2DIV + 1;
|
||||
|
||||
frequency = DEF_FRQ * n_div / (k_div * p_div);
|
||||
}
|
||||
|
||||
frequency /= (fpidiv + 1);
|
||||
|
||||
return frequency;
|
||||
}
|
735
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/RTOSDemo/main.c
Normal file
735
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/RTOSDemo/main.c
Normal file
|
@ -0,0 +1,735 @@
|
|||
/*
|
||||
FreeRTOS V7.1.1 - Copyright (C) 2012 Real Time Engineers Ltd.
|
||||
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* FreeRTOS tutorial books are available in pdf and paperback. *
|
||||
* Complete, revised, and edited pdf reference manuals are also *
|
||||
* available. *
|
||||
* *
|
||||
* Purchasing FreeRTOS documentation will not only help you, by *
|
||||
* ensuring you get running as quickly as possible and with an *
|
||||
* in-depth knowledge of how to use FreeRTOS, it will also help *
|
||||
* the FreeRTOS project to continue with its mission of providing *
|
||||
* professional grade, cross platform, de facto standard solutions *
|
||||
* for microcontrollers - completely free of charge! *
|
||||
* *
|
||||
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
|
||||
* *
|
||||
* Thank you for using FreeRTOS, and thank you for your support! *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
|
||||
This file is part of the FreeRTOS distribution.
|
||||
|
||||
FreeRTOS is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License (version 2) as published by the
|
||||
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
|
||||
>>>NOTE<<< The modification to the GPL is included to allow you to
|
||||
distribute a combined work that includes FreeRTOS without being obliged to
|
||||
provide the source code for proprietary components outside of the FreeRTOS
|
||||
kernel. FreeRTOS is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
more details. You should have received a copy of the GNU General Public
|
||||
License and the FreeRTOS license exception along with FreeRTOS; if not it
|
||||
can be viewed here: http://www.freertos.org/a00114.html and also obtained
|
||||
by writing to Richard Barry, contact details for whom are available on the
|
||||
FreeRTOS WEB site.
|
||||
|
||||
1 tab == 4 spaces!
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* Having a problem? Start by reading the FAQ "My application does *
|
||||
* not run, what could be wrong? *
|
||||
* *
|
||||
* http://www.FreeRTOS.org/FAQHelp.html *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, training, latest information,
|
||||
license and contact details.
|
||||
|
||||
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
||||
including FreeRTOS+Trace - an indispensable productivity tool.
|
||||
|
||||
Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell
|
||||
the code with commercial support, indemnification, and middleware, under
|
||||
the OpenRTOS brand: http://www.OpenRTOS.com. High Integrity Systems also
|
||||
provide a safety engineered and independently SIL3 certified version under
|
||||
the SafeRTOS brand: http://www.SafeRTOS.com.
|
||||
*/
|
||||
|
||||
/******************************************************************************
|
||||
* >>>>>> NOTE: <<<<<<
|
||||
*
|
||||
* main() can be configured to create either a very simple LED flasher demo, or
|
||||
* a more comprehensive test/demo application.
|
||||
*
|
||||
* To create a very simple LED flasher example, set the
|
||||
* mainCREATE_SIMPLE_LED_FLASHER_DEMO_ONLY constant (defined below) to 1. When
|
||||
* this is done, only the standard demo flash tasks are created. The standard
|
||||
* demo flash example creates three tasks, each toggle an LED at a fixed but
|
||||
* different frequency.
|
||||
*
|
||||
* To create a more comprehensive test and demo application, set
|
||||
* mainCREATE_SIMPLE_LED_FLASHER_DEMO_ONLY to 0.
|
||||
*
|
||||
* Two build configurations are provided, one that executes from RAM and one
|
||||
* that executes from Flash. The RAM build uses size optimisation, the Flash
|
||||
* build has optimisation completely turned off. The documentation page for
|
||||
* this port on the FreeRTOS.org web site provides full information.
|
||||
******************************************************************************
|
||||
*
|
||||
* main() creates all the demo application tasks and 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 the 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 task period is initially set to five seconds.
|
||||
* Each time it executes, the check task checks that all the standard demo
|
||||
* tasks, and the register check tasks, are not only still executing, but are
|
||||
* executing without reporting any errors. If the check task discovers that a
|
||||
* task has either stalled, or reported an error, then it changes its own
|
||||
* execution period from the initial five seconds, to just 500ms. The check
|
||||
* task also toggles an LED each time it is called. This provides a visual
|
||||
* indication of the system status: If the LED toggles every five seconds,
|
||||
* then no issues have been discovered. If the LED toggles every 500ms, then
|
||||
* an issue has been discovered with at least one task.
|
||||
*
|
||||
* ***NOTE*** This demo uses the standard comtest tasks, which has special
|
||||
* hardware requirements as a loopback connector, or UART echo server are
|
||||
* required. See the documentation page for this demo on the FreeRTOS.org web
|
||||
* site for more information. Note that the comtest tasks were tested by
|
||||
* placing the UART into loopback mode directly in the serial initialisation
|
||||
* sequence, and as such, the baud rate used has not been verified as actually
|
||||
* being correct.
|
||||
*/
|
||||
|
||||
/* Standard includes. */
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* Scheduler includes. */
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
#include "croutine.h"
|
||||
|
||||
/* Demo application includes. */
|
||||
#include "partest.h"
|
||||
#include "flash.h"
|
||||
#include "integer.h"
|
||||
#include "PollQ.h"
|
||||
#include "comtest2.h"
|
||||
#include "semtest.h"
|
||||
#include "dynamic.h"
|
||||
#include "BlockQ.h"
|
||||
#include "blocktim.h"
|
||||
#include "countsem.h"
|
||||
#include "GenQTest.h"
|
||||
#include "recmutex.h"
|
||||
#include "serial.h"
|
||||
#include "death.h"
|
||||
#include "TimerDemo.h"
|
||||
#include "InterruptNestTest.h"
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* Constants for the ComTest tasks. */
|
||||
#define mainCOM_TEST_BAUD_RATE ( ( unsigned long ) 200000 )
|
||||
|
||||
#define mainCOM_TEST_LED ( 5 )
|
||||
|
||||
/* Priorities for the demo application tasks. */
|
||||
#define mainLED_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
||||
#define mainCOM_TEST_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||
#define mainQUEUE_POLL_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||
#define mainCHECK_TASK_PRIORITY ( tskIDLE_PRIORITY + 4 )
|
||||
#define mainSEM_TEST_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
||||
#define mainBLOCK_Q_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||
#define mainCREATOR_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 )
|
||||
|
||||
/* The rate at which the on board LED will toggle when there is/is not an
|
||||
error. */
|
||||
#define mainNO_ERROR_FLASH_PERIOD_MS ( ( portTickType ) 5000 / portTICK_RATE_MS )
|
||||
#define mainERROR_FLASH_PERIOD_MS ( ( portTickType ) 500 / portTICK_RATE_MS )
|
||||
#define mainON_BOARD_LED_BIT ( ( unsigned long ) 7 )
|
||||
|
||||
/* Constant used by the standard timer test functions. The timers created by
|
||||
the timer test functions will all have a period that is a multiple of this
|
||||
value. */
|
||||
#define mainTIMER_TEST_PERIOD ( 200 )
|
||||
|
||||
/* Set mainCREATE_SIMPLE_LED_FLASHER_DEMO_ONLY to 1 to create a simple demo.
|
||||
Set mainCREATE_SIMPLE_LED_FLASHER_DEMO_ONLY to 0 to create a much more
|
||||
comprehensive test application. See the comments at the top of this file, and
|
||||
the documentation page on the http://www.FreeRTOS.org web site for more
|
||||
information. */
|
||||
#define mainCREATE_SIMPLE_LED_FLASHER_DEMO_ONLY 0
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* Checks that all the demo application tasks are still executing without error
|
||||
* - as described at the top of the file.
|
||||
*/
|
||||
static long prvCheckOtherTasksAreStillRunning( void );
|
||||
|
||||
/*
|
||||
* The task that executes at the highest priority and calls
|
||||
* prvCheckOtherTasksAreStillRunning(). See the description at the top
|
||||
* of the file.
|
||||
*/
|
||||
static void prvCheckTask( void *pvParameters );
|
||||
|
||||
/*
|
||||
* Configure the processor ready to run this demo.
|
||||
*/
|
||||
static void prvSetupHardware( void );
|
||||
|
||||
/*
|
||||
* Writes to and checks the value of each register that is used in the context
|
||||
* of a task. See the comments at the top of this file.
|
||||
*/
|
||||
static void prvRegisterCheckTask1( void *pvParameters );
|
||||
static void prvRegisterCheckTask2( void *pvParameters );
|
||||
|
||||
/*
|
||||
* Specific check to see if the register test functions are still operating
|
||||
* correctly.
|
||||
*/
|
||||
static portBASE_TYPE prvAreRegTestTasksStillRunning( void );
|
||||
|
||||
/*
|
||||
* This file can be used to create either a simple LED flasher example, or a
|
||||
* comprehensive test/demo application - depending on the setting of the
|
||||
* mainCREATE_SIMPLE_LED_FLASHER_DEMO_ONLY constant defined above. If
|
||||
* mainCREATE_SIMPLE_LED_FLASHER_DEMO_ONLY is set to 1, then the following
|
||||
* function will create a lot of additional tasks and timers. If
|
||||
* mainCREATE_SIMPLE_LED_FLASHER_DEMO_ONLY is set to 0, then the following
|
||||
* function will do nothing.
|
||||
*/
|
||||
static void prvOptionallyCreateComprehensveTestApplication( void );
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* Used by the register test tasks to indicated liveness. */
|
||||
static unsigned long ulRegisterTest1Count = 0;
|
||||
static unsigned long ulRegisterTest2Count = 0;
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* Starts all the tasks, then starts the scheduler.
|
||||
*/
|
||||
int main( void )
|
||||
{
|
||||
/* Setup the hardware for use with the TriCore evaluation board. */
|
||||
prvSetupHardware();
|
||||
|
||||
/* Start standard demo/test application flash tasks. See the comments at
|
||||
the top of this file. The LED flash tasks are always created. The other
|
||||
tasks are only created if mainCREATE_SIMPLE_LED_FLASHER_DEMO_ONLY is set to
|
||||
0 (at the top of this file). See the comments at the top of this file for
|
||||
more information. */
|
||||
vStartLEDFlashTasks( mainLED_TASK_PRIORITY );
|
||||
|
||||
/* The following function will only create more tasks and timers if
|
||||
mainCREATE_SIMPLE_LED_FLASHER_DEMO_ONLY is set to 0 (at the top of this
|
||||
file). See the comments at the top of this file for more information. */
|
||||
prvOptionallyCreateComprehensveTestApplication();
|
||||
|
||||
/* Now all the tasks have been started - start the scheduler. */
|
||||
vTaskStartScheduler();
|
||||
|
||||
/* If all is well then the following line will never be reached. If
|
||||
execution does reach here, then it is highly probably that the heap size
|
||||
is too small for the idle and/or timer tasks to be created within
|
||||
vTaskStartScheduler(). */
|
||||
for( ;; );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvCheckTask( void *pvParameters )
|
||||
{
|
||||
portTickType xDelayPeriod = mainNO_ERROR_FLASH_PERIOD_MS;
|
||||
portTickType xLastExecutionTime;
|
||||
|
||||
/* 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. If an error is detected then the delay period
|
||||
is decreased from mainNO_ERROR_FLASH_PERIOD_MS to mainERROR_FLASH_PERIOD_MS so
|
||||
the on board LED flash rate will increase. NOTE: This task could easily
|
||||
be replaced by a software timer callback to remove the overhead of having
|
||||
an extra task. */
|
||||
|
||||
for( ;; )
|
||||
{
|
||||
/* Delay until it is time to execute again. */
|
||||
vTaskDelayUntil( &xLastExecutionTime, xDelayPeriod );
|
||||
|
||||
/* Check all the standard demo application tasks are executing without
|
||||
error. */
|
||||
if( prvCheckOtherTasksAreStillRunning() != pdPASS )
|
||||
{
|
||||
/* An error has been detected in one of the tasks - flash the LED
|
||||
at a higher frequency to give visible feedback that something has
|
||||
gone wrong (it might just be that the loop back connector required
|
||||
by the comtest tasks has not been fitted). */
|
||||
xDelayPeriod = mainERROR_FLASH_PERIOD_MS;
|
||||
}
|
||||
|
||||
/* The toggle rate of the LED depends on how long this task delays for.
|
||||
An error reduces the delay period and so increases the toggle rate. */
|
||||
vParTestToggleLED( mainON_BOARD_LED_BIT );
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static long prvCheckOtherTasksAreStillRunning( void )
|
||||
{
|
||||
long lReturn = pdPASS;
|
||||
unsigned long ulHighFrequencyTimerTaskIterations, ulExpectedIncFrequency_ms;
|
||||
|
||||
/* 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( xAreIntegerMathsTaskStillRunning() != pdTRUE )
|
||||
{
|
||||
lReturn = pdFAIL;
|
||||
}
|
||||
|
||||
if( xAreComTestTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
lReturn = pdFAIL;
|
||||
}
|
||||
|
||||
if( xAreDynamicPriorityTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
lReturn = pdFAIL;
|
||||
}
|
||||
|
||||
if( xAreBlockingQueuesStillRunning() != pdTRUE )
|
||||
{
|
||||
lReturn = pdFAIL;
|
||||
}
|
||||
|
||||
if ( xAreBlockTimeTestTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
lReturn = pdFAIL;
|
||||
}
|
||||
|
||||
if ( xAreGenericQueueTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
lReturn = pdFAIL;
|
||||
}
|
||||
|
||||
if ( xAreRecursiveMutexTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
lReturn = pdFAIL;
|
||||
}
|
||||
|
||||
if( prvAreRegTestTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
lReturn = pdFAIL;
|
||||
}
|
||||
|
||||
if( xIsCreateTaskStillRunning() != pdTRUE )
|
||||
{
|
||||
lReturn = pdFAIL;
|
||||
}
|
||||
|
||||
if( xAreTimerDemoTasksStillRunning( mainNO_ERROR_FLASH_PERIOD_MS ) != pdTRUE )
|
||||
{
|
||||
lReturn = pdFAIL;
|
||||
}
|
||||
|
||||
if( xArePollingQueuesStillRunning() != pdTRUE )
|
||||
{
|
||||
lReturn = pdFAIL;
|
||||
}
|
||||
|
||||
if( xAreSemaphoreTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
lReturn = pdFAIL;
|
||||
}
|
||||
|
||||
/* Obtain the number of times the task associated with the high frequency
|
||||
(interrupt nesting) timer test has increment since the check task last
|
||||
executed, and the frequency at which it is expected to execute in ms. */
|
||||
ulHighFrequencyTimerTaskIterations = ulInterruptNestingTestGetIterationCount( &ulExpectedIncFrequency_ms );
|
||||
if( ( ulHighFrequencyTimerTaskIterations < ( ( mainNO_ERROR_FLASH_PERIOD_MS / ulExpectedIncFrequency_ms ) - 1 ) )
|
||||
||
|
||||
( ulHighFrequencyTimerTaskIterations > ( ( mainNO_ERROR_FLASH_PERIOD_MS / ulExpectedIncFrequency_ms ) +5 ) )
|
||||
)
|
||||
{
|
||||
/* Would have expected the high frequency timer task to have
|
||||
incremented its execution count more times that reported. */
|
||||
lReturn = pdFAIL;
|
||||
}
|
||||
|
||||
return lReturn;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvSetupHardware( void )
|
||||
{
|
||||
extern void set_cpu_frequency(void);
|
||||
|
||||
/* Set-up the PLL. */
|
||||
set_cpu_frequency();
|
||||
|
||||
/* Initialise LED outputs. */
|
||||
vParTestInitialise();
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
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();
|
||||
for( ;; );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vApplicationTickHook( void )
|
||||
{
|
||||
#if mainCREATE_SIMPLE_LED_FLASHER_DEMO_ONLY != 1
|
||||
{
|
||||
/* vApplicationTickHook() will only be called if configUSE_TICK_HOOK is set
|
||||
to 1 in FreeRTOSConfig.h. It is a hook function that will get called during
|
||||
each FreeRTOS tick interrupt. Note that vApplicationTickHook() is called
|
||||
from an interrupt context. */
|
||||
|
||||
/* Call the periodic timer test, which tests the timer API functions that
|
||||
can be called from an ISR. */
|
||||
vTimerPeriodicISRTests();
|
||||
}
|
||||
#endif /* mainCREATE_SIMPLE_LED_FLASHER_DEMO_ONLY */
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
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. */
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static portBASE_TYPE prvAreRegTestTasksStillRunning( void )
|
||||
{
|
||||
static unsigned long ulPreviousRegisterTest1Count = 0;
|
||||
static unsigned long ulPreviousRegisterTest2Count = 0;
|
||||
portBASE_TYPE xReturn = pdPASS;
|
||||
|
||||
/* Check to see if the Counts have changed since the last check. */
|
||||
if( ulRegisterTest1Count == ulPreviousRegisterTest1Count )
|
||||
{
|
||||
xReturn = pdFAIL;
|
||||
}
|
||||
|
||||
if( ulRegisterTest2Count == ulPreviousRegisterTest2Count )
|
||||
{
|
||||
xReturn = pdFAIL;
|
||||
}
|
||||
|
||||
/* Remember the current count for the next time this function is called. */
|
||||
ulPreviousRegisterTest1Count = ulRegisterTest1Count;
|
||||
ulPreviousRegisterTest2Count = ulRegisterTest2Count;
|
||||
|
||||
return xReturn;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvOptionallyCreateComprehensveTestApplication( void )
|
||||
{
|
||||
#if mainCREATE_SIMPLE_LED_FLASHER_DEMO_ONLY == 0
|
||||
{
|
||||
vStartIntegerMathTasks( tskIDLE_PRIORITY );
|
||||
vStartDynamicPriorityTasks();
|
||||
vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );
|
||||
vCreateBlockTimeTasks();
|
||||
vStartCountingSemaphoreTasks();
|
||||
vStartGenericQueueTasks( tskIDLE_PRIORITY );
|
||||
vStartRecursiveMutexTasks();
|
||||
vAltStartComTestTasks( mainCOM_TEST_PRIORITY, mainCOM_TEST_BAUD_RATE, mainCOM_TEST_LED );
|
||||
vSetupInterruptNestingTest();
|
||||
vStartTimerDemoTask( mainTIMER_TEST_PERIOD );
|
||||
vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );
|
||||
vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );
|
||||
|
||||
/* Create the register test tasks, as described at the top of this file. */
|
||||
xTaskCreate( prvRegisterCheckTask1, ( signed char * ) "Reg 1", configMINIMAL_STACK_SIZE, &ulRegisterTest1Count, tskIDLE_PRIORITY, NULL );
|
||||
xTaskCreate( prvRegisterCheckTask2, ( signed char * ) "Reg 2", configMINIMAL_STACK_SIZE, &ulRegisterTest2Count, tskIDLE_PRIORITY, NULL );
|
||||
|
||||
/* Start the check task - which is defined in this file. */
|
||||
xTaskCreate( prvCheckTask, ( signed char * ) "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );
|
||||
|
||||
/* This task has to be created last as it keeps account of the number of tasks
|
||||
it expects to see running. */
|
||||
vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );
|
||||
}
|
||||
#else /* mainCREATE_SIMPLE_LED_FLASHER_DEMO_ONLY */
|
||||
{
|
||||
/* Just to prevent compiler warnings when the configuration options are
|
||||
set such that these static functions are not used. */
|
||||
( void ) prvCheckTask;
|
||||
( void ) prvRegisterCheckTask1;
|
||||
( void ) prvRegisterCheckTask2;
|
||||
}
|
||||
#endif /* mainCREATE_SIMPLE_LED_FLASHER_DEMO_ONLY */
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvRegisterCheckTask1( void *pvParameters )
|
||||
{
|
||||
/* Make space on the stack for the parameter and a counter. */
|
||||
__asm volatile( " sub.a %sp, 4 \n"
|
||||
" st.a [%sp], %a4 \n"
|
||||
" mov %d15, 0 \n"
|
||||
" st.w [%sp]4, %d15 \n" );
|
||||
|
||||
/* Change all of the Context sensitive registers (except SP and RA). */
|
||||
__asm volatile(
|
||||
" mov %d0, 0 \n"
|
||||
" mov %d1, 1 \n"
|
||||
" mov %d2, 2 \n"
|
||||
" mov %d3, 3 \n"
|
||||
" mov %d4, 4 \n"
|
||||
" mov %d5, 5 \n"
|
||||
" mov %d6, 6 \n"
|
||||
" mov %d7, 7 \n"
|
||||
" mov %d8, 8 \n"
|
||||
" mov %d9, 9 \n"
|
||||
" mov %d10, 10 \n"
|
||||
" mov %d11, 11 \n"
|
||||
" mov %d12, 12 \n"
|
||||
" mov %d13, 13 \n"
|
||||
" mov %d14, 14 \n"
|
||||
" mov %d15, 15 \n"
|
||||
" mov.a %a2, 2 \n"
|
||||
" mov.a %a3, 3 \n"
|
||||
" mov.a %a4, 4 \n"
|
||||
" mov.a %a5, 5 \n"
|
||||
" mov.a %a6, 6 \n"
|
||||
" mov.a %a7, 7 \n"
|
||||
" mov.a %a12, 12 \n"
|
||||
" mov.a %a13, 13 \n"
|
||||
" mov.a %a14, 14 \n" );
|
||||
|
||||
/* Check the values of the registers. */
|
||||
__asm( " _task1_loop: \n" \
|
||||
" eq %d1, %d0, 0 \n" \
|
||||
" jne %d1, 1, _task1_error_loop \n" \
|
||||
" eq %d1, %d1, 1 \n" \
|
||||
" jne %d1, 1, _task1_error_loop \n" \
|
||||
" eq %d1, %d2, 2 \n" \
|
||||
" jne %d1, 1, _task1_error_loop \n" \
|
||||
" eq %d1, %d3, 3 \n" \
|
||||
" jne %d1, 1, _task1_error_loop \n" \
|
||||
" eq %d1, %d4, 4 \n" \
|
||||
" jne %d1, 1, _task1_error_loop \n" \
|
||||
" eq %d1, %d5, 5 \n" \
|
||||
" jne %d1, 1, _task1_error_loop \n" \
|
||||
" eq %d1, %d6, 6 \n" \
|
||||
" jne %d1, 1, _task1_error_loop \n" \
|
||||
" eq %d1, %d7, 7 \n" \
|
||||
" jne %d1, 1, _task1_error_loop \n" \
|
||||
" eq %d1, %d8, 8 \n" \
|
||||
" jne %d1, 1, _task1_error_loop \n" \
|
||||
" eq %d1, %d9, 9 \n" \
|
||||
" jne %d1, 1, _task1_error_loop \n" \
|
||||
" eq %d1, %d10, 10 \n" \
|
||||
" jne %d1, 1, _task1_error_loop \n" \
|
||||
" eq %d1, %d11, 11 \n" \
|
||||
" jne %d1, 1, _task1_error_loop \n" \
|
||||
" eq %d1, %d12, 12 \n" \
|
||||
" jne %d1, 1, _task1_error_loop \n" \
|
||||
" eq %d1, %d13, 13 \n" \
|
||||
" jne %d1, 1, _task1_error_loop \n" \
|
||||
" eq %d1, %d14, 14 \n" \
|
||||
" jne %d1, 1, _task1_error_loop \n" \
|
||||
" eq %d1, %d15, 15 \n" \
|
||||
" jne %d1, 1, _task1_error_loop \n" \
|
||||
" mov.a %a15, 2 \n" \
|
||||
" jne.a %a15, %a2, _task1_error_loop \n" \
|
||||
" mov.a %a15, 3 \n" \
|
||||
" jne.a %a15, %a3, _task1_error_loop \n" \
|
||||
" mov.a %a15, 4 \n" \
|
||||
" jne.a %a15, %a4, _task1_error_loop \n" \
|
||||
" mov.a %a15, 5 \n" \
|
||||
" jne.a %a15, %a5, _task1_error_loop \n" \
|
||||
" mov.a %a15, 6 \n" \
|
||||
" jne.a %a15, %a6, _task1_error_loop \n" \
|
||||
" mov.a %a15, 7 \n" \
|
||||
" jne.a %a15, %a7, _task1_error_loop \n" \
|
||||
" mov.a %a15, 12 \n" \
|
||||
" jne.a %a15, %a12, _task1_error_loop \n" \
|
||||
" mov.a %a15, 13 \n" \
|
||||
" jne.a %a15, %a13, _task1_error_loop \n" \
|
||||
" mov.a %a15, 14 \n" \
|
||||
" jne.a %a15, %a14, _task1_error_loop \n" \
|
||||
" j _task1_skip_error_loop \n" \
|
||||
"_task1_error_loop: \n" /* Hitting this error loop will stop the counter incrementing, allowing the check task to recognise an error. */ \
|
||||
" debug \n" \
|
||||
" j _task1_error_loop \n" \
|
||||
"_task1_skip_error_loop: \n" );
|
||||
|
||||
/* Load the parameter address from the stack and modify the value. */
|
||||
__asm volatile( \
|
||||
" ld.w %d1, [%sp]4 \n" \
|
||||
" add %d1, 1 \n" \
|
||||
" st.w [%sp]4, %d1 \n" \
|
||||
" ld.a %a15, [%sp] \n" \
|
||||
" st.w [%a15], %d1 \n" \
|
||||
" j _task1_loop \n" );
|
||||
|
||||
/* The parameter is used but in the assembly. */
|
||||
(void)pvParameters;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvRegisterCheckTask2( void *pvParameters )
|
||||
{
|
||||
/* Make space on the stack for the parameter and a counter. */
|
||||
__asm volatile( " sub.a %sp, 4 \n" \
|
||||
" st.a [%sp], %a4 \n" \
|
||||
" mov %d15, 0 \n" \
|
||||
" st.w [%sp]4, %d15 \n" );
|
||||
|
||||
/* Change all of the Context sensitive registers (except SP and RA). */
|
||||
__asm volatile( " mov %d0, 7 \n" \
|
||||
" mov %d1, 1 \n" \
|
||||
" mov %d2, 5 \n" \
|
||||
" mov %d3, 4 \n" \
|
||||
" mov %d4, 3 \n" \
|
||||
" mov %d5, 2 \n" \
|
||||
" mov %d6, 1 \n" \
|
||||
" mov %d7, 0 \n" \
|
||||
" mov %d8, 15 \n" \
|
||||
" mov %d9, 14 \n" \
|
||||
" mov %d10, 13 \n" \
|
||||
" mov %d11, 12 \n" \
|
||||
" mov %d12, 11 \n" \
|
||||
" mov %d13, 10 \n" \
|
||||
" mov %d14, 9 \n" \
|
||||
" mov %d15, 8 \n" \
|
||||
" mov.a %a2, 14 \n" \
|
||||
" mov.a %a3, 13 \n" \
|
||||
" mov.a %a4, 12 \n" \
|
||||
" mov.a %a5, 7 \n" \
|
||||
" mov.a %a6, 6 \n" \
|
||||
" mov.a %a7, 5 \n" \
|
||||
" mov.a %a12, 4 \n" \
|
||||
" mov.a %a13, 3 \n" \
|
||||
" mov.a %a14, 2 \n" );
|
||||
|
||||
/* Check the values of the registers. */
|
||||
__asm volatile( " _task2_loop: \n" \
|
||||
" syscall 0 \n" \
|
||||
" eq %d1, %d0, 7 \n" \
|
||||
" jne %d1, 1, _task2_error_loop \n" \
|
||||
" eq %d1, %d1, 1 \n" \
|
||||
" jne %d1, 1, _task2_error_loop \n" \
|
||||
" eq %d1, %d2, 5 \n" \
|
||||
" jne %d1, 1, _task2_error_loop \n" \
|
||||
" eq %d1, %d3, 4 \n" \
|
||||
" jne %d1, 1, _task2_error_loop \n" \
|
||||
" eq %d1, %d4, 3 \n" \
|
||||
" jne %d1, 1, _task2_error_loop \n" \
|
||||
" eq %d1, %d5, 2 \n" \
|
||||
" jne %d1, 1, _task2_error_loop \n" \
|
||||
" eq %d1, %d6, 1 \n" \
|
||||
" jne %d1, 1, _task2_error_loop \n" \
|
||||
" eq %d1, %d7, 0 \n" \
|
||||
" jne %d1, 1, _task2_error_loop \n" \
|
||||
" eq %d1, %d8, 15 \n" \
|
||||
" jne %d1, 1, _task2_error_loop \n" \
|
||||
" eq %d1, %d9, 14 \n" \
|
||||
" jne %d1, 1, _task2_error_loop \n" \
|
||||
" eq %d1, %d10, 13 \n" \
|
||||
" jne %d1, 1, _task2_error_loop \n" \
|
||||
" eq %d1, %d11, 12 \n" \
|
||||
" jne %d1, 1, _task2_error_loop \n" \
|
||||
" eq %d1, %d12, 11 \n" \
|
||||
" jne %d1, 1, _task2_error_loop \n" \
|
||||
" eq %d1, %d13, 10 \n" \
|
||||
" jne %d1, 1, _task2_error_loop \n" \
|
||||
" eq %d1, %d14, 9 \n" \
|
||||
" jne %d1, 1, _task2_error_loop \n" \
|
||||
" eq %d1, %d15, 8 \n" \
|
||||
" jne %d1, 1, _task2_error_loop \n" \
|
||||
" mov.a %a15, 14 \n" \
|
||||
" jne.a %a15, %a2, _task2_error_loop \n" \
|
||||
" mov.a %a15, 13 \n" \
|
||||
" jne.a %a15, %a3, _task2_error_loop \n" \
|
||||
" mov.a %a15, 12 \n" \
|
||||
" jne.a %a15, %a4, _task2_error_loop \n" \
|
||||
" mov.a %a15, 7 \n" \
|
||||
" jne.a %a15, %a5, _task2_error_loop \n" \
|
||||
" mov.a %a15, 6 \n" \
|
||||
" jne.a %a15, %a6, _task2_error_loop \n" \
|
||||
" mov.a %a15, 5 \n" \
|
||||
" jne.a %a15, %a7, _task2_error_loop \n" \
|
||||
" mov.a %a15, 4 \n" \
|
||||
" jne.a %a15, %a12, _task2_error_loop \n" \
|
||||
" mov.a %a15, 3 \n" \
|
||||
" jne.a %a15, %a13, _task2_error_loop \n" \
|
||||
" mov.a %a15, 2 \n" \
|
||||
" jne.a %a15, %a14, _task2_error_loop \n" \
|
||||
" j _task2_skip_error_loop \n" \
|
||||
"_task2_error_loop: \n" /* Hitting this error loop will stop the counter incrementing, allowing the check task to recognise an error. */ \
|
||||
" debug \n" \
|
||||
" j _task2_error_loop \n" \
|
||||
"_task2_skip_error_loop: \n" );
|
||||
|
||||
/* Load the parameter address from the stack and modify the value. */
|
||||
__asm volatile( " ld.w %d1, [%sp]4 \n" \
|
||||
" add %d1, %d1, 1 \n" \
|
||||
" st.w [%sp]4, %d1 \n" \
|
||||
" ld.a %a15, [%sp] \n" \
|
||||
" st.w [%a15], %d1 \n" \
|
||||
" j _task2_loop \n" );
|
||||
|
||||
/* The parameter is used but in the assembly. */
|
||||
(void)pvParameters;
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
283
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/RTOSDemo/serial.c
Normal file
283
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/RTOSDemo/serial.c
Normal file
|
@ -0,0 +1,283 @@
|
|||
/*
|
||||
FreeRTOS V7.1.1 - Copyright (C) 2012 Real Time Engineers Ltd.
|
||||
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* FreeRTOS tutorial books are available in pdf and paperback. *
|
||||
* Complete, revised, and edited pdf reference manuals are also *
|
||||
* available. *
|
||||
* *
|
||||
* Purchasing FreeRTOS documentation will not only help you, by *
|
||||
* ensuring you get running as quickly as possible and with an *
|
||||
* in-depth knowledge of how to use FreeRTOS, it will also help *
|
||||
* the FreeRTOS project to continue with its mission of providing *
|
||||
* professional grade, cross platform, de facto standard solutions *
|
||||
* for microcontrollers - completely free of charge! *
|
||||
* *
|
||||
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
|
||||
* *
|
||||
* Thank you for using FreeRTOS, and thank you for your support! *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
|
||||
This file is part of the FreeRTOS distribution.
|
||||
|
||||
FreeRTOS is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License (version 2) as published by the
|
||||
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
|
||||
>>>NOTE<<< The modification to the GPL is included to allow you to
|
||||
distribute a combined work that includes FreeRTOS without being obliged to
|
||||
provide the source code for proprietary components outside of the FreeRTOS
|
||||
kernel. FreeRTOS is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
more details. You should have received a copy of the GNU General Public
|
||||
License and the FreeRTOS license exception along with FreeRTOS; if not it
|
||||
can be viewed here: http://www.freertos.org/a00114.html and also obtained
|
||||
by writing to Richard Barry, contact details for whom are available on the
|
||||
FreeRTOS WEB site.
|
||||
|
||||
1 tab == 4 spaces!
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* Having a problem? Start by reading the FAQ "My application does *
|
||||
* not run, what could be wrong? *
|
||||
* *
|
||||
* http://www.FreeRTOS.org/FAQHelp.html *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, training, latest information,
|
||||
license and contact details.
|
||||
|
||||
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
||||
including FreeRTOS+Trace - an indispensable productivity tool.
|
||||
|
||||
Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell
|
||||
the code with commercial support, indemnification, and middleware, under
|
||||
the OpenRTOS brand: http://www.OpenRTOS.com. High Integrity Systems also
|
||||
provide a safety engineered and independently SIL3 certified version under
|
||||
the SafeRTOS brand: http://www.SafeRTOS.com.
|
||||
*/
|
||||
|
||||
/* Hardware specific includes. */
|
||||
#include <tc1782.h>
|
||||
#include <machine/intrinsics.h>
|
||||
#include <machine/cint.h>
|
||||
#include <machine/wdtcon.h>
|
||||
|
||||
/* Scheduler Includes. */
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
#include "queue.h"
|
||||
|
||||
/* Demo Includes. */
|
||||
#include "serial.h"
|
||||
|
||||
/*****************************************************************************
|
||||
* Please note!
|
||||
*
|
||||
* This file is here to provide a means of generating interrupts to test the
|
||||
* FreeRTOS tricore port. First - it configures the UART into loopback mode,
|
||||
* and has only been used in loopback mode. Therefore, the baud rate
|
||||
* calculation used has never been verified for correctness. Second -
|
||||
* characters are passed into and out of the interrupt service routines using
|
||||
* character queues. This provides a good test of the interrupt interaction,
|
||||
* context switching mechanism, and kernel loading, it is however highly
|
||||
* inefficient if the UART is being used to handle even moderate amounts of
|
||||
* data throughput.
|
||||
*/
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* See if the Serial Transmit Interrupt is currently activated, meaning that
|
||||
* the interrupt is working through the back log of bytes that it needs to
|
||||
* send. If the ISR is not enabled, then it will be triggered to send the first
|
||||
* byte, and it will be automatically re-triggered when that byte has been
|
||||
* sent. When the queue is exhausted, the ISR disables itself.
|
||||
*/
|
||||
static void prvCheckTransmit( void );
|
||||
|
||||
/*
|
||||
* The transmit and receive interrupt handlers.
|
||||
*/
|
||||
static void prvTxBufferInterruptHandler( int iArg ) __attribute__( ( longcall ) );
|
||||
static void prvRxInterruptHandler( int iArg )__attribute__( ( longcall ) );
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* Queues used to pass bytes into and out of the interrupt handlers.
|
||||
NOTE: This is not intended to be an example of an efficient interrupt handler,
|
||||
but instead to load the kernel and interrupt mechanisms in order to test the
|
||||
FreeRTOS port. Using a FIFO, DMA, circular buffer, etc. architecture will
|
||||
to improve efficiency. */
|
||||
static xQueueHandle xSerialTransmitQueue = NULL;
|
||||
static xQueueHandle xSerialReceiveQueue = NULL;
|
||||
static volatile portBASE_TYPE xTransmitStatus = 0UL;
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
xComPortHandle xSerialPortInitMinimal( unsigned long ulWantedBaud, unsigned portBASE_TYPE uxQueueLength )
|
||||
{
|
||||
unsigned long ulReloadValue = 0UL;
|
||||
|
||||
ulReloadValue = ( configPERIPHERAL_CLOCK_HZ / ( 48UL * ulWantedBaud ) ) - 1UL;
|
||||
|
||||
if( NULL == xSerialTransmitQueue )
|
||||
{
|
||||
xSerialTransmitQueue = xQueueCreate( uxQueueLength, sizeof( char ) );
|
||||
xSerialReceiveQueue = xQueueCreate( uxQueueLength, sizeof( char ) );
|
||||
}
|
||||
|
||||
/* Enable ASC0 Module. */
|
||||
unlock_wdtcon();
|
||||
{
|
||||
while ( 0 != ( WDT_CON0.reg & 0x1UL ) );
|
||||
ASC0_CLC.reg = 0x0200UL;
|
||||
}
|
||||
lock_wdtcon();
|
||||
|
||||
/* Disable the Operation. */
|
||||
ASC0_CON.reg &= 0xFFFF7FFF;
|
||||
|
||||
/* Set-up the GPIO Ports. */
|
||||
P3_IOCR0.reg = 0x00009000; /* 3.0 ASC In, 3.1 Alt ASC Out */
|
||||
|
||||
/* Write the baud rate. */
|
||||
ASC0_BG.reg = ulReloadValue;
|
||||
|
||||
/* Reconfigure and re-initialise the Operation. */
|
||||
ASC0_PISEL.reg = 0UL;
|
||||
ASC0_CON.reg = 0UL;
|
||||
ASC0_CON.bits.M = 0x01; /* 8bit async. */
|
||||
ASC0_CON.bits.REN = 0x01; /* Receiver enabled. */
|
||||
ASC0_CON.bits.FDE = 0x01; /* Fractional divider enabled. */
|
||||
ASC0_CON.bits.BRS = 0x01; /* Divide by three. */
|
||||
ASC0_CON.bits.LB = 0x01; /* Loopback enabled. */
|
||||
ASC0_CON.bits.R = 0x01; /* Enable the baud rate generator. */
|
||||
|
||||
/* Install the Tx interrupt. */
|
||||
if( 0 != _install_int_handler( configINTERRUPT_PRIORITY_TX, prvTxBufferInterruptHandler, 0 ) )
|
||||
{
|
||||
ASC0_TBSRC.reg = configINTERRUPT_PRIORITY_TX | 0x5000UL;
|
||||
xTransmitStatus = 0UL;
|
||||
}
|
||||
|
||||
/* Install the Rx interrupt. */
|
||||
if( 0 != _install_int_handler( configINTERRUPT_PRIORITY_RX, prvRxInterruptHandler, 0 ) )
|
||||
{
|
||||
ASC0_RSRC.reg = configINTERRUPT_PRIORITY_RX | 0x5000UL;
|
||||
}
|
||||
|
||||
/* COM Handle is never used by demo code. */
|
||||
return (xComPortHandle) pdPASS;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
void vSerialPutString( xComPortHandle pxPort, const signed char * const pcString, unsigned short usStringLength )
|
||||
{
|
||||
unsigned short usChar;
|
||||
|
||||
for( usChar = 0; usChar < usStringLength; usChar++ )
|
||||
{
|
||||
xSerialPutChar( pxPort, pcString[ usChar ], portMAX_DELAY );
|
||||
}
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
signed portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed char *pcRxedChar, portTickType xBlockTime )
|
||||
{
|
||||
/* Just to remove compiler warnings about unused parameters. */
|
||||
( void )pxPort;
|
||||
|
||||
return xQueueReceive( xSerialReceiveQueue, pcRxedChar, xBlockTime );
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
signed portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, signed char cOutChar, portTickType xBlockTime )
|
||||
{
|
||||
portBASE_TYPE xReturn = pdPASS;
|
||||
|
||||
/* Just to remove compiler warnings about unused parameters. */
|
||||
( void )pxPort;
|
||||
|
||||
/* Send the character to the interrupt handler. */
|
||||
xReturn = xQueueSend( xSerialTransmitQueue, &cOutChar, xBlockTime );
|
||||
|
||||
/* Start the transmission of bytes if necessary. */
|
||||
prvCheckTransmit();
|
||||
|
||||
return xReturn;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
static void prvTxBufferInterruptHandler( int iArg )
|
||||
{
|
||||
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
|
||||
unsigned char ucTx;
|
||||
|
||||
/* Just to remove compiler warnings about unused parameters. */
|
||||
( void ) iArg;
|
||||
|
||||
/* ACK. */
|
||||
ASC0_TBSRC.reg |= 0x4000UL;
|
||||
xTransmitStatus = 1UL;
|
||||
|
||||
/* TBUF Can be refilled. */
|
||||
if( pdPASS == xQueueReceiveFromISR( xSerialTransmitQueue, &ucTx, &xHigherPriorityTaskWoken ) )
|
||||
{
|
||||
ASC0_TBUF.reg = ucTx;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Failed to get a character out of the Queue. No longer busy. */
|
||||
xTransmitStatus = 0UL;
|
||||
}
|
||||
|
||||
/* Finally end ISR and switch Task if necessary. */
|
||||
portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
static void prvRxInterruptHandler( int iArg )
|
||||
{
|
||||
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
|
||||
unsigned char ucRx;
|
||||
|
||||
/* Just to remove compiler warnings about unused parameters. */
|
||||
( void ) iArg;
|
||||
|
||||
/* Grab the character as early as possible. */
|
||||
ucRx = ( unsigned char ) ASC0_RBUF.reg;
|
||||
|
||||
/* ACK. */
|
||||
ASC0_RSRC.reg |= 0x4000UL;
|
||||
|
||||
/* Frame available in RBUF. */
|
||||
if( pdPASS != xQueueSendFromISR( xSerialReceiveQueue, &ucRx, &xHigherPriorityTaskWoken ) )
|
||||
{
|
||||
/* Error handling code can go here. */
|
||||
}
|
||||
|
||||
/* Finally end ISR and switch Task if necessary. */
|
||||
portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
void prvCheckTransmit( void )
|
||||
{
|
||||
/* Check to see if the interrupt handler is working its way through the
|
||||
buffer. */
|
||||
if( 0 == xTransmitStatus )
|
||||
{
|
||||
/* Not currently operational so kick off the first byte. */
|
||||
ASC0_TBSRC.reg |= 0x8000UL;
|
||||
}
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
658
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/ld/iRAM.ld
Normal file
658
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/ld/iRAM.ld
Normal file
|
@ -0,0 +1,658 @@
|
|||
|
||||
/*
|
||||
* Name: iRAM.ld
|
||||
*
|
||||
* Generated Linker Description File
|
||||
* Copyright (C) 2010 HighTec EDV-Systeme GmbH.
|
||||
* (!Do not edit outsite of the protection areas!)
|
||||
*
|
||||
* Description:
|
||||
* internal RAM configuration
|
||||
*/
|
||||
|
||||
/*
|
||||
* Define Entrypoint of Executable
|
||||
*/
|
||||
ENTRY(_start)
|
||||
|
||||
/*
|
||||
* Global
|
||||
*/
|
||||
/*Program Flash Memory (PFLASH)*/
|
||||
__PMU_PFLASH_BEGIN = 0x80000000;
|
||||
__PMU_PFLASH_SIZE = 2560K;
|
||||
/*Data Flash Memory (DFLASH0)*/
|
||||
__PMU_DFLASH0_BEGIN = 0xAFE00000;
|
||||
__PMU_DFLASH0_SIZE = 64K;
|
||||
/*Data Flash Memory (DFLASH1)*/
|
||||
__PMU_DFLASH1_BEGIN = 0xAFE10000;
|
||||
__PMU_DFLASH1_SIZE = 64K;
|
||||
/*Boot ROM (BROM)*/
|
||||
__BROM_BEGIN = 0xAFFFC000;
|
||||
__BROM_SIZE = 16K;
|
||||
/*Scratch-Pad RAM (SPRAM)*/
|
||||
__PMI_SPRAM_BEGIN = 0xC0000000;
|
||||
__PMI_SPRAM_SIZE = 40K;
|
||||
/*Local Data RAM (LDRAM)*/
|
||||
__DMI_LDRAM_BEGIN = 0xD0000000;
|
||||
__DMI_LDRAM_SIZE = 128K;
|
||||
/*PCP Code Memory (CMEM)*/
|
||||
__PCP_CMEM_BEGIN = 0xF0060000;
|
||||
__PCP_CMEM_SIZE = 32K;
|
||||
/*PCP Data Memory (PRAM)*/
|
||||
__PCP_PRAM_BEGIN = 0xF0050000;
|
||||
__PCP_PRAM_SIZE = 16K;
|
||||
|
||||
__ISTACK_SIZE = DEFINED (__ISTACK_SIZE) ? __ISTACK_SIZE : 256;
|
||||
__USTACK_SIZE = DEFINED (__USTACK_SIZE) ? __USTACK_SIZE : 1K;
|
||||
__HEAP_SIZE = DEFINED (__HEAP_SIZE) ? __HEAP_SIZE : 4K ;
|
||||
__CSA_SIZE = DEFINED (__CSA_SIZE) ? __CSA_SIZE : 16K ;
|
||||
|
||||
/**
|
||||
* User defined global region
|
||||
*/
|
||||
/*PROTECTED REGION ID(Protection:iRAM-Global) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
/*
|
||||
* internal RAM configuration
|
||||
*/
|
||||
MEMORY
|
||||
{
|
||||
PMU_PFLASH (rx!p): org = 0x80000000, len = 2560K /*Program Flash Memory (PFLASH)*/
|
||||
PMU_DFLASH0 (r!xp): org = 0xAFE00000, len = 64K /*Data Flash Memory (DFLASH0)*/
|
||||
PMU_DFLASH1 (r!xp): org = 0xAFE10000, len = 64K /*Data Flash Memory (DFLASH1)*/
|
||||
BROM (rx!p): org = 0xAFFFC000, len = 16K /*Boot ROM (BROM)*/
|
||||
PMI_SPRAM (wx!p): org = 0xC0000000, len = 40K /*Scratch-Pad RAM (SPRAM)*/
|
||||
DMI_LDRAM (w!xp): org = 0xD0000000, len = 128K /*Local Data RAM (LDRAM)*/
|
||||
PCP_CMEM (rxp): org = 0xF0060000, len = 32K /*PCP Code Memory (CMEM)*/
|
||||
PCP_PRAM (wp!x): org = 0xF0050000, len = 16K /*PCP Data Memory (PRAM)*/
|
||||
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
/*Code-Sections*/
|
||||
|
||||
/*
|
||||
* Startup code for TriCore
|
||||
*/
|
||||
.startup_code :
|
||||
{
|
||||
PROVIDE(__startup_code_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .startup_code.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.startup_code) /*Startup code for TriCore*/
|
||||
*(.startup_code*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .startup_code) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__startup_code_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMI_SPRAM /* PMI_SPRAM: Scratch-Pad RAM (SPRAM) */
|
||||
|
||||
/*
|
||||
* Code section
|
||||
*/
|
||||
.text :
|
||||
{
|
||||
PROVIDE(__text_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .text.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.text) /*Code section*/
|
||||
*(.text*)
|
||||
*(.gnu.linkonce.t.*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .text) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__text_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMI_SPRAM /* PMI_SPRAM: Scratch-Pad RAM (SPRAM) */
|
||||
|
||||
/*
|
||||
* Code executed before calling main
|
||||
*/
|
||||
.init :
|
||||
{
|
||||
PROVIDE(__init_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .init.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
KEEP(*(.init)) /*Code executed before calling main*/
|
||||
KEEP(*(.init*))
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .init) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__init_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMI_SPRAM /* PMI_SPRAM: Scratch-Pad RAM (SPRAM) */
|
||||
|
||||
/*
|
||||
* Code executed before exiting program
|
||||
*/
|
||||
.fini :
|
||||
{
|
||||
PROVIDE(__fini_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .fini.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
KEEP(*(.fini)) /*Code executed before exiting program*/
|
||||
KEEP(*(.fini*))
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .fini) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__fini_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMI_SPRAM /* PMI_SPRAM: Scratch-Pad RAM (SPRAM) */
|
||||
|
||||
/*
|
||||
* Section for trap table
|
||||
*/
|
||||
.traptab :
|
||||
{
|
||||
PROVIDE(__traptab_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .traptab.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.traptab) /*Section for trap table*/
|
||||
*(.traptab*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .traptab) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__traptab_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMI_SPRAM /* PMI_SPRAM: Scratch-Pad RAM (SPRAM) */
|
||||
|
||||
/*
|
||||
* Section for interrupt table
|
||||
*/
|
||||
.inttab :
|
||||
{
|
||||
PROVIDE(__inttab_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .inttab.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.inttab) /*Section for interrupt table*/
|
||||
*(.inttab*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .inttab) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__inttab_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMI_SPRAM /* PMI_SPRAM: Scratch-Pad RAM (SPRAM) */
|
||||
|
||||
/*
|
||||
* Exception handling frame for C++ exceptions
|
||||
*/
|
||||
.eh_frame :
|
||||
{
|
||||
PROVIDE(__eh_frame_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .eh_frame.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.eh_frame) /*Exception handling frame for C++ exceptions*/
|
||||
*(.eh_frame*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .eh_frame) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__eh_frame_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMI_SPRAM /* PMI_SPRAM: Scratch-Pad RAM (SPRAM) */
|
||||
|
||||
/*
|
||||
* Section for constructors
|
||||
*/
|
||||
.ctors :
|
||||
{
|
||||
PROVIDE(__ctors_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .ctors.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
KEEP(*(.ctors)) /*Section for constructors*/
|
||||
KEEP(*(.ctors*))
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .ctors) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__ctors_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMI_SPRAM /* PMI_SPRAM: Scratch-Pad RAM (SPRAM) */
|
||||
|
||||
/*
|
||||
* Section for destructors
|
||||
*/
|
||||
.dtors :
|
||||
{
|
||||
PROVIDE(__dtors_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .dtors.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
KEEP(*(.dtors)) /*Section for destructors*/
|
||||
KEEP(*(.dtors*))
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .dtors) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__dtors_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMI_SPRAM /* PMI_SPRAM: Scratch-Pad RAM (SPRAM) */
|
||||
|
||||
|
||||
/*Absolute Data-Sections*/
|
||||
|
||||
/*
|
||||
* Initialised data addressed as absolute
|
||||
*/
|
||||
.zdata :
|
||||
{
|
||||
PROVIDE(__zdata_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .zdata.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.zdata) /*Initialised data addressed as absolute*/
|
||||
*(.zdata*)
|
||||
*(.gnu.linkonce.z.*)
|
||||
*(.gnu.linkonce.zr.*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .zdata) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__zdata_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > DMI_LDRAM AT > PMI_SPRAM /* DMI_LDRAM: Local Data RAM (LDRAM) */ /* PMI_SPRAM: Scratch-Pad RAM (SPRAM) */
|
||||
|
||||
/*
|
||||
* Not initialised data addressed as absolute
|
||||
*/
|
||||
.zbss (NOLOAD) :
|
||||
{
|
||||
PROVIDE(__zbss_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .zbss.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.zbss) /*Not Initialised data addressed as absolute*/
|
||||
*(.zbss*)
|
||||
*(.gnu.linkonce.zb.*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .zbss) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__zbss_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > DMI_LDRAM /* DMI_LDRAM: Local Data RAM (LDRAM) */
|
||||
|
||||
/*
|
||||
* Not initialised bit data
|
||||
*/
|
||||
.bbss (NOLOAD) :
|
||||
{
|
||||
PROVIDE(__bbss_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .bbss.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.bbss) /*Not initialised bit data*/
|
||||
*(.bbss*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .bbss) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__bbss_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > DMI_LDRAM /* DMI_LDRAM: Local Data RAM (LDRAM) */
|
||||
|
||||
/*
|
||||
* Bit variables
|
||||
*/
|
||||
.bdata :
|
||||
{
|
||||
PROVIDE(__bdata_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .bdata.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.bdata) /*Bit variables*/
|
||||
*(.bdata*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .bdata) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__bdata_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > DMI_LDRAM /* DMI_LDRAM: Local Data RAM (LDRAM) */
|
||||
|
||||
|
||||
/*Small Data-Sections*/
|
||||
|
||||
/*
|
||||
* Storage of write-protected data addressed as small
|
||||
*/
|
||||
.sdata2 :
|
||||
{
|
||||
PROVIDE(__sdata2_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .sdata2.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.sdata.rodata) /*Storage of write-protected data addressed as small*/
|
||||
*(.sdata.rodata*)
|
||||
*(.gnu.linkonce.sr.*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .sdata2) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__sdata2_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMI_SPRAM AT > PMI_SPRAM /* PMI_SPRAM: Scratch-Pad RAM (SPRAM) */ /* PMI_SPRAM: Scratch-Pad RAM (SPRAM) */
|
||||
|
||||
/*
|
||||
* Section stores initialised data which is addressable by small data area pointer (%a0)
|
||||
*/
|
||||
.sdata :
|
||||
{
|
||||
PROVIDE(__sdata_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .sdata.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.sdata) /*Section stores initialised data which is addressable by small data area pointer (%a0)*/
|
||||
*(.sdata*)
|
||||
*(.gnu.linkonce.s.*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .sdata) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__sdata_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > DMI_LDRAM AT > PMI_SPRAM /* DMI_LDRAM: Local Data RAM (LDRAM) */ /* PMI_SPRAM: Scratch-Pad RAM (SPRAM) */
|
||||
|
||||
/*
|
||||
* Not initialised data in section ’.sbss’, addressable by small data area pointer (%a0)
|
||||
*/
|
||||
.sbss (NOLOAD) :
|
||||
{
|
||||
PROVIDE(__sbss_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .sbss.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.sbss) /*Not initialised data in section ’.sbss’, addressable by small data area pointer (%a0)*/
|
||||
*(.sbss*)
|
||||
*(.gnu.linkonce.sb.*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .sbss) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__sbss_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > DMI_LDRAM /* DMI_LDRAM: Local Data RAM (LDRAM) */
|
||||
|
||||
|
||||
/*Normal Data-Sections*/
|
||||
|
||||
/*
|
||||
* Storage of write-protected data
|
||||
*/
|
||||
.rodata :
|
||||
{
|
||||
PROVIDE(__rodata_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .rodata.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.rodata) /*Storage of write-protected data*/
|
||||
*(.rodata*)
|
||||
*(.gnu.linkonce.r.*)
|
||||
*(.jcr.*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .rodata) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__rodata_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMI_SPRAM /* PMI_SPRAM: Scratch-Pad RAM (SPRAM) */
|
||||
|
||||
/*
|
||||
* Initialised data
|
||||
*/
|
||||
.data :
|
||||
{
|
||||
PROVIDE(__data_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .data.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.data) /*Initialised data*/
|
||||
*(.data*)
|
||||
*(.gnu.linkonce.d.*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .data) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__data_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > DMI_LDRAM AT > PMI_SPRAM /* DMI_LDRAM: Local Data RAM (LDRAM) */ /* PMI_SPRAM: Scratch-Pad RAM (SPRAM) */
|
||||
|
||||
/*
|
||||
* Not Initialised data
|
||||
*/
|
||||
.bss (NOLOAD) :
|
||||
{
|
||||
PROVIDE(__bss_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .bss.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.bss) /*Not Initialised data*/
|
||||
*(.bss*)
|
||||
*(.gnu.linkonce.b.*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .bss) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__bss_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > DMI_LDRAM /* DMI_LDRAM: Local Data RAM (LDRAM) */
|
||||
|
||||
|
||||
|
||||
/*PCP-Sections*/
|
||||
|
||||
/*
|
||||
* PCP Code Section
|
||||
*/
|
||||
.pcptext :
|
||||
{
|
||||
PROVIDE(__pcptext_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .pcptext.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
KEEP(*(.pcptext)) /*PCP Code Section*/
|
||||
KEEP(*(.pcptext*))
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .pcptext) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__pcptext_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PCP_CMEM AT > PMI_SPRAM /* PCP_CMEM: PCP Code Memory (CMEM) */ /* PMI_SPRAM: Scratch-Pad RAM (SPRAM) */
|
||||
|
||||
/*
|
||||
* PCP Data Section
|
||||
*/
|
||||
.pcpdata :
|
||||
{
|
||||
PROVIDE(__pcpdata_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .pcpdata.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
KEEP(*(.pcpdata)) /*PCP Data Section*/
|
||||
KEEP(*(.pcpdata*))
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM .pcpdata) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__pcpdata_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PCP_PRAM AT > PMI_SPRAM /* PCP_PRAM: PCP Data Memory (PRAM) */ /* PMI_SPRAM: Scratch-Pad RAM (SPRAM) */
|
||||
|
||||
|
||||
|
||||
|
||||
.clear_sec :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
PROVIDE(__clear_table = .) ;
|
||||
|
||||
LONG(0 + ADDR(.bss)); LONG(SIZEOF(.bss));
|
||||
LONG(0 + ADDR(.sbss)); LONG(SIZEOF(.sbss));
|
||||
LONG(0 + ADDR(.zbss)); LONG(SIZEOF(.zbss));
|
||||
LONG(0 + ADDR(.bbss)); LONG(SIZEOF(.bbss));
|
||||
/*PROTECTED REGION ID(Protection: iRAM clear section) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
LONG(-1); LONG(-1);
|
||||
|
||||
} > PMI_SPRAM
|
||||
|
||||
|
||||
.copy_sec :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
PROVIDE(__copy_table = .) ;
|
||||
|
||||
LONG(LOADADDR(.data)); LONG(0 + ADDR(.data)); LONG(SIZEOF(.data));
|
||||
LONG(LOADADDR(.sdata)); LONG(0 + ADDR(.sdata)); LONG(SIZEOF(.sdata));
|
||||
LONG(LOADADDR(.zdata)); LONG(0 + ADDR(.zdata)); LONG(SIZEOF(.zdata));
|
||||
LONG(LOADADDR(.pcptext)); LONG(0 + ADDR(.pcptext)); LONG(SIZEOF(.pcptext));
|
||||
LONG(LOADADDR(.pcpdata)); LONG(0 + ADDR(.pcpdata)); LONG(SIZEOF(.pcpdata));
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iRAM copy section) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
LONG(-1); LONG(-1); LONG(-1);
|
||||
} > PMI_SPRAM
|
||||
|
||||
.csa (NOLOAD) :
|
||||
{
|
||||
. = ALIGN(64);
|
||||
__CSA_BEGIN = . ;
|
||||
. += __CSA_SIZE;
|
||||
. = ALIGN(64);
|
||||
__CSA_END = .;
|
||||
} > DMI_LDRAM
|
||||
|
||||
.heap (NOLOAD) :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
__HEAP = .;
|
||||
. += __HEAP_SIZE;
|
||||
__HEAP_END = .;
|
||||
} > DMI_LDRAM
|
||||
|
||||
.istack (NOLOAD) :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
. += __ISTACK_SIZE;
|
||||
__ISTACK = .;
|
||||
} > DMI_LDRAM
|
||||
|
||||
.ustack (NOLOAD) :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
. += __USTACK_SIZE;
|
||||
__USTACK = .;
|
||||
} > DMI_LDRAM
|
||||
|
||||
/*PROTECTED REGION ID(Protection:iRAM-User-Sections) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
}
|
||||
|
658
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/ld/iROM.ld
Normal file
658
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/ld/iROM.ld
Normal file
|
@ -0,0 +1,658 @@
|
|||
|
||||
/*
|
||||
* Name: iROM.ld
|
||||
*
|
||||
* Generated Linker Description File
|
||||
* Copyright (C) 2010 HighTec EDV-Systeme GmbH.
|
||||
* (!Do not edit outsite of the protection areas!)
|
||||
*
|
||||
* Description:
|
||||
* internal flash configuration
|
||||
*/
|
||||
|
||||
/*
|
||||
* Define Entrypoint of Executable
|
||||
*/
|
||||
ENTRY(_start)
|
||||
|
||||
/*
|
||||
* Global
|
||||
*/
|
||||
/*Program Flash Memory (PFLASH)*/
|
||||
__PMU_PFLASH_BEGIN = 0x80000000;
|
||||
__PMU_PFLASH_SIZE = 2560K;
|
||||
/*Data Flash Memory (DFLASH0)*/
|
||||
__PMU_DFLASH0_BEGIN = 0xAFE00000;
|
||||
__PMU_DFLASH0_SIZE = 64K;
|
||||
/*Data Flash Memory (DFLASH1)*/
|
||||
__PMU_DFLASH1_BEGIN = 0xAFE10000;
|
||||
__PMU_DFLASH1_SIZE = 64K;
|
||||
/*Boot ROM (BROM)*/
|
||||
__BROM_BEGIN = 0xAFFFC000;
|
||||
__BROM_SIZE = 16K;
|
||||
/*Scratch-Pad RAM (SPRAM)*/
|
||||
__PMI_SPRAM_BEGIN = 0xC0000000;
|
||||
__PMI_SPRAM_SIZE = 40K;
|
||||
/*Local Data RAM (LDRAM)*/
|
||||
__DMI_LDRAM_BEGIN = 0xD0000000;
|
||||
__DMI_LDRAM_SIZE = 128K;
|
||||
/*PCP Code Memory (CMEM)*/
|
||||
__PCP_CMEM_BEGIN = 0xF0060000;
|
||||
__PCP_CMEM_SIZE = 32K;
|
||||
/*PCP Data Memory (PRAM)*/
|
||||
__PCP_PRAM_BEGIN = 0xF0050000;
|
||||
__PCP_PRAM_SIZE = 16K;
|
||||
|
||||
__ISTACK_SIZE = DEFINED (__ISTACK_SIZE) ? __ISTACK_SIZE : 256;
|
||||
__USTACK_SIZE = DEFINED (__USTACK_SIZE) ? __USTACK_SIZE : 1K;
|
||||
__HEAP_SIZE = DEFINED (__HEAP_SIZE) ? __HEAP_SIZE : 4K ;
|
||||
__CSA_SIZE = DEFINED (__CSA_SIZE) ? __CSA_SIZE : 16K ;
|
||||
|
||||
/**
|
||||
* User defined global region
|
||||
*/
|
||||
/*PROTECTED REGION ID(Protection:iROM-Global) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
/*
|
||||
* internal flash configuration
|
||||
*/
|
||||
MEMORY
|
||||
{
|
||||
PMU_PFLASH (rx!p): org = 0x80000000, len = 2560K /*Program Flash Memory (PFLASH)*/
|
||||
PMU_DFLASH0 (r!xp): org = 0xAFE00000, len = 64K /*Data Flash Memory (DFLASH0)*/
|
||||
PMU_DFLASH1 (r!xp): org = 0xAFE10000, len = 64K /*Data Flash Memory (DFLASH1)*/
|
||||
BROM (rx!p): org = 0xAFFFC000, len = 16K /*Boot ROM (BROM)*/
|
||||
PMI_SPRAM (wx!p): org = 0xC0000000, len = 40K /*Scratch-Pad RAM (SPRAM)*/
|
||||
DMI_LDRAM (w!xp): org = 0xD0000000, len = 128K /*Local Data RAM (LDRAM)*/
|
||||
PCP_CMEM (rxp): org = 0xF0060000, len = 32K /*PCP Code Memory (CMEM)*/
|
||||
PCP_PRAM (wp!x): org = 0xF0050000, len = 16K /*PCP Data Memory (PRAM)*/
|
||||
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
/*Code-Sections*/
|
||||
|
||||
/*
|
||||
* Startup code for TriCore
|
||||
*/
|
||||
.startup_code :
|
||||
{
|
||||
PROVIDE(__startup_code_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .startup_code.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.startup_code) /*Startup code for TriCore*/
|
||||
*(.startup_code*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .startup_code) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__startup_code_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMU_PFLASH /* PMU_PFLASH: Program Flash Memory (PFLASH) */
|
||||
|
||||
/*
|
||||
* Code section
|
||||
*/
|
||||
.text :
|
||||
{
|
||||
PROVIDE(__text_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .text.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.text) /*Code section*/
|
||||
*(.text*)
|
||||
*(.gnu.linkonce.t.*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .text) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__text_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMU_PFLASH /* PMU_PFLASH: Program Flash Memory (PFLASH) */
|
||||
|
||||
/*
|
||||
* Code executed before calling main
|
||||
*/
|
||||
.init :
|
||||
{
|
||||
PROVIDE(__init_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .init.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
KEEP(*(.init)) /*Code executed before calling main*/
|
||||
KEEP(*(.init*))
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .init) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__init_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMU_PFLASH /* PMU_PFLASH: Program Flash Memory (PFLASH) */
|
||||
|
||||
/*
|
||||
* Code executed before exiting program
|
||||
*/
|
||||
.fini :
|
||||
{
|
||||
PROVIDE(__fini_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .fini.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
KEEP(*(.fini)) /*Code executed before exiting program*/
|
||||
KEEP(*(.fini*))
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .fini) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__fini_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMU_PFLASH /* PMU_PFLASH: Program Flash Memory (PFLASH) */
|
||||
|
||||
/*
|
||||
* Section for trap table
|
||||
*/
|
||||
.traptab :
|
||||
{
|
||||
PROVIDE(__traptab_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .traptab.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.traptab) /*Section for trap table*/
|
||||
*(.traptab*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .traptab) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__traptab_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMU_PFLASH /* PMU_PFLASH: Program Flash Memory (PFLASH) */
|
||||
|
||||
/*
|
||||
* Section for interrupt table
|
||||
*/
|
||||
.inttab :
|
||||
{
|
||||
PROVIDE(__inttab_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .inttab.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.inttab) /*Section for interrupt table*/
|
||||
*(.inttab*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .inttab) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__inttab_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMU_PFLASH /* PMU_PFLASH: Program Flash Memory (PFLASH) */
|
||||
|
||||
/*
|
||||
* Exception handling frame for C++ exceptions
|
||||
*/
|
||||
.eh_frame :
|
||||
{
|
||||
PROVIDE(__eh_frame_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .eh_frame.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.eh_frame) /*Exception handling frame for C++ exceptions*/
|
||||
*(.eh_frame*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .eh_frame) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__eh_frame_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMU_PFLASH /* PMU_PFLASH: Program Flash Memory (PFLASH) */
|
||||
|
||||
/*
|
||||
* Section for constructors
|
||||
*/
|
||||
.ctors :
|
||||
{
|
||||
PROVIDE(__ctors_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .ctors.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
KEEP(*(.ctors)) /*Section for constructors*/
|
||||
KEEP(*(.ctors*))
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .ctors) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__ctors_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMU_PFLASH /* PMU_PFLASH: Program Flash Memory (PFLASH) */
|
||||
|
||||
/*
|
||||
* Section for destructors
|
||||
*/
|
||||
.dtors :
|
||||
{
|
||||
PROVIDE(__dtors_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .dtors.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
KEEP(*(.dtors)) /*Section for destructors*/
|
||||
KEEP(*(.dtors*))
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .dtors) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__dtors_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMU_PFLASH /* PMU_PFLASH: Program Flash Memory (PFLASH) */
|
||||
|
||||
|
||||
/*Absolute Data-Sections*/
|
||||
|
||||
/*
|
||||
* Initialised data addressed as absolute
|
||||
*/
|
||||
.zdata :
|
||||
{
|
||||
PROVIDE(__zdata_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .zdata.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.zdata) /*Initialised data addressed as absolute*/
|
||||
*(.zdata*)
|
||||
*(.gnu.linkonce.z.*)
|
||||
*(.gnu.linkonce.zr.*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .zdata) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__zdata_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > DMI_LDRAM AT > PMU_PFLASH /* DMI_LDRAM: Local Data RAM (LDRAM) */ /* PMU_PFLASH: Program Flash Memory (PFLASH) */
|
||||
|
||||
/*
|
||||
* Not initialised data addressed as absolute
|
||||
*/
|
||||
.zbss (NOLOAD) :
|
||||
{
|
||||
PROVIDE(__zbss_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .zbss.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.zbss) /*Not Initialised data addressed as absolute*/
|
||||
*(.zbss*)
|
||||
*(.gnu.linkonce.zb.*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .zbss) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__zbss_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > DMI_LDRAM /* DMI_LDRAM: Local Data RAM (LDRAM) */
|
||||
|
||||
/*
|
||||
* Not initialised bit data
|
||||
*/
|
||||
.bbss (NOLOAD) :
|
||||
{
|
||||
PROVIDE(__bbss_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .bbss.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.bbss) /*Not initialised bit data*/
|
||||
*(.bbss*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .bbss) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__bbss_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > DMI_LDRAM /* DMI_LDRAM: Local Data RAM (LDRAM) */
|
||||
|
||||
/*
|
||||
* Bit variables
|
||||
*/
|
||||
.bdata :
|
||||
{
|
||||
PROVIDE(__bdata_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .bdata.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.bdata) /*Bit variables*/
|
||||
*(.bdata*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .bdata) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__bdata_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > DMI_LDRAM /* DMI_LDRAM: Local Data RAM (LDRAM) */
|
||||
|
||||
|
||||
/*Small Data-Sections*/
|
||||
|
||||
/*
|
||||
* Storage of write-protected data addressed as small
|
||||
*/
|
||||
.sdata2 :
|
||||
{
|
||||
PROVIDE(__sdata2_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .sdata2.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.sdata.rodata) /*Storage of write-protected data addressed as small*/
|
||||
*(.sdata.rodata*)
|
||||
*(.gnu.linkonce.sr.*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .sdata2) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__sdata2_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMU_PFLASH /* PMU_PFLASH: Program Flash Memory (PFLASH) */
|
||||
|
||||
/*
|
||||
* Section stores initialised data which is addressable by small data area pointer (%a0)
|
||||
*/
|
||||
.sdata :
|
||||
{
|
||||
PROVIDE(__sdata_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .sdata.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.sdata) /*Section stores initialised data which is addressable by small data area pointer (%a0)*/
|
||||
*(.sdata*)
|
||||
*(.gnu.linkonce.s.*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .sdata) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__sdata_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > DMI_LDRAM AT > PMU_PFLASH /* DMI_LDRAM: Local Data RAM (LDRAM) */ /* PMU_PFLASH: Program Flash Memory (PFLASH) */
|
||||
|
||||
/*
|
||||
* Not initialised data in section ’.sbss’, addressable by small data area pointer (%a0)
|
||||
*/
|
||||
.sbss (NOLOAD) :
|
||||
{
|
||||
PROVIDE(__sbss_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .sbss.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.sbss) /*Not initialised data in section ’.sbss’, addressable by small data area pointer (%a0)*/
|
||||
*(.sbss*)
|
||||
*(.gnu.linkonce.sb.*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .sbss) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__sbss_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > DMI_LDRAM /* DMI_LDRAM: Local Data RAM (LDRAM) */
|
||||
|
||||
|
||||
/*Normal Data-Sections*/
|
||||
|
||||
/*
|
||||
* Storage of write-protected data
|
||||
*/
|
||||
.rodata :
|
||||
{
|
||||
PROVIDE(__rodata_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .rodata.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.rodata) /*Storage of write-protected data*/
|
||||
*(.rodata*)
|
||||
*(.gnu.linkonce.r.*)
|
||||
*(.jcr.*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .rodata) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__rodata_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PMU_PFLASH /* PMU_PFLASH: Program Flash Memory (PFLASH) */
|
||||
|
||||
/*
|
||||
* Initialised data
|
||||
*/
|
||||
.data :
|
||||
{
|
||||
PROVIDE(__data_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .data.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.data) /*Initialised data*/
|
||||
*(.data*)
|
||||
*(.gnu.linkonce.d.*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .data) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__data_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > DMI_LDRAM AT > PMU_PFLASH /* DMI_LDRAM: Local Data RAM (LDRAM) */ /* PMU_PFLASH: Program Flash Memory (PFLASH) */
|
||||
|
||||
/*
|
||||
* Not Initialised data
|
||||
*/
|
||||
.bss (NOLOAD) :
|
||||
{
|
||||
PROVIDE(__bss_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .bss.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
*(.bss) /*Not Initialised data*/
|
||||
*(.bss*)
|
||||
*(.gnu.linkonce.b.*)
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .bss) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__bss_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > DMI_LDRAM /* DMI_LDRAM: Local Data RAM (LDRAM) */
|
||||
|
||||
|
||||
|
||||
/*PCP-Sections*/
|
||||
|
||||
/*
|
||||
* PCP Code Section
|
||||
*/
|
||||
.pcptext :
|
||||
{
|
||||
PROVIDE(__pcptext_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .pcptext.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
KEEP(*(.pcptext)) /*PCP Code Section*/
|
||||
KEEP(*(.pcptext*))
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .pcptext) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__pcptext_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PCP_CMEM AT > PMU_PFLASH /* PCP_CMEM: PCP Code Memory (CMEM) */ /* PMU_PFLASH: Program Flash Memory (PFLASH) */
|
||||
|
||||
/*
|
||||
* PCP Data Section
|
||||
*/
|
||||
.pcpdata :
|
||||
{
|
||||
PROVIDE(__pcpdata_start = .);
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .pcpdata.begin) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
KEEP(*(.pcpdata)) /*PCP Data Section*/
|
||||
KEEP(*(.pcpdata*))
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM .pcpdata) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
PROVIDE(__pcpdata_end = .);
|
||||
. = ALIGN(8);
|
||||
|
||||
} > PCP_PRAM AT > PMU_PFLASH /* PCP_PRAM: PCP Data Memory (PRAM) */ /* PMU_PFLASH: Program Flash Memory (PFLASH) */
|
||||
|
||||
|
||||
|
||||
|
||||
.clear_sec :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
PROVIDE(__clear_table = .) ;
|
||||
|
||||
LONG(0 + ADDR(.bss)); LONG(SIZEOF(.bss));
|
||||
LONG(0 + ADDR(.sbss)); LONG(SIZEOF(.sbss));
|
||||
LONG(0 + ADDR(.zbss)); LONG(SIZEOF(.zbss));
|
||||
LONG(0 + ADDR(.bbss)); LONG(SIZEOF(.bbss));
|
||||
/*PROTECTED REGION ID(Protection: iROM clear section) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
LONG(-1); LONG(-1);
|
||||
|
||||
} > PMU_PFLASH
|
||||
|
||||
|
||||
.copy_sec :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
PROVIDE(__copy_table = .) ;
|
||||
|
||||
LONG(LOADADDR(.data)); LONG(0 + ADDR(.data)); LONG(SIZEOF(.data));
|
||||
LONG(LOADADDR(.sdata)); LONG(0 + ADDR(.sdata)); LONG(SIZEOF(.sdata));
|
||||
LONG(LOADADDR(.zdata)); LONG(0 + ADDR(.zdata)); LONG(SIZEOF(.zdata));
|
||||
LONG(LOADADDR(.pcptext)); LONG(0 + ADDR(.pcptext)); LONG(SIZEOF(.pcptext));
|
||||
LONG(LOADADDR(.pcpdata)); LONG(0 + ADDR(.pcpdata)); LONG(SIZEOF(.pcpdata));
|
||||
|
||||
/*PROTECTED REGION ID(Protection: iROM copy section) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
LONG(-1); LONG(-1); LONG(-1);
|
||||
} > PMU_PFLASH
|
||||
|
||||
.csa (NOLOAD) :
|
||||
{
|
||||
. = ALIGN(64);
|
||||
__CSA_BEGIN = . ;
|
||||
. += __CSA_SIZE;
|
||||
. = ALIGN(64);
|
||||
__CSA_END = .;
|
||||
} > DMI_LDRAM
|
||||
|
||||
.heap (NOLOAD) :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
__HEAP = .;
|
||||
. += __HEAP_SIZE;
|
||||
__HEAP_END = .;
|
||||
} > DMI_LDRAM
|
||||
|
||||
.istack (NOLOAD) :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
. += __ISTACK_SIZE;
|
||||
__ISTACK = .;
|
||||
} > DMI_LDRAM
|
||||
|
||||
.ustack (NOLOAD) :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
. += __USTACK_SIZE;
|
||||
__USTACK = .;
|
||||
} > DMI_LDRAM
|
||||
|
||||
/*PROTECTED REGION ID(Protection:iROM-User-Sections) ENABLED START*/
|
||||
/*Protection-Area for your own LDF-Code*/
|
||||
/*PROTECTED REGION END*/
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<LinkerModel:LDFProject xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:LinkerModel="http://LinkerModel">
|
||||
<MemoryRegionDescription href="../TriBoard-TC1782.mdm#/"/>
|
||||
<Configurations>
|
||||
<LDF href="../iRAM.lm#/"/>
|
||||
<LDF href="../iROM.lm#/"/>
|
||||
</Configurations>
|
||||
</LinkerModel:LDFProject>
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<LinkerModel:LDFMemoryDescripton xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:LinkerModel="http://LinkerModel" Description="" Name="TriBoard-TC1782" EBMCFG="">
|
||||
<Memory Description="Program Memory Unit (PMU)" Name="Program Unit">
|
||||
<Region Description="Program Flash Memory (PFLASH)" Name="PMU_PFLASH" Begin="0x80000000" Attributes="rx!p" Length="2560" LengthUnit="KB"/>
|
||||
<Region Description="Data Flash Memory (DFLASH0)" Name="PMU_DFLASH0" Begin="0xAFE00000" Attributes="r!xp" Length="64" LengthUnit="KB"/>
|
||||
<Region Description="Data Flash Memory (DFLASH1)" Name="PMU_DFLASH1" Begin="0xAFE10000" Attributes="r!xp" Length="64" LengthUnit="KB"/>
|
||||
<Region Description="Boot ROM (BROM)" Name="BROM" Begin="0xAFFFC000" Attributes="rx!p" Length="16" LengthUnit="KB"/>
|
||||
</Memory>
|
||||
<Memory Description="Program Memory Interface (PMI)" Name="Program Interface">
|
||||
<Region Description="Scratch-Pad RAM (SPRAM)" Name="PMI_SPRAM" Begin="0xC0000000" Attributes="wx!p" Length="40" LengthUnit="KB"/>
|
||||
</Memory>
|
||||
<Memory Description="Data Memory Interface (DMI)" Name="Data Interface">
|
||||
<Region Description="Local Data RAM (LDRAM)" Name="DMI_LDRAM" Begin="0xD0000000" Attributes="w!xp" Length="128" LengthUnit="KB"/>
|
||||
</Memory>
|
||||
<Memory Description="PCP Memory" Name="PCP">
|
||||
<Region Description="PCP Code Memory (CMEM)" Name="PCP_CMEM" Begin="0xF0060000" Attributes="rxp" Length="32" LengthUnit="KB"/>
|
||||
<Region Description="PCP Data Memory (PRAM)" Name="PCP_PRAM" Begin="0xF0050000" Attributes="wp!x" Length="16" LengthUnit="KB"/>
|
||||
</Memory>
|
||||
</LinkerModel:LDFMemoryDescripton>
|
454
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/models/iRAM.lm
Normal file
454
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/models/iRAM.lm
Normal file
|
@ -0,0 +1,454 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<LinkerModel:LinkerDescriptionFile xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:LinkerModel="http://LinkerModel" xmlns:memorydescription="http://MemoryDescription" Description="internal RAM configuration" Name="iRAM">
|
||||
<Output>
|
||||
<Code>
|
||||
<DeepOutputSection Description="Startup code for TriCore" Name=".startup_code" RuntimeAddressVMA="//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Startup code for TriCore" Name=".startup_code" InputSection="//@Input/@InputSection.0"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Code section" Name=".text" RuntimeAddressVMA="//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Code section" Name=".text" InputSection="//@Input/@InputSection.3"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Code executed before calling main" Name=".init" RuntimeAddressVMA="//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Code executed before calling main" Name=".init" InputSection="//@Input/@InputSection.5" KEEP="true"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Code executed before exiting program" Name=".fini" RuntimeAddressVMA="//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Code executed before exiting program" Name=".fini" InputSection="//@Input/@InputSection.6" KEEP="true"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Section for trap table" Name=".traptab" RuntimeAddressVMA="//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Section for trap table" Name=".traptab" InputSection="//@Input/@InputSection.7"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Section for interrupt table" Name=".inttab" RuntimeAddressVMA="//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Section for interrupt table" Name=".inttab" InputSection="//@Input/@InputSection.8"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Exception handling frame for C++ exceptions" Name=".eh_frame" RuntimeAddressVMA="//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Exception handling frame for C++ exceptions" Name=".eh_frame" InputSection="//@Input/@InputSection.17"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Section for constructors" Name=".ctors" RuntimeAddressVMA="//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Section for constructors" Name=".ctors" InputSection="//@Input/@InputSection.18" KEEP="true"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Section for destructors" Name=".dtors" RuntimeAddressVMA="//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Section for destructors" Name=".dtors" InputSection="//@Input/@InputSection.19" KEEP="true"/>
|
||||
</DeepOutputSection>
|
||||
</Code>
|
||||
<Data>
|
||||
<Absolute>
|
||||
<DeepOutputSection Description="Initialised data addressed as absolute" Name=".zdata" LoadMachineAddressLMA="//@LocalAliases/@Alias.1">
|
||||
<RuntimeAddressVMA xsi:type="memorydescription:Region" href="TriBoard-TC1782.mdm#//@Memory.2/@Region.0"/>
|
||||
<InputEntry Description="Initialised data addressed as absolute" Name=".zdata" InputSection="//@Input/@InputSection.13"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Not initialised data addressed as absolute" Name=".zbss" NOLOAD="true">
|
||||
<RuntimeAddressVMA xsi:type="memorydescription:Region" href="TriBoard-TC1782.mdm#//@Memory.2/@Region.0"/>
|
||||
<InputEntry Description="Not Initialised data addressed as absolute" Name=".zbss" InputSection="//@Input/@InputSection.14"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Not initialised bit data" Name=".bbss" NOLOAD="true">
|
||||
<RuntimeAddressVMA xsi:type="memorydescription:Region" href="TriBoard-TC1782.mdm#//@Memory.2/@Region.0"/>
|
||||
<InputEntry Description="Not initialised bit data" Name=".bbss" InputSection="//@Input/@InputSection.16"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Bit variables" Name=".bdata">
|
||||
<RuntimeAddressVMA xsi:type="memorydescription:Region" href="TriBoard-TC1782.mdm#//@Memory.2/@Region.0"/>
|
||||
<InputEntry Description="Bit variables" Name=".bdata" InputSection="//@Input/@InputSection.20"/>
|
||||
</DeepOutputSection>
|
||||
</Absolute>
|
||||
<Small>
|
||||
<DeepOutputSection Description="Storage of write-protected data addressed as small" Name=".sdata2" RuntimeAddressVMA="//@LocalAliases/@Alias.1" LoadMachineAddressLMA="//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Storage of write-protected data addressed as small" Name=".sdata.rodata" InputSection="//@Input/@InputSection.10"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Section stores initialised data which is addressable by small data area pointer (%a0)" Name=".sdata" RuntimeAddressVMA="//@LocalAliases/@Alias.0" LoadMachineAddressLMA="//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Section stores initialised data which is addressable by small data area pointer (%a0)" Name=".sdata" InputSection="//@Input/@InputSection.11"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Not initialised data in section ’.sbss’, addressable by small data area pointer (%a0)" Name=".sbss" RuntimeAddressVMA="//@LocalAliases/@Alias.0" NOLOAD="true">
|
||||
<InputEntry Description="Not initialised data in section ’.sbss’, addressable by small data area pointer (%a0)" Name=".sbss" InputSection="//@Input/@InputSection.15"/>
|
||||
</DeepOutputSection>
|
||||
</Small>
|
||||
<Normal>
|
||||
<DeepOutputSection Description="Storage of write-protected data" Name=".rodata" RuntimeAddressVMA="//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Storage of write-protected data" Name=".rodata" InputSection="//@Input/@InputSection.1"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Initialised data" Name=".data" RuntimeAddressVMA="//@LocalAliases/@Alias.0" LoadMachineAddressLMA="//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Initialised data" Name=".data" InputSection="//@Input/@InputSection.2"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Not Initialised data" Name=".bss" RuntimeAddressVMA="//@LocalAliases/@Alias.0" NOLOAD="true">
|
||||
<InputEntry Description="Not Initialised data" Name=".bss" InputSection="//@Input/@InputSection.4"/>
|
||||
</DeepOutputSection>
|
||||
</Normal>
|
||||
</Data>
|
||||
<PCP>
|
||||
<DeepOutputSection Description="PCP Code Section" Name=".pcptext" LoadMachineAddressLMA="//@LocalAliases/@Alias.1">
|
||||
<RuntimeAddressVMA xsi:type="memorydescription:Region" href="TriBoard-TC1782.mdm#//@Memory.3/@Region.0"/>
|
||||
<InputEntry Description="PCP Code Section" Name=".pcptext" InputSection="//@Input/@InputSection.9" KEEP="true"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="PCP Data Section" Name=".pcpdata" LoadMachineAddressLMA="//@LocalAliases/@Alias.1">
|
||||
<RuntimeAddressVMA xsi:type="memorydescription:Region" href="TriBoard-TC1782.mdm#//@Memory.3/@Region.1"/>
|
||||
<InputEntry Description="PCP Data Section" Name=".pcpdata" InputSection="//@Input/@InputSection.12" KEEP="true"/>
|
||||
</DeepOutputSection>
|
||||
</PCP>
|
||||
<Environment IStackSize="256" IStackUnit="B" UStackUnit="KB" UStackSize="1" CSASize="16" CSAUnit="KB" ClearTableRegion="//@LocalAliases/@Alias.1" CopyTableRegion="//@LocalAliases/@Alias.1" HeapSize="4" HeapUnit="KB">
|
||||
<CSARegionRef xsi:type="memorydescription:Region" href="TriBoard-TC1782.mdm#//@Memory.2/@Region.0"/>
|
||||
<IStackRegion xsi:type="memorydescription:Region" href="TriBoard-TC1782.mdm#//@Memory.2/@Region.0"/>
|
||||
<UStackRegion xsi:type="memorydescription:Region" href="TriBoard-TC1782.mdm#//@Memory.2/@Region.0"/>
|
||||
<HeapRegion xsi:type="memorydescription:Region" href="TriBoard-TC1782.mdm#//@Memory.2/@Region.0"/>
|
||||
</Environment>
|
||||
</Output>
|
||||
<Input>
|
||||
<InputSection Description="Startup code for TriCore" Name=".startup_code"/>
|
||||
<InputSection Description="Storage of write-protected data" Name=".rodata"/>
|
||||
<InputSection Description="Initialised data" Name=".data"/>
|
||||
<InputSection Description="Code section" Name=".text"/>
|
||||
<InputSection Description="Not Initialised data" Name=".bss"/>
|
||||
<InputSection Description="Code executed before calling main" Name=".init"/>
|
||||
<InputSection Description="Code executed before exiting program" Name=".fini"/>
|
||||
<InputSection Description="Section for trap table" Name=".traptab"/>
|
||||
<InputSection Description="Section for interrupt table" Name=".inttab"/>
|
||||
<InputSection Description="PCP Code Section" Name=".pcptext"/>
|
||||
<InputSection Description="Storage of write-protected data addressed as small" Name=".sdata.rodata"/>
|
||||
<InputSection Description="Section stores initialised data which is addressable by small data area pointer (%a0)" Name=".sdata"/>
|
||||
<InputSection Description="PCP Data Section" Name=".pcpdata"/>
|
||||
<InputSection Description="Initialised data addressed as absolute" Name=".zdata"/>
|
||||
<InputSection Description="Not Initialised data addressed as absolute" Name=".zbss"/>
|
||||
<InputSection Description="Not initialised data in section ’.sbss’, addressable by small data area pointer (%a0)" Name=".sbss"/>
|
||||
<InputSection Description="Not initialised bit data" Name=".bbss"/>
|
||||
<InputSection Description="Exception handling frame for C++ exceptions" Name=".eh_frame"/>
|
||||
<InputSection Description="Section for constructors" Name=".ctors"/>
|
||||
<InputSection Description="Section for destructors" Name=".dtors"/>
|
||||
<InputSection Description="Bit variables" Name=".bdata"/>
|
||||
<InputSection Name=".bss.xContinousIncrementHandle"/>
|
||||
<InputSection Name=".text.vTaskDelayUntil"/>
|
||||
<InputSection Name=".version_info"/>
|
||||
<InputSection Name=".bss.xActiveTimerList2"/>
|
||||
<InputSection Name=".text.prvSampleTimeNow"/>
|
||||
<InputSection Name=".data.sBlockingConsumerCount"/>
|
||||
<InputSection Name=".text.vSystemBusAndPeripheralsTrap"/>
|
||||
<InputSection Name=".bss.xPendingReadyList"/>
|
||||
<InputSection Name=".text.prvHighFrequencyTimerTask"/>
|
||||
<InputSection Name=".bss.xDelayedTaskList1"/>
|
||||
<InputSection Name=".data.xSchedulerRunning"/>
|
||||
<InputSection Name=".text.vTaskExitCritical"/>
|
||||
<InputSection Name=".data.uxTasksDeleted"/>
|
||||
<InputSection Name=".data.uxLastPollingCycles.2"/>
|
||||
<InputSection Name=".debug_str"/>
|
||||
<InputSection Name=".text.prvRegisterCheckTask2"/>
|
||||
<InputSection Name=".text.vPrimaryBlockTimeTestTask"/>
|
||||
<InputSection Name=".text.uxTaskPriorityGet"/>
|
||||
<InputSection Name=".text.vCreateTasks"/>
|
||||
<InputSection Name=".text.vListInsert"/>
|
||||
<InputSection Name=".text.xPortStartScheduler"/>
|
||||
<InputSection Name=".text.set_cpu_frequency"/>
|
||||
<InputSection Name=".text.xAreCountingSemaphoreTasksStillRunning"/>
|
||||
<InputSection Name=".text.vStartTimerDemoTask"/>
|
||||
<InputSection Name=".text.get_cpu_frequency"/>
|
||||
<InputSection Name=".text.xQueueCreate"/>
|
||||
<InputSection Name=".text.xPortGetFreeHeapSize"/>
|
||||
<InputSection Name=".bss.xHighPriorityTask"/>
|
||||
<InputSection Name=".bss.xTasksWaitingTermination"/>
|
||||
<InputSection Name=".text.xQueueTakeMutexRecursive"/>
|
||||
<InputSection Name=".text.prvIdleTask"/>
|
||||
<InputSection Name=".data.xHighFrequencyTimerSemaphore"/>
|
||||
<InputSection Name=".text.vCreateSuicidalTasks"/>
|
||||
<InputSection Name=".bss.xControllingTaskHandle"/>
|
||||
<InputSection Name=".text.xQueueGiveMutexRecursive"/>
|
||||
<InputSection Name=".text.xArePollingQueuesStillRunning"/>
|
||||
<InputSection Name=".bss.xEnd"/>
|
||||
<InputSection Name=".text.xSerialPortInitMinimal"/>
|
||||
<InputSection Name=".bss.xSecondary"/>
|
||||
<InputSection Name=".debug_macinfo"/>
|
||||
<InputSection Name=".data.xAutoReloadTimers"/>
|
||||
<InputSection Name=".text.xTimerIsTimerActive"/>
|
||||
<InputSection Name=".text.xTaskRemoveFromEventList"/>
|
||||
<InputSection Name=".text.xAreSemaphoreTasksStillRunning"/>
|
||||
<InputSection Name=".data.xFreeBytesRemaining"/>
|
||||
<InputSection Name=".bss.pxCurrentTimerList"/>
|
||||
<InputSection Name=".data.ulExpectedValue.1"/>
|
||||
<InputSection Name=".text.vTaskPlaceOnEventListRestricted"/>
|
||||
<InputSection Name=".bss.xHighPriorityMutexTask"/>
|
||||
<InputSection Name=".text.vTaskEndScheduler"/>
|
||||
<InputSection Name=".data.freq_init"/>
|
||||
<InputSection Name=".data.xErrorOccurred"/>
|
||||
<InputSection Name=".text.ulInterruptNestingTestGetIterationCount"/>
|
||||
<InputSection Name=".text.vTaskDelay"/>
|
||||
<InputSection Name=".text.prvCopyDataToQueue"/>
|
||||
<InputSection Name=".text.prvRecursiveMutexControllingTask"/>
|
||||
<InputSection Name=".text.xTaskGetTickCount"/>
|
||||
<InputSection Name=".text.vSetupInterruptNestingTest"/>
|
||||
<InputSection Name=".data.ulHighFrequencyTaskIterations"/>
|
||||
<InputSection Name=".text.pvPortMalloc"/>
|
||||
<InputSection Name=".data.ulLastLoopCounter.0"/>
|
||||
<InputSection Name=".bss.xPolledQueue.0"/>
|
||||
<InputSection Name=".bss.xMutex"/>
|
||||
<InputSection Name=".text.vComTxTask"/>
|
||||
<InputSection Name=".text.vContextManagementTrap"/>
|
||||
<InputSection Name=".data.uxTopUsedPriority"/>
|
||||
<InputSection Name=".text.xQueueGenericSend"/>
|
||||
<InputSection Name=".text.xAreTimerDemoTasksStillRunning"/>
|
||||
<InputSection Name=".text.pvTimerGetTimerID"/>
|
||||
<InputSection Name=".bss.pxOverflowTimerList"/>
|
||||
<InputSection Name=".text.vQueueReceiveWhenSuspendedTask"/>
|
||||
<InputSection Name=".data.xTestStatus"/>
|
||||
<InputSection Name=".data.usCheckVariable"/>
|
||||
<InputSection Name=".bss.xActiveTimerList1"/>
|
||||
<InputSection Name=".text.vTaskResume"/>
|
||||
<InputSection Name=".text.xQueueReceiveFromISR"/>
|
||||
<InputSection Name=".bss.xLimitedIncrementHandle"/>
|
||||
<InputSection Name=".data.usLastTaskCheck.0"/>
|
||||
<InputSection Name=".text.vStartQueuePeekTasks"/>
|
||||
<InputSection Name=".text.vTaskSuspend"/>
|
||||
<InputSection Name=".text.vCompetingMathTask4"/>
|
||||
<InputSection Name=".bss.pxDelayedTaskList"/>
|
||||
<InputSection Name=".data.xControllingIsSuspended"/>
|
||||
<InputSection Name=".data.xNumOfOverflows"/>
|
||||
<InputSection Name=".text.vStartSemaphoreTasks"/>
|
||||
<InputSection Name=".text.vPolledQueueProducer"/>
|
||||
<InputSection Name=".text.vStartRecursiveMutexTasks"/>
|
||||
<InputSection Name=".text.prvRxInterruptHandler"/>
|
||||
<InputSection Name=".data.ucOneShotTimerCounter"/>
|
||||
<InputSection Name=".text.prvMediumPriorityMutexTask"/>
|
||||
<InputSection Name=".text.vTaskSetTimeOutState"/>
|
||||
<InputSection Name=".text.vInstructionErrorTrap"/>
|
||||
<InputSection Name=".text.vSecondaryBlockTimeTestTask"/>
|
||||
<InputSection Name=".text.vTaskMissedYield"/>
|
||||
<InputSection Name=".data.ucISROneShotTimerCounter"/>
|
||||
<InputSection Name=".text.vCounterControlTask"/>
|
||||
<InputSection Name=".text.prvAutoReloadTimerCallback"/>
|
||||
<InputSection Name=".data.xISROneShotTimer"/>
|
||||
<InputSection Name=".text.vTaskStartScheduler"/>
|
||||
<InputSection Name=".text.xAreRecursiveMutexTasksStillRunning"/>
|
||||
<InputSection Name=".text.xQueueIsQueueEmptyFromISR"/>
|
||||
<InputSection Name=".bss.xHighestPriorityTask"/>
|
||||
<InputSection Name=".text.vListInsertEnd"/>
|
||||
<InputSection Name=".text.xTimerCreateTimerTask"/>
|
||||
<InputSection Name=".data.ulRegisterTest2Count"/>
|
||||
<InputSection Name=".data.xBasePeriod"/>
|
||||
<InputSection Name=".data.ulExecutionCounter.0"/>
|
||||
<InputSection Name=".text.xAreBlockingQueuesStillRunning"/>
|
||||
<InputSection Name=".text.prvISRAutoReloadTimerCallback"/>
|
||||
<InputSection Name=".text.xSerialGetChar"/>
|
||||
<InputSection Name=".text.vTaskPrioritySet"/>
|
||||
<InputSection Name=".text.prvCheckForValidListAndQueue"/>
|
||||
<InputSection Name=".data.xSecondaryCycles"/>
|
||||
<InputSection Name=".data.xPrimaryCycles"/>
|
||||
<InputSection Name=".data.xMissedYield"/>
|
||||
<InputSection Name=".data.sNextCheckVariable"/>
|
||||
<InputSection Name=".data.xTickCount"/>
|
||||
<InputSection Name=".bss.xTestQueue"/>
|
||||
<InputSection Name=".text.prvInsertTimerInActiveList"/>
|
||||
<InputSection Name=".text.vListInitialiseItem"/>
|
||||
<InputSection Name=".text.vMMUTrap"/>
|
||||
<InputSection Name=".bss.ulCounter"/>
|
||||
<InputSection Name=".text.xSerialPutChar"/>
|
||||
<InputSection Name=".text.vStartBlockingQueueTasks"/>
|
||||
<InputSection Name=".data.uxFlashTaskNumber"/>
|
||||
<InputSection Name=".text.vStartMathTasks"/>
|
||||
<InputSection Name=".data.xBlockingIsSuspended"/>
|
||||
<InputSection Name=".bss.xSuspendedTaskList"/>
|
||||
<InputSection Name=".text.vListRemove"/>
|
||||
<InputSection Name=".bss.uxTasksRunningNow.1"/>
|
||||
<InputSection Name=".data.xPollingConsumerCount"/>
|
||||
<InputSection Name=".text.prvTxBufferInterruptHandler"/>
|
||||
<InputSection Name=".data.sLastBlockingProducerCount.1"/>
|
||||
<InputSection Name=".data.uxPollingCycles"/>
|
||||
<InputSection Name=".data.xLastPrimaryCycleCount.0"/>
|
||||
<InputSection Name=".text.vSerialPutString"/>
|
||||
<InputSection Name=".data.uxControllingCycles"/>
|
||||
<InputSection Name=".text.prvLowPriorityMutexTask"/>
|
||||
<InputSection Name=".text.vStartIntegerMathTasks"/>
|
||||
<InputSection Name=".data.uxLastBlockingCycles.1"/>
|
||||
<InputSection Name=".data.xISRAutoReloadTimer"/>
|
||||
<InputSection Name=".text.main"/>
|
||||
<InputSection Name=".text.xAreComTestTasksStillRunning"/>
|
||||
<InputSection Name=".bss.xMediumPriorityMutexTask"/>
|
||||
<InputSection Name=".data.xSuspendedQueueSendError"/>
|
||||
<InputSection Name=".text.vNonMaskableInterruptTrap"/>
|
||||
<InputSection Name=".bss.xMediumPriorityTask"/>
|
||||
<InputSection Name=".data.usCreationCount"/>
|
||||
<InputSection Name=".text.vSuicidalTask"/>
|
||||
<InputSection Name=".data.uxLastCount1.1"/>
|
||||
<InputSection Name=".data.xPort"/>
|
||||
<InputSection Name=".text.vQueueSendWhenSuspendedTask"/>
|
||||
<InputSection Name=".text.prvHighPriorityMutexTask"/>
|
||||
<InputSection Name=".text.vCreateBlockTimeTasks"/>
|
||||
<InputSection Name=".text.vPortInitialiseBlocks"/>
|
||||
<InputSection Name=".text.prvTrapYield"/>
|
||||
<InputSection Name=".text.prvSemaphoreTest"/>
|
||||
<InputSection Name=".text.vContinuousIncrementTask"/>
|
||||
<InputSection Name=".data.uxTasksRunningAtStart"/>
|
||||
<InputSection Name=".text.uxQueueMessagesWaiting"/>
|
||||
<InputSection Name=".text.vTaskPlaceOnEventList"/>
|
||||
<InputSection Name=".text.xAreBlockTimeTestTasksStillRunning"/>
|
||||
<InputSection Name=".text.vTaskIncrementTick"/>
|
||||
<InputSection Name=".data.sLastCheckVariables.0"/>
|
||||
<InputSection Name=".text.xTimerGenericCommand"/>
|
||||
<InputSection Name=".text.xTaskCheckForTimeOut"/>
|
||||
<InputSection Name=".data.sBlockingProducerCount"/>
|
||||
<InputSection Name=".data.ulPreviousRegisterTest2Count.1"/>
|
||||
<InputSection Name=".text.pxPortInitialiseStack"/>
|
||||
<InputSection Name=".bss.pxReadyTasksLists"/>
|
||||
<InputSection Name=".text.prvSystemTickHandler"/>
|
||||
<InputSection Name=".data.ulLastLoopCounter.1"/>
|
||||
<InputSection Name=".text.vTaskPriorityInherit"/>
|
||||
<InputSection Name=".text.xAreGenericQueueTasksStillRunning"/>
|
||||
<InputSection Name=".text.xTaskGetTickCountFromISR"/>
|
||||
<InputSection Name=".bss.xStart"/>
|
||||
<InputSection Name=".data.ulPreviousRegisterTest1Count.0"/>
|
||||
<InputSection Name=".data.ulLastLoopCounter2.1"/>
|
||||
<InputSection Name=".text.vApplicationIdleHook"/>
|
||||
<InputSection Name=".text.prvTimerTask"/>
|
||||
<InputSection Name=".text.vQueueDelete"/>
|
||||
<InputSection Name=".text.vLEDFlashTask"/>
|
||||
<InputSection Name=".data.ulRegisterTest1Count"/>
|
||||
<InputSection Name=".bss.xParameters"/>
|
||||
<InputSection Name=".data.ulLoopCounter"/>
|
||||
<InputSection Name=".text.vTaskEnterCritical"/>
|
||||
<InputSection Name=".data.xPollingProducerCount"/>
|
||||
<InputSection Name=".data.uxTick.0"/>
|
||||
<InputSection Name=".text.xAreQueuePeekTasksStillRunning"/>
|
||||
<InputSection Name=".text.vLimitedIncrementTask"/>
|
||||
<InputSection Name=".text.xQueueGenericReceive"/>
|
||||
<InputSection Name=".data.sLastBlockingConsumerCount.0"/>
|
||||
<InputSection Name=".text.xAreDynamicPriorityTasksStillRunning"/>
|
||||
<InputSection Name=".text.xTaskIsTaskSuspended"/>
|
||||
<InputSection Name=".data.ulValueToSend.3"/>
|
||||
<InputSection Name=".text.uxPortSetInterruptMaskFromISR"/>
|
||||
<InputSection Name=".data.ulLoopCounter2"/>
|
||||
<InputSection Name=".data.xIterationsWithoutCounterIncrement.2"/>
|
||||
<InputSection Name=".text.vCompetingMathTask1"/>
|
||||
<InputSection Name=".data.xTimerQueue"/>
|
||||
<InputSection Name=".text.prvHighPriorityPeekTask"/>
|
||||
<InputSection Name=".text.vTaskSuspendAll"/>
|
||||
<InputSection Name=".text.vInternalProtectionTrap"/>
|
||||
<InputSection Name=".bss.xBlockingTaskHandle"/>
|
||||
<InputSection Name=".data.xHeapHasBeenInitialised.0"/>
|
||||
<InputSection Name=".text.xTaskResumeAll"/>
|
||||
<InputSection Name=".data.xErrorDetected"/>
|
||||
<InputSection Name=".text.prvRecursiveMutexBlockingTask"/>
|
||||
<InputSection Name=".text.uxQueueMessagesWaitingFromISR"/>
|
||||
<InputSection Name=".data.xTransmitStatus"/>
|
||||
<InputSection Name=".text.vAltStartComTestTasks"/>
|
||||
<InputSection Name=".text.vStartLEDFlashTasks"/>
|
||||
<InputSection Name=".text.vAssertionTrap"/>
|
||||
<InputSection Name=".text.xQueueGenericSendFromISR"/>
|
||||
<InputSection Name=".text.vPortReclaimCSA"/>
|
||||
<InputSection Name=".bss.xCreatedTask"/>
|
||||
<InputSection Name=".data.xSuspendedQueueReceiveError"/>
|
||||
<InputSection Name=".text.xQueueIsQueueFullFromISR"/>
|
||||
<InputSection Name=".text.vTimerPeriodicISRTests"/>
|
||||
<InputSection Name=".data.xLastTime.0"/>
|
||||
<InputSection Name=".data.usLastCreationCount.0"/>
|
||||
<InputSection Name=".text.vParTestToggleLED"/>
|
||||
<InputSection Name=".bss.xRunIndicator"/>
|
||||
<InputSection Name=".bss.xLastCycleFrequency.3"/>
|
||||
<InputSection Name=".data.uxTaskNumber"/>
|
||||
<InputSection Name=".bss.ulReceivedValue.2"/>
|
||||
<InputSection Name=".data.ucISRAutoReloadTimerCounter"/>
|
||||
<InputSection Name=".text.prvHighestPriorityPeekTask"/>
|
||||
<InputSection Name=".data.xSerialTransmitQueue"/>
|
||||
<InputSection Name=".text.vBlockingQueueProducer"/>
|
||||
<InputSection Name=".bss.xSuspendedTestQueue"/>
|
||||
<InputSection Name=".text.vTrapInstallHandlers"/>
|
||||
<InputSection Name=".text.xIsCreateTaskStillRunning"/>
|
||||
<InputSection Name=".data.uxTopReadyPriority"/>
|
||||
<InputSection Name=".text.vCompetingMathTask2"/>
|
||||
<InputSection Name=".text.xTimerCreate"/>
|
||||
<InputSection Name=".text.vPortFree"/>
|
||||
<InputSection Name=".text.prvISROneShotTimerCallback"/>
|
||||
<InputSection Name=".text.prvPortHighFrequencyTimerHandler"/>
|
||||
<InputSection Name=".text.prvRecursiveMutexPollingTask"/>
|
||||
<InputSection Name=".data.sCheckVariables"/>
|
||||
<InputSection Name=".text.xTaskGenericCreate"/>
|
||||
<InputSection Name=".data.xOneShotTimer"/>
|
||||
<InputSection Name=".data.pxCurrentTCB"/>
|
||||
<InputSection Name=".text.vApplicationMallocFailedHook"/>
|
||||
<InputSection Name=".text.vParTestSetLED"/>
|
||||
<InputSection Name=".text.prvUnlockQueue"/>
|
||||
<InputSection Name=".text.prvMediumPriorityPeekTask"/>
|
||||
<InputSection Name=".text.xQueueCreateCountingSemaphore"/>
|
||||
<InputSection Name=".text.vPortEndScheduler"/>
|
||||
<InputSection Name=".text.prvTimerTestTask"/>
|
||||
<InputSection Name=".text.xTaskGetCurrentTaskHandle"/>
|
||||
<InputSection Name=".text.prvLowPriorityPeekTask"/>
|
||||
<InputSection Name=".text.vStartPolledQueueTasks"/>
|
||||
<InputSection Name=".text.uxTaskGetNumberOfTasks"/>
|
||||
<InputSection Name=".text.prvAddCurrentTaskToDelayedList"/>
|
||||
<InputSection Name=".text.prvCopyDataFromQueue"/>
|
||||
<InputSection Name=".text.vTaskDelete"/>
|
||||
<InputSection Name=".data.uxBaseLED"/>
|
||||
<InputSection Name=".text.xTaskResumeFromISR"/>
|
||||
<InputSection Name=".text.vStartGenericQueueTasks"/>
|
||||
<InputSection Name=".bss.xDelayedTaskList2"/>
|
||||
<InputSection Name=".text.vStartCountingSemaphoreTasks"/>
|
||||
<InputSection Name=".text.prvOneShotTimerCallback"/>
|
||||
<InputSection Name=".text.vCompetingMathTask3"/>
|
||||
<InputSection Name=".text.prvInterruptYield"/>
|
||||
<InputSection Name=".data.uxMissedTicks"/>
|
||||
<InputSection Name=".data.xSerialReceiveQueue"/>
|
||||
<InputSection Name=".text.vCompeteingIntMathTask"/>
|
||||
<InputSection Name=".text.vTaskSwitchContext"/>
|
||||
<InputSection Name=".text.xTaskGetSchedulerState"/>
|
||||
<InputSection Name=".text.prvRegisterCheckTask1"/>
|
||||
<InputSection Name=".data.xNextTaskUnblockTime"/>
|
||||
<InputSection Name=".data.uxRxLoops"/>
|
||||
<InputSection Name=".data.ucAutoReloadTimerCounters"/>
|
||||
<InputSection Name=".text.vTaskPriorityDisinherit"/>
|
||||
<InputSection Name=".bss.xHeap"/>
|
||||
<InputSection Name=".data.uxBlockingCycles"/>
|
||||
<InputSection Name=".text.vListInitialise"/>
|
||||
<InputSection Name=".bss.pxOverflowDelayedTaskList"/>
|
||||
<InputSection Name=".text.vComRxTask"/>
|
||||
<InputSection Name=".text.vApplicationTickHook"/>
|
||||
<InputSection Name=".data.uxLastCount0.0"/>
|
||||
<InputSection Name=".data.uxLastControllingCycles.0"/>
|
||||
<InputSection Name=".data.xTaskCheck"/>
|
||||
<InputSection Name=".text.prvCheckTask"/>
|
||||
<InputSection Name=".text.prvSendFrontAndBackTest"/>
|
||||
<InputSection Name=".text.vQueueWaitForMessageRestricted"/>
|
||||
<InputSection Name=".data.uxCurrentNumberOfTasks"/>
|
||||
<InputSection Name=".data.ulGuardedVariable"/>
|
||||
<InputSection Name=".text.xQueueCreateMutex"/>
|
||||
<InputSection Name=".text.prvCountingSemaphoreTask"/>
|
||||
<InputSection Name=".text.xAreIntegerMathsTaskStillRunning"/>
|
||||
<InputSection Name=".data.uxSchedulerSuspended"/>
|
||||
<InputSection Name=".text.vParTestInitialise"/>
|
||||
<InputSection Name=".data.usTaskCheck"/>
|
||||
<InputSection Name=".data.xLastSecondaryCycleCount.1"/>
|
||||
<InputSection Name=".text.xAreMathsTaskStillRunning"/>
|
||||
<InputSection Name=".text.vPolledQueueConsumer"/>
|
||||
<InputSection Name=".text.prvDecrementSemaphoreCount"/>
|
||||
<InputSection Name=".text.vStartDynamicPriorityTasks"/>
|
||||
<InputSection Name=".text.vBlockingQueueConsumer"/>
|
||||
</Input>
|
||||
<Files>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\BlockQ.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\blocktim.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\comtest.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\countsem.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\death.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\dynamic.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\flash.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\flop.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\GenQTest.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\integer.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\PollQ.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\QPeek.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\recmutex.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\semtest.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\TimerDemo.o"/>
|
||||
<ObjectFile Name="RTOSDemo\FreeRTOS_Source\list.o"/>
|
||||
<ObjectFile Name="RTOSDemo\FreeRTOS_Source\portable\GCC\TriCore_1782\port.o"/>
|
||||
<ObjectFile Name="RTOSDemo\FreeRTOS_Source\portable\GCC\TriCore_1782\porttrap.o"/>
|
||||
<ObjectFile Name="RTOSDemo\FreeRTOS_Source\portable\MemMang\heap_2.o"/>
|
||||
<ObjectFile Name="RTOSDemo\FreeRTOS_Source\queue.o"/>
|
||||
<ObjectFile Name="RTOSDemo\FreeRTOS_Source\tasks.o"/>
|
||||
<ObjectFile Name="RTOSDemo\FreeRTOS_Source\timers.o"/>
|
||||
<ObjectFile Name="RTOSDemo\InterruptNestTest.o"/>
|
||||
<ObjectFile Name="RTOSDemo\main.o"/>
|
||||
<ObjectFile Name="RTOSDemo\ParTest.o"/>
|
||||
<ObjectFile Name="RTOSDemo\serial.o"/>
|
||||
<ObjectFile Name="RTOSDemo\ThirdPartyCode\cpufreq.o"/>
|
||||
</Files>
|
||||
<LocalAliases>
|
||||
<Alias Description="Alias for RAM" Name="DATA">
|
||||
<Region href="TriBoard-TC1782.mdm#//@Memory.2/@Region.0"/>
|
||||
</Alias>
|
||||
<Alias Description="Alias for Code" Name="CODE">
|
||||
<Region href="TriBoard-TC1782.mdm#//@Memory.1/@Region.0"/>
|
||||
</Alias>
|
||||
</LocalAliases>
|
||||
</LinkerModel:LinkerDescriptionFile>
|
140
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/models/iROM.lm
Normal file
140
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/models/iROM.lm
Normal file
|
@ -0,0 +1,140 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<LinkerModel:LinkerDescriptionFile xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:LinkerModel="http://LinkerModel" xmlns:memorydescription="http://MemoryDescription" Description="internal flash configuration" Name="iROM">
|
||||
<Output>
|
||||
<Code>
|
||||
<DeepOutputSection Description="Startup code for TriCore" Name=".startup_code" RuntimeAddressVMA="#//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Startup code for TriCore" Name=".startup_code" InputSection="#//@Input/@InputSection.0"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Code section" Name=".text" RuntimeAddressVMA="#//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Code section" Name=".text" InputSection="#//@Input/@InputSection.3"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Code executed before calling main" Name=".init" RuntimeAddressVMA="#//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Code executed before calling main" Name=".init" InputSection="#//@Input/@InputSection.5" KEEP="true"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Code executed before exiting program" Name=".fini" RuntimeAddressVMA="#//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Code executed before exiting program" Name=".fini" InputSection="#//@Input/@InputSection.6" KEEP="true"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Section for trap table" Name=".traptab" RuntimeAddressVMA="#//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Section for trap table" Name=".traptab" InputSection="#//@Input/@InputSection.7"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Section for interrupt table" Name=".inttab" RuntimeAddressVMA="#//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Section for interrupt table" Name=".inttab" InputSection="#//@Input/@InputSection.8"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Exception handling frame for C++ exceptions" Name=".eh_frame" RuntimeAddressVMA="#//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Exception handling frame for C++ exceptions" Name=".eh_frame" InputSection="#//@Input/@InputSection.17"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Section for constructors" Name=".ctors" RuntimeAddressVMA="#//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Section for constructors" Name=".ctors" InputSection="#//@Input/@InputSection.18" KEEP="true"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Section for destructors" Name=".dtors" RuntimeAddressVMA="#//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Section for destructors" Name=".dtors" InputSection="#//@Input/@InputSection.19" KEEP="true"/>
|
||||
</DeepOutputSection>
|
||||
</Code>
|
||||
<Data>
|
||||
<Absolute>
|
||||
<DeepOutputSection Description="Initialised data addressed as absolute" Name=".zdata" RuntimeAddressVMA="memorydescription:Region TriBoard-TC1782.mdm#//@Memory.2/@Region.0" LoadMachineAddressLMA="#//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Initialised data addressed as absolute" Name=".zdata" InputSection="#//@Input/@InputSection.13"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Not initialised data addressed as absolute" Name=".zbss" RuntimeAddressVMA="memorydescription:Region TriBoard-TC1782.mdm#//@Memory.2/@Region.0" NOLOAD="true">
|
||||
<InputEntry Description="Not Initialised data addressed as absolute" Name=".zbss" InputSection="#//@Input/@InputSection.14"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Not initialised bit data" Name=".bbss" RuntimeAddressVMA="memorydescription:Region TriBoard-TC1782.mdm#//@Memory.2/@Region.0" NOLOAD="true">
|
||||
<InputEntry Description="Not initialised bit data" Name=".bbss" InputSection="#//@Input/@InputSection.16"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Bit variables" Name=".bdata" RuntimeAddressVMA="memorydescription:Region TriBoard-TC1782.mdm#//@Memory.2/@Region.0">
|
||||
<InputEntry Description="Bit variables" Name=".bdata" InputSection="#//@Input/@InputSection.20"/>
|
||||
</DeepOutputSection>
|
||||
</Absolute>
|
||||
<Small>
|
||||
<DeepOutputSection Description="Storage of write-protected data addressed as small" Name=".sdata2" RuntimeAddressVMA="#//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Storage of write-protected data addressed as small" Name=".sdata.rodata" InputSection="#//@Input/@InputSection.10"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Section stores initialised data which is addressable by small data area pointer (%a0)" Name=".sdata" RuntimeAddressVMA="#//@LocalAliases/@Alias.0" LoadMachineAddressLMA="#//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Section stores initialised data which is addressable by small data area pointer (%a0)" Name=".sdata" InputSection="#//@Input/@InputSection.11"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Not initialised data in section ’.sbss’, addressable by small data area pointer (%a0)" Name=".sbss" RuntimeAddressVMA="#//@LocalAliases/@Alias.0" NOLOAD="true">
|
||||
<InputEntry Description="Not initialised data in section ’.sbss’, addressable by small data area pointer (%a0)" Name=".sbss" InputSection="#//@Input/@InputSection.15"/>
|
||||
</DeepOutputSection>
|
||||
</Small>
|
||||
<Normal>
|
||||
<DeepOutputSection Description="Storage of write-protected data" Name=".rodata" RuntimeAddressVMA="#//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Storage of write-protected data" Name=".rodata" InputSection="#//@Input/@InputSection.1"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Initialised data" Name=".data" RuntimeAddressVMA="#//@LocalAliases/@Alias.0" LoadMachineAddressLMA="#//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="Initialised data" Name=".data" InputSection="#//@Input/@InputSection.2"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="Not Initialised data" Name=".bss" RuntimeAddressVMA="#//@LocalAliases/@Alias.0" NOLOAD="true">
|
||||
<InputEntry Description="Not Initialised data" Name=".bss" InputSection="#//@Input/@InputSection.4"/>
|
||||
</DeepOutputSection>
|
||||
</Normal>
|
||||
</Data>
|
||||
<PCP>
|
||||
<DeepOutputSection Description="PCP Code Section" Name=".pcptext" RuntimeAddressVMA="memorydescription:Region TriBoard-TC1782.mdm#//@Memory.3/@Region.0" LoadMachineAddressLMA="#//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="PCP Code Section" Name=".pcptext" InputSection="#//@Input/@InputSection.9" KEEP="true"/>
|
||||
</DeepOutputSection>
|
||||
<DeepOutputSection Description="PCP Data Section" Name=".pcpdata" RuntimeAddressVMA="memorydescription:Region TriBoard-TC1782.mdm#//@Memory.3/@Region.1" LoadMachineAddressLMA="#//@LocalAliases/@Alias.1">
|
||||
<InputEntry Description="PCP Data Section" Name=".pcpdata" InputSection="#//@Input/@InputSection.12" KEEP="true"/>
|
||||
</DeepOutputSection>
|
||||
</PCP>
|
||||
<Environment IStackSize="256" IStackUnit="B" UStackUnit="KB" UStackSize="1" CSASize="16" CSAUnit="KB" CSARegionRef="memorydescription:Region TriBoard-TC1782.mdm#//@Memory.2/@Region.0" ClearTableRegion="#//@LocalAliases/@Alias.1" CopyTableRegion="#//@LocalAliases/@Alias.1" IStackRegion="memorydescription:Region TriBoard-TC1782.mdm#//@Memory.2/@Region.0" UStackRegion="memorydescription:Region TriBoard-TC1782.mdm#//@Memory.2/@Region.0" HeapRegion="memorydescription:Region TriBoard-TC1782.mdm#//@Memory.2/@Region.0" HeapSize="4" HeapUnit="KB"/>
|
||||
</Output>
|
||||
<Input>
|
||||
<InputSection Description="Startup code for TriCore" Name=".startup_code"/>
|
||||
<InputSection Description="Storage of write-protected data" Name=".rodata"/>
|
||||
<InputSection Description="Initialised data" Name=".data"/>
|
||||
<InputSection Description="Code section" Name=".text"/>
|
||||
<InputSection Description="Not Initialised data" Name=".bss"/>
|
||||
<InputSection Description="Code executed before calling main" Name=".init"/>
|
||||
<InputSection Description="Code executed before exiting program" Name=".fini"/>
|
||||
<InputSection Description="Section for trap table" Name=".traptab"/>
|
||||
<InputSection Description="Section for interrupt table" Name=".inttab"/>
|
||||
<InputSection Description="PCP Code Section" Name=".pcptext"/>
|
||||
<InputSection Description="Storage of write-protected data addressed as small" Name=".sdata.rodata"/>
|
||||
<InputSection Description="Section stores initialised data which is addressable by small data area pointer (%a0)" Name=".sdata"/>
|
||||
<InputSection Description="PCP Data Section" Name=".pcpdata"/>
|
||||
<InputSection Description="Initialised data addressed as absolute" Name=".zdata"/>
|
||||
<InputSection Description="Not Initialised data addressed as absolute" Name=".zbss"/>
|
||||
<InputSection Description="Not initialised data in section ’.sbss’, addressable by small data area pointer (%a0)" Name=".sbss"/>
|
||||
<InputSection Description="Not initialised bit data" Name=".bbss"/>
|
||||
<InputSection Description="Exception handling frame for C++ exceptions" Name=".eh_frame"/>
|
||||
<InputSection Description="Section for constructors" Name=".ctors"/>
|
||||
<InputSection Description="Section for destructors" Name=".dtors"/>
|
||||
<InputSection Description="Bit variables" Name=".bdata"/>
|
||||
<InputSection Name=".debug_str"/>
|
||||
<InputSection Name=".version_info"/>
|
||||
<InputSection Name=".debug_macinfo"/>
|
||||
</Input>
|
||||
<Files>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\BlockQ.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\blocktim.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\comtest.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\countsem.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\death.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\dynamic.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\flash.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\flop.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\GenQTest.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\integer.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\PollQ.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\QPeek.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\recmutex.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\semtest.o"/>
|
||||
<ObjectFile Name="RTOSDemo\Common_Demo_Source\TimerDemo.o"/>
|
||||
<ObjectFile Name="RTOSDemo\FreeRTOS_Source\list.o"/>
|
||||
<ObjectFile Name="RTOSDemo\FreeRTOS_Source\portable\GCC\TriCore_1782\port.o"/>
|
||||
<ObjectFile Name="RTOSDemo\FreeRTOS_Source\portable\GCC\TriCore_1782\porttrap.o"/>
|
||||
<ObjectFile Name="RTOSDemo\FreeRTOS_Source\portable\MemMang\heap_2.o"/>
|
||||
<ObjectFile Name="RTOSDemo\FreeRTOS_Source\queue.o"/>
|
||||
<ObjectFile Name="RTOSDemo\FreeRTOS_Source\tasks.o"/>
|
||||
<ObjectFile Name="RTOSDemo\FreeRTOS_Source\timers.o"/>
|
||||
<ObjectFile Name="RTOSDemo\InterruptNestTest.o"/>
|
||||
<ObjectFile Name="RTOSDemo\main.o"/>
|
||||
<ObjectFile Name="RTOSDemo\ParTest.o"/>
|
||||
<ObjectFile Name="RTOSDemo\serial.o"/>
|
||||
<ObjectFile Name="RTOSDemo\ThirdPartyCode\cpufreq.o"/>
|
||||
</Files>
|
||||
<LocalAliases>
|
||||
<Alias Description="Alias for RAM" Name="DATA" Region="TriBoard-TC1782.mdm#//@Memory.2/@Region.0"/>
|
||||
<Alias Description="Alias for Code" Name="CODE" Region="TriBoard-TC1782.mdm#//@Memory.0/@Region.0"/>
|
||||
</LocalAliases>
|
||||
</LinkerModel:LinkerDescriptionFile>
|
Loading…
Add table
Add a link
Reference in a new issue