Add FreeRTOS-Plus directory.

This commit is contained in:
Richard Barry 2012-08-11 21:34:11 +00:00
parent 7bd5f21ad5
commit f508a5f653
6798 changed files with 134949 additions and 19 deletions

File diff suppressed because it is too large Load diff

View 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>

View file

@ -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

View file

@ -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

View file

@ -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 */

View file

@ -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 );
}

View file

@ -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 */

View 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;
}
/*---------------------------------------------------------------------------*/

View file

@ -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;
}

View 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;
}
/*-----------------------------------------------------------*/

View 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;
}
}
/*---------------------------------------------------------------------------*/

View 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*/
}

View 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*/
}

View file

@ -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>

View file

@ -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>

View 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>

View 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>