mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-19 21:11:57 -04:00
Preparing for maintenance release:
Kernel source changes: - Added xTaskNotifyStateClear() API function. - Added the GCC Cortex-R port (existed for a while) into the main download. - Improved the IAR RL78 port's handling of different memory model combinations. - Removed some compiler warnings in heap_5.c. Demo app changes: - Added example use of xTaskNotifyStateClear() to the TaskNotify standard demo tasks.
This commit is contained in:
parent
57cc3389a5
commit
d289525e1b
|
@ -356,7 +356,7 @@ const uint32_t ulBit0 = 0x01UL, ulBit1 = 0x02UL;
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------
|
||||||
Now try querying the previus value while notifying a task. */
|
Now try querying the previous value while notifying a task. */
|
||||||
xTaskNotifyAndQuery( xTaskToNotify, 0x00, eSetBits, &ulPreviousValue );
|
xTaskNotifyAndQuery( xTaskToNotify, 0x00, eSetBits, &ulPreviousValue );
|
||||||
configASSERT( ulNotifiedValue == ( ULONG_MAX & ~( ulBit0 | ulBit1 ) ) );
|
configASSERT( ulNotifiedValue == ( ULONG_MAX & ~( ulBit0 | ulBit1 ) ) );
|
||||||
|
|
||||||
|
@ -376,6 +376,28 @@ const uint32_t ulBit0 = 0x01UL, ulBit1 = 0x02UL;
|
||||||
ulExpectedValue |= ulLoop;
|
ulExpectedValue |= ulLoop;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------
|
||||||
|
/* Clear the previous notifications. */
|
||||||
|
xTaskNotifyWait( ULONG_MAX, 0, &ulNotifiedValue, 0 );
|
||||||
|
|
||||||
|
/* The task should not have any notifications pending, so an attempt to clear
|
||||||
|
the notification state should fail. */
|
||||||
|
configASSERT( xTaskNotifyStateClear( NULL ) == pdFALSE );
|
||||||
|
|
||||||
|
/* Get the task to notify itself. This is not a normal thing to do, and is
|
||||||
|
only done here for test purposes. */
|
||||||
|
xTaskNotifyAndQuery( xTaskToNotify, ulFirstNotifiedConst, eSetValueWithoutOverwrite, &ulPreviousValue );
|
||||||
|
|
||||||
|
/* Now the notification state should be eNotified, so it should now be
|
||||||
|
possible to clear the notification state. */
|
||||||
|
configASSERT( xTaskNotifyStateClear( NULL ) == pdTRUE );
|
||||||
|
configASSERT( xTaskNotifyStateClear( NULL ) == pdFALSE );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Incremented to show the task is still running. */
|
/* Incremented to show the task is still running. */
|
||||||
ulNotifyCycleCount++;
|
ulNotifyCycleCount++;
|
||||||
|
|
||||||
|
@ -509,9 +531,9 @@ const uint32_t ulUnexpectedValue = 0xff;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:/* Should never get here!. */
|
default:/* Should never get here!. */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ulTimerNotificationsSent++;
|
ulTimerNotificationsSent++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
#Thu Oct 15 21:03:35 BST 2015
|
#Fri Oct 16 11:40:45 BST 2015
|
||||||
default.com-microchip-mplab-nbide-toolchainXC16-XC16LanguageToolchain.md5=7b5555b9f3fac10bdeeaa71fff22c072
|
default.com-microchip-mplab-nbide-toolchainXC16-XC16LanguageToolchain.md5=7b5555b9f3fac10bdeeaa71fff22c072
|
||||||
default.languagetoolchain.dir=C\:\\DevTools\\Microchip\\xc16\\v1.25\\bin
|
default.languagetoolchain.dir=C\:\\DevTools\\Microchip\\xc16\\v1.25\\bin
|
||||||
configurations-xml=e1668378027c43cfe57bea932c980e61
|
configurations-xml=e1668378027c43cfe57bea932c980e61
|
||||||
|
|
|
@ -77,7 +77,7 @@ ifneq ($(INFORMATION_MESSAGE), )
|
||||||
endif
|
endif
|
||||||
${MAKE} -f nbproject/Makefile-PIC32MZ2048_SK.mk dist/${CND_CONF}/${IMAGE_TYPE}/RTOSDemo.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}
|
${MAKE} -f nbproject/Makefile-PIC32MZ2048_SK.mk dist/${CND_CONF}/${IMAGE_TYPE}/RTOSDemo.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}
|
||||||
|
|
||||||
MP_PROCESSOR_OPTION=32MZ2048ECM144
|
MP_PROCESSOR_OPTION=32MZ2048ECH144
|
||||||
MP_LINKER_FILE_OPTION=
|
MP_LINKER_FILE_OPTION=
|
||||||
# ------------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------------
|
||||||
# Rules for buildStep: assemble
|
# Rules for buildStep: assemble
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
#
|
#
|
||||||
#Thu Oct 15 18:30:50 BST 2015
|
#Fri Oct 16 11:52:06 BST 2015
|
||||||
PIC32MZ2048_SK.com-microchip-mplab-nbide-toolchainXC32-XC32LanguageToolchain.md5=dcb36c7e6928d5535e26dd359786192b
|
PIC32MZ2048_SK.com-microchip-mplab-nbide-toolchainXC32-XC32LanguageToolchain.md5=dcb36c7e6928d5535e26dd359786192b
|
||||||
PIC32MZ2048EF_SK_SOFT_FLOAT.languagetoolchain.dir=C\:\\DevTools\\Microchip\\xc32\\v1.40\\bin
|
PIC32MZ2048EF_SK_SOFT_FLOAT.languagetoolchain.dir=C\:\\DevTools\\Microchip\\xc32\\v1.40\\bin
|
||||||
conf.ids=PIC32MZ2048_SK,PIC32MZ2048EF_SK_SOFT_FLOAT,PIC32MZ2048EF_SK_HARD_FLOAT
|
conf.ids=PIC32MZ2048_SK,PIC32MZ2048EF_SK_SOFT_FLOAT,PIC32MZ2048EF_SK_HARD_FLOAT
|
||||||
configurations-xml=b89c82494ccd01c641a679d02e4a20c2
|
configurations-xml=5494ca7739a1fe76ccf1dd947214ff1b
|
||||||
PIC32MZ2048EF_SK_HARD_FLOAT.languagetoolchain.dir=C\:\\DevTools\\Microchip\\xc32\\v1.40\\bin
|
PIC32MZ2048EF_SK_HARD_FLOAT.languagetoolchain.dir=C\:\\DevTools\\Microchip\\xc32\\v1.40\\bin
|
||||||
PIC32MZ2048EF_SK_SOFT_FLOAT.com-microchip-mplab-nbide-toolchainXC32-XC32LanguageToolchain.md5=dcb36c7e6928d5535e26dd359786192b
|
PIC32MZ2048EF_SK_SOFT_FLOAT.com-microchip-mplab-nbide-toolchainXC32-XC32LanguageToolchain.md5=dcb36c7e6928d5535e26dd359786192b
|
||||||
PIC32MZ2048EF_SK_HARD_FLOAT.languagetoolchain.version=1.40
|
PIC32MZ2048EF_SK_HARD_FLOAT.languagetoolchain.version=1.40
|
||||||
|
|
|
@ -27,7 +27,7 @@ CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}}
|
||||||
PROJECTNAME=RTOSDemo.X
|
PROJECTNAME=RTOSDemo.X
|
||||||
|
|
||||||
# Active Configuration
|
# Active Configuration
|
||||||
DEFAULTCONF=PIC32MZ2048EF_SK_HARD_FLOAT
|
DEFAULTCONF=PIC32MZ2048_SK
|
||||||
CONF=${DEFAULTCONF}
|
CONF=${DEFAULTCONF}
|
||||||
|
|
||||||
# All Configurations
|
# All Configurations
|
||||||
|
|
|
@ -84,7 +84,7 @@
|
||||||
<conf name="PIC32MZ2048_SK" type="2">
|
<conf name="PIC32MZ2048_SK" type="2">
|
||||||
<toolsSet>
|
<toolsSet>
|
||||||
<developmentServer>localhost</developmentServer>
|
<developmentServer>localhost</developmentServer>
|
||||||
<targetDevice>PIC32MZ2048ECM144</targetDevice>
|
<targetDevice>PIC32MZ2048ECH144</targetDevice>
|
||||||
<targetHeader></targetHeader>
|
<targetHeader></targetHeader>
|
||||||
<targetPluginBoard></targetPluginBoard>
|
<targetPluginBoard></targetPluginBoard>
|
||||||
<platformTool>PKOBSKDEPlatformTool</platformTool>
|
<platformTool>PKOBSKDEPlatformTool</platformTool>
|
||||||
|
@ -621,7 +621,6 @@
|
||||||
<property key="ToolFirmwareFilePath"
|
<property key="ToolFirmwareFilePath"
|
||||||
value="Press to browse for a specific firmware version"/>
|
value="Press to browse for a specific firmware version"/>
|
||||||
<property key="ToolFirmwareOption.UseLatestFirmware" value="true"/>
|
<property key="ToolFirmwareOption.UseLatestFirmware" value="true"/>
|
||||||
<property key="firmware.download.all" value="false"/>
|
|
||||||
<property key="memories.configurationmemory" value="false"/>
|
<property key="memories.configurationmemory" value="false"/>
|
||||||
<property key="memories.dataflash" value="true"/>
|
<property key="memories.dataflash" value="true"/>
|
||||||
<property key="memories.eeprom" value="false"/>
|
<property key="memories.eeprom" value="false"/>
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<configurationDescriptor version="62">
|
<configurationDescriptor version="62">
|
||||||
<projectmakefile>Makefile</projectmakefile>
|
<projectmakefile>Makefile</projectmakefile>
|
||||||
<defaultConf>2</defaultConf>
|
<defaultConf>0</defaultConf>
|
||||||
<confs>
|
<confs>
|
||||||
<conf name="PIC32MZ2048_SK" type="2">
|
<conf name="PIC32MZ2048_SK" type="2">
|
||||||
<platformToolSN>:=MPLABComm-USB-Microchip:=<vid>04D8:=<pid>8107:=<rev>0002:=<man>Microchip Technology Incorporated:=<prod>PIC32MZ EF Family:=<sn>BUR153124004:=<drv>x:=<xpt>h:=end</platformToolSN>
|
<platformToolSN>:=MPLABComm-USB-Microchip:=<vid>04D8:=<pid>8107:=<rev>0002:=<man>Microchip Technology Incorporated:=<prod>PIC32MZ EC Family:=<sn>MTI132990155:=<drv>x:=<xpt>h:=end</platformToolSN>
|
||||||
<languageToolchainDir>C:\DevTools\Microchip\xc32\v1.40\bin</languageToolchainDir>
|
<languageToolchainDir>C:\DevTools\Microchip\xc32\v1.40\bin</languageToolchainDir>
|
||||||
<mdbdebugger version="1">
|
<mdbdebugger version="1">
|
||||||
<placeholder1>place holder 1</placeholder1>
|
<placeholder1>place holder 1</placeholder1>
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
</group>
|
</group>
|
||||||
<group name="Masters19024">
|
<group name="Masters19024">
|
||||||
<file>file:/C:/E/Dev/FreeRTOS/WorkingCopy/FreeRTOS/Demo/PIC32MZ_MPLAB/main.c</file>
|
<file>file:/C:/E/Dev/FreeRTOS/WorkingCopy/FreeRTOS/Demo/PIC32MZ_MPLAB/main.c</file>
|
||||||
|
<file>file:/C:/E/Dev/FreeRTOS/WorkingCopy/FreeRTOS/Demo/PIC32MZ_MPLAB/flop_mz.c</file>
|
||||||
</group>
|
</group>
|
||||||
</open-files>
|
</open-files>
|
||||||
</project-private>
|
</project-private>
|
||||||
|
|
|
@ -104,8 +104,6 @@
|
||||||
#pragma config EJTAGBEN = NORMAL, DBGPER = PG_ALL, FSLEEP = OFF, FECCCON = OFF_UNLOCKED
|
#pragma config EJTAGBEN = NORMAL, DBGPER = PG_ALL, FSLEEP = OFF, FECCCON = OFF_UNLOCKED
|
||||||
#pragma config BOOTISA = MIPS32, TRCEN = ON, ICESEL = ICS_PGx2, JTAGEN = OFF, DEBUG = ON
|
#pragma config BOOTISA = MIPS32, TRCEN = ON, ICESEL = ICS_PGx2, JTAGEN = OFF, DEBUG = ON
|
||||||
#pragma config CP = OFF
|
#pragma config CP = OFF
|
||||||
#pragma config_alt FWDTEN=OFF
|
|
||||||
#pragma config_alt USERID = 0x1234u
|
|
||||||
#elif defined(__32MZ2048EFM144) || defined(__32MZ2048EFH144)
|
#elif defined(__32MZ2048EFM144) || defined(__32MZ2048EFH144)
|
||||||
#pragma config FMIIEN = OFF, FETHIO = OFF, PGL1WAY = OFF, PMDL1WAY = OFF, IOL1WAY = OFF, FUSBIDIO = OFF
|
#pragma config FMIIEN = OFF, FETHIO = OFF, PGL1WAY = OFF, PMDL1WAY = OFF, IOL1WAY = OFF, FUSBIDIO = OFF
|
||||||
#pragma config FNOSC = SPLL, FSOSCEN = OFF, IESO = OFF, POSCMOD = EC
|
#pragma config FNOSC = SPLL, FSOSCEN = OFF, IESO = OFF, POSCMOD = EC
|
||||||
|
@ -317,14 +315,3 @@ static unsigned long _excep_addr;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName )
|
|
||||||
{
|
|
||||||
( void ) pcTaskName;
|
|
||||||
( void ) pxTask;
|
|
||||||
|
|
||||||
/* Run time stack overflow checking is performed if
|
|
||||||
configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook
|
|
||||||
function is called if a stack overflow is detected. */
|
|
||||||
taskDISABLE_INTERRUPTS();
|
|
||||||
for( ;; );
|
|
||||||
}
|
|
||||||
|
|
|
@ -98,7 +98,7 @@ multiple evaluation boards. */
|
||||||
#define configUSE_PREEMPTION 1
|
#define configUSE_PREEMPTION 1
|
||||||
#define configTICK_RATE_HZ ( ( unsigned short ) 1000 )
|
#define configTICK_RATE_HZ ( ( unsigned short ) 1000 )
|
||||||
#define configMAX_PRIORITIES ( 4 )
|
#define configMAX_PRIORITIES ( 4 )
|
||||||
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 80 )
|
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 75 )
|
||||||
#define configMAX_TASK_NAME_LEN ( 10 )
|
#define configMAX_TASK_NAME_LEN ( 10 )
|
||||||
#define configUSE_TRACE_FACILITY 0
|
#define configUSE_TRACE_FACILITY 0
|
||||||
#define configUSE_16_BIT_TICKS 1
|
#define configUSE_16_BIT_TICKS 1
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>DynDriver</name>
|
<name>DynDriver</name>
|
||||||
<state>TKRL78</state>
|
<state>SIMRL78</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>DebugDDFOverride</name>
|
<name>DebugDDFOverride</name>
|
||||||
|
@ -946,7 +946,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>DynDriver</name>
|
<name>DynDriver</name>
|
||||||
<state>SIMRL78</state>
|
<state>E1RL78</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>DebugDDFOverride</name>
|
<name>DebugDDFOverride</name>
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<settings>
|
<settings>
|
||||||
<name>General</name>
|
<name>General</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>1</version>
|
<version>1</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
@ -153,7 +153,7 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>ICCRL78</name>
|
<name>ICCRL78</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>7</version>
|
<version>7</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
@ -401,9 +401,9 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>ARL78</name>
|
<name>ARL78</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>2</version>
|
<version>3</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
|
@ -553,6 +553,10 @@
|
||||||
<name>PreInclude</name>
|
<name>PreInclude</name>
|
||||||
<state></state>
|
<state></state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>AsmListIncludeHeaderSource</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -561,6 +565,7 @@
|
||||||
<data>
|
<data>
|
||||||
<extensions></extensions>
|
<extensions></extensions>
|
||||||
<cmdline></cmdline>
|
<cmdline></cmdline>
|
||||||
|
<hasPrio>0</hasPrio>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -578,11 +583,15 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>XLINK</name>
|
<name>XLINK</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>14</version>
|
<version>14</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
|
<option>
|
||||||
|
<name>XlinkHugeHeap</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>XOutOverride</name>
|
<name>XOutOverride</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
|
@ -864,7 +873,7 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>XAR</name>
|
<name>XAR</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>0</version>
|
<version>0</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
@ -885,7 +894,7 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>INTERNAL_HWSUPPORT</name>
|
<name>INTERNAL_HWSUPPORT</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data/>
|
<data/>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -902,7 +911,7 @@
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<settings>
|
<settings>
|
||||||
<name>General</name>
|
<name>General</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>1</version>
|
<version>1</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
@ -1045,7 +1054,7 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>ICCRL78</name>
|
<name>ICCRL78</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>7</version>
|
<version>7</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
@ -1293,9 +1302,9 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>ARL78</name>
|
<name>ARL78</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>2</version>
|
<version>3</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
|
@ -1445,6 +1454,10 @@
|
||||||
<name>PreInclude</name>
|
<name>PreInclude</name>
|
||||||
<state></state>
|
<state></state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>AsmListIncludeHeaderSource</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -1453,6 +1466,7 @@
|
||||||
<data>
|
<data>
|
||||||
<extensions></extensions>
|
<extensions></extensions>
|
||||||
<cmdline></cmdline>
|
<cmdline></cmdline>
|
||||||
|
<hasPrio>0</hasPrio>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -1470,11 +1484,15 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>XLINK</name>
|
<name>XLINK</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>14</version>
|
<version>14</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
|
<option>
|
||||||
|
<name>XlinkHugeHeap</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>XOutOverride</name>
|
<name>XOutOverride</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
|
@ -1756,7 +1774,7 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>XAR</name>
|
<name>XAR</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>0</version>
|
<version>0</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
@ -1777,7 +1795,7 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>INTERNAL_HWSUPPORT</name>
|
<name>INTERNAL_HWSUPPORT</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data/>
|
<data/>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -1794,7 +1812,7 @@
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<settings>
|
<settings>
|
||||||
<name>General</name>
|
<name>General</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>1</version>
|
<version>1</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
@ -1937,7 +1955,7 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>ICCRL78</name>
|
<name>ICCRL78</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>7</version>
|
<version>7</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
@ -2185,9 +2203,9 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>ARL78</name>
|
<name>ARL78</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>2</version>
|
<version>3</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
|
@ -2337,6 +2355,10 @@
|
||||||
<name>PreInclude</name>
|
<name>PreInclude</name>
|
||||||
<state></state>
|
<state></state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>AsmListIncludeHeaderSource</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -2345,6 +2367,7 @@
|
||||||
<data>
|
<data>
|
||||||
<extensions></extensions>
|
<extensions></extensions>
|
||||||
<cmdline></cmdline>
|
<cmdline></cmdline>
|
||||||
|
<hasPrio>0</hasPrio>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -2362,11 +2385,15 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>XLINK</name>
|
<name>XLINK</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>14</version>
|
<version>14</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
|
<option>
|
||||||
|
<name>XlinkHugeHeap</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>XOutOverride</name>
|
<name>XOutOverride</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
|
@ -2648,7 +2675,7 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>XAR</name>
|
<name>XAR</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>0</version>
|
<version>0</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
@ -2669,7 +2696,7 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>INTERNAL_HWSUPPORT</name>
|
<name>INTERNAL_HWSUPPORT</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data/>
|
<data/>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -2686,7 +2713,7 @@
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<settings>
|
<settings>
|
||||||
<name>General</name>
|
<name>General</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>1</version>
|
<version>1</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
@ -2702,12 +2729,12 @@
|
||||||
<option>
|
<option>
|
||||||
<name>GenCodeModel</name>
|
<name>GenCodeModel</name>
|
||||||
<version>0</version>
|
<version>0</version>
|
||||||
<state>1</state>
|
<state>0</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GenDataModel</name>
|
<name>GenDataModel</name>
|
||||||
<version>0</version>
|
<version>0</version>
|
||||||
<state>1</state>
|
<state>0</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GenNearConstLocation</name>
|
<name>GenNearConstLocation</name>
|
||||||
|
@ -2754,11 +2781,11 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GenRTConfigPath</name>
|
<name>GenRTConfigPath</name>
|
||||||
<state>$TOOLKIT_DIR$\LIB\dlrl78ff1n.h</state>
|
<state>$TOOLKIT_DIR$\LIB\dlrl78nn1n.h</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GenRTLibraryPath</name>
|
<name>GenRTLibraryPath</name>
|
||||||
<state>$TOOLKIT_DIR$\LIB\dlrl78ff1n.r87</state>
|
<state>$TOOLKIT_DIR$\LIB\dlrl78fn1n.r87</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GenHwSupport</name>
|
<name>GenHwSupport</name>
|
||||||
|
@ -2771,7 +2798,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GenLibInFormatterDescription</name>
|
<name>GenLibInFormatterDescription</name>
|
||||||
<state>No specifier n, no float, no scan set, no assignment suppressing.</state>
|
<state>No specifier n, no float or long long, no scan set, no assignment suppressing.</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GenLibOutFormatter</name>
|
<name>GenLibOutFormatter</name>
|
||||||
|
@ -2780,7 +2807,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GenLibOutFormatterDescription</name>
|
<name>GenLibOutFormatterDescription</name>
|
||||||
<state>No specifier a or A, no specifier n, no float, no flags.</state>
|
<state>No specifier a or A, no specifier n, no float or long long, no flags.</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GenStackSize</name>
|
<name>GenStackSize</name>
|
||||||
|
@ -2829,7 +2856,7 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>ICCRL78</name>
|
<name>ICCRL78</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>7</version>
|
<version>7</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
@ -3077,9 +3104,9 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>ARL78</name>
|
<name>ARL78</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>2</version>
|
<version>3</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
|
@ -3163,7 +3190,7 @@
|
||||||
<option>
|
<option>
|
||||||
<name>AsmDefines</name>
|
<name>AsmDefines</name>
|
||||||
<state>RSKRL78L13</state>
|
<state>RSKRL78L13</state>
|
||||||
<state>__FAR_DATA_MODEL__</state>
|
<state>__NEAR_DATA_MODEL__</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>AsmPreprocOutput</name>
|
<name>AsmPreprocOutput</name>
|
||||||
|
@ -3229,6 +3256,10 @@
|
||||||
<name>PreInclude</name>
|
<name>PreInclude</name>
|
||||||
<state></state>
|
<state></state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>AsmListIncludeHeaderSource</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -3237,6 +3268,7 @@
|
||||||
<data>
|
<data>
|
||||||
<extensions></extensions>
|
<extensions></extensions>
|
||||||
<cmdline></cmdline>
|
<cmdline></cmdline>
|
||||||
|
<hasPrio>0</hasPrio>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -3254,11 +3286,15 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>XLINK</name>
|
<name>XLINK</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>14</version>
|
<version>14</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
|
<option>
|
||||||
|
<name>XlinkHugeHeap</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>XOutOverride</name>
|
<name>XOutOverride</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
|
@ -3540,7 +3576,7 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>XAR</name>
|
<name>XAR</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>0</version>
|
<version>0</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
@ -3561,7 +3597,7 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>INTERNAL_HWSUPPORT</name>
|
<name>INTERNAL_HWSUPPORT</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data/>
|
<data/>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -3578,7 +3614,7 @@
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<settings>
|
<settings>
|
||||||
<name>General</name>
|
<name>General</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>1</version>
|
<version>1</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
@ -3721,7 +3757,7 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>ICCRL78</name>
|
<name>ICCRL78</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>7</version>
|
<version>7</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
@ -3969,9 +4005,9 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>ARL78</name>
|
<name>ARL78</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>2</version>
|
<version>3</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
|
@ -4121,6 +4157,10 @@
|
||||||
<name>PreInclude</name>
|
<name>PreInclude</name>
|
||||||
<state></state>
|
<state></state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>AsmListIncludeHeaderSource</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -4129,6 +4169,7 @@
|
||||||
<data>
|
<data>
|
||||||
<extensions></extensions>
|
<extensions></extensions>
|
||||||
<cmdline></cmdline>
|
<cmdline></cmdline>
|
||||||
|
<hasPrio>0</hasPrio>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -4146,11 +4187,15 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>XLINK</name>
|
<name>XLINK</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>14</version>
|
<version>14</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
|
<option>
|
||||||
|
<name>XlinkHugeHeap</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>XOutOverride</name>
|
<name>XOutOverride</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
|
@ -4432,7 +4477,7 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>XAR</name>
|
<name>XAR</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>0</version>
|
<version>0</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
@ -4453,7 +4498,7 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>INTERNAL_HWSUPPORT</name>
|
<name>INTERNAL_HWSUPPORT</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data/>
|
<data/>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -4470,7 +4515,7 @@
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<settings>
|
<settings>
|
||||||
<name>General</name>
|
<name>General</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>1</version>
|
<version>1</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
@ -4613,7 +4658,7 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>ICCRL78</name>
|
<name>ICCRL78</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>7</version>
|
<version>7</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
@ -4861,9 +4906,9 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>ARL78</name>
|
<name>ARL78</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>2</version>
|
<version>3</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
|
@ -5013,6 +5058,10 @@
|
||||||
<name>PreInclude</name>
|
<name>PreInclude</name>
|
||||||
<state></state>
|
<state></state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>AsmListIncludeHeaderSource</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -5021,6 +5070,7 @@
|
||||||
<data>
|
<data>
|
||||||
<extensions></extensions>
|
<extensions></extensions>
|
||||||
<cmdline></cmdline>
|
<cmdline></cmdline>
|
||||||
|
<hasPrio>0</hasPrio>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -5038,11 +5088,15 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>XLINK</name>
|
<name>XLINK</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>14</version>
|
<version>14</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
|
<option>
|
||||||
|
<name>XlinkHugeHeap</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>XOutOverride</name>
|
<name>XOutOverride</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
|
@ -5324,7 +5378,7 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>XAR</name>
|
<name>XAR</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>0</version>
|
<version>0</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
@ -5345,7 +5399,7 @@
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>INTERNAL_HWSUPPORT</name>
|
<name>INTERNAL_HWSUPPORT</name>
|
||||||
<archiveVersion>5</archiveVersion>
|
<archiveVersion>6</archiveVersion>
|
||||||
<data/>
|
<data/>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
|
|
@ -19,14 +19,14 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<Column0>154</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>
|
<Column0>255</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>
|
||||||
</Workspace>
|
</Workspace>
|
||||||
<Disassembly>
|
<Disassembly>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><MixedMode>1</MixedMode><CodeCovShow>1</CodeCovShow><InstrProfShow>1</InstrProfShow><col-names><item>Disassembly</item><item>_I0</item></col-names><col-widths><item>500</item><item>20</item></col-widths><DisasmHistory/><ShowCodeCoverage>0</ShowCodeCoverage><ShowInstrProfiling>0</ShowInstrProfiling></Disassembly>
|
<PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><MixedMode>1</MixedMode><CodeCovShow>1</CodeCovShow><InstrProfShow>1</InstrProfShow><col-names><item>Disassembly</item><item>_I0</item></col-names><col-widths><item>500</item><item>20</item></col-widths><DisasmHistory/><ShowCodeCoverage>0</ShowCodeCoverage><ShowInstrProfiling>0</ShowInstrProfiling></Disassembly>
|
||||||
<STACK2><PreferedWindows><Position>1</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></STACK2><Register><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></Register><WATCH_1><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><expressions><item/></expressions><col-names><item>Expression</item><item>Location</item><item>Type</item><item>Value</item></col-names><col-widths><item>100</item><item>150</item><item>100</item><item>100</item></col-widths></WATCH_1><CallStack><PreferedWindows><Position>1</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><col-names><item>Frame</item><item>_I0</item></col-names><col-widths><item>400</item><item>20</item></col-widths></CallStack><Breakpoints><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><col-names><item>Breakpoint</item><item>_I0</item></col-names><col-widths><item>500</item><item>35</item></col-widths></Breakpoints></Static>
|
<STACK2><PreferedWindows><Position>1</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></STACK2><Register><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></Register><WATCH_1><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><expressions><item/></expressions><col-names><item>Expression</item><item>Location</item><item>Type</item><item>Value</item></col-names><col-widths><item>179</item><item>150</item><item>100</item><item>100</item></col-widths></WATCH_1><CallStack><PreferedWindows><Position>1</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><col-names><item>Frame</item><item>_I0</item></col-names><col-widths><item>400</item><item>20</item></col-widths></CallStack><Breakpoints><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><col-names><item>Breakpoint</item><item>_I0</item></col-names><col-widths><item>500</item><item>35</item></col-widths></Breakpoints></Static>
|
||||||
<Windows>
|
<Windows>
|
||||||
|
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@
|
||||||
</Tab>
|
</Tab>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
<SelectedTab>0</SelectedTab></Wnd0><Wnd3>
|
<SelectedTab>0</SelectedTab></Wnd0><Wnd1>
|
||||||
<Tabs>
|
<Tabs>
|
||||||
<Tab>
|
<Tab>
|
||||||
<Identity>TabID-8606-17564</Identity>
|
<Identity>TabID-8606-17564</Identity>
|
||||||
|
@ -55,24 +55,24 @@
|
||||||
<Factory>Workspace</Factory>
|
<Factory>Workspace</Factory>
|
||||||
<Session>
|
<Session>
|
||||||
|
|
||||||
<NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/Demo Source</ExpandedNode><ExpandedNode>RTOSDemo/Demo Source/StandardDemos</ExpandedNode><ExpandedNode>RTOSDemo/Kernel Source</ExpandedNode><ExpandedNode>RTOSDemo/Output</ExpandedNode></NodeDict></Session>
|
<NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/Demo Source</ExpandedNode><ExpandedNode>RTOSDemo/Demo Source/StandardDemos</ExpandedNode><ExpandedNode>RTOSDemo/Demo Source/main_full.c</ExpandedNode><ExpandedNode>RTOSDemo/Kernel Source</ExpandedNode><ExpandedNode>RTOSDemo/Output</ExpandedNode></NodeDict></Session>
|
||||||
</Tab>
|
</Tab>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
<SelectedTab>0</SelectedTab></Wnd3><Wnd4><Tabs><Tab><Identity>TabID-10337-22371</Identity><TabName>Disassembly</TabName><Factory>Disassembly</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd4><Wnd5><Tabs><Tab><Identity>TabID-15419-24732</Identity><TabName>Register</TabName><Factory>Register</Factory><Session><REG1>0</REG1><REG2>0</REG2><Group>0</Group><States>0</States></Session></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd5></Windows>
|
<SelectedTab>0</SelectedTab></Wnd1></Windows>
|
||||||
<Editor>
|
<Editor>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main_full.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>0</YPos2><SelStart2>0</SelStart2><SelEnd2>0</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main_blinky.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>185</YPos2><SelStart2>10664</SelStart2><SelEnd2>10664</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>138</YPos2><SelStart2>6875</SelStart2><SelEnd2>6875</SelEnd2></Tab><ActiveTab>2</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\..\..\..\devtools\IAR Systems\Embedded Workbench 6.5\rl78\inc\ior5f10jgc.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>11</YPos2><SelStart2>821</SelStart2><SelEnd2>821</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\FreeRTOSConfig.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>69</YPos2><SelStart2>0</SelStart2><SelEnd2>0</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\demo_specific_io.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>71</YPos2><SelStart2>4661</SelStart2><SelEnd2>4661</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\tasks.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>2852</YPos2><SelStart2>95683</SelStart2><SelEnd2>95683</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
|
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main_full.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>241</YPos2><SelStart2>13257</SelStart2><SelEnd2>13257</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main_blinky.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>62</YPos2><SelStart2>10664</SelStart2><SelEnd2>10664</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\ExampleISR.s87</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>66</YPos2><SelStart2>4592</SelStart2><SelEnd2>4592</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\IAR\RL78\ISR_Support.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>0</YPos2><SelStart2>0</SelStart2><SelEnd2>0</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>142</YPos2><SelStart2>7176</SelStart2><SelEnd2>7176</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\tasks.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>2220</YPos2><SelStart2>76534</SelStart2><SelEnd2>76534</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\Common\Minimal\dynamic.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>432</YPos2><SelStart2>17463</SelStart2><SelEnd2>17463</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\FreeRTOSConfig.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>71</YPos2><SelStart2>5114</SelStart2><SelEnd2>5116</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\timers.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>461</YPos2><SelStart2>19747</SelStart2><SelEnd2>19747</SelEnd2></Tab><ActiveTab>8</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\RegTest.s87</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>168</YPos2><SelStart2>6068</SelStart2><SelEnd2>6068</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\IAR\RL78\portmacro.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>85</YPos2><SelStart2>5368</SelStart2><SelEnd2>5376</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
|
||||||
<Positions>
|
<Positions>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<Top><Row0><Sizes><Toolbar-01348a30><key>iaridepm.enu1</key></Toolbar-01348a30></Sizes></Row0><Row1><Sizes><Toolbar-049d5188><key>debuggergui.enu1</key></Toolbar-049d5188></Sizes></Row1><Row2><Sizes><Toolbar-0ba72fe0><key>rl78ocd.enu1</key></Toolbar-0ba72fe0></Sizes></Row2><Row3><Sizes/></Row3><Row4><Sizes/></Row4><Row5><Sizes/></Row5><Row6><Sizes/></Row6><Row7><Sizes/></Row7><Row8><Sizes/></Row8><Row9><Sizes/></Row9><Row10><Sizes/></Row10><Row11><Sizes/></Row11><Row12><Sizes/></Row12><Row13><Sizes/></Row13><Row14><Sizes/></Row14><Row15><Sizes/></Row15><Row16><Sizes/></Row16><Row17><Sizes/></Row17><Row18><Sizes/></Row18><Row19><Sizes/></Row19></Top><Left><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>614</Bottom><Right>228</Right><x>-2</x><y>-2</y><xscreen>9</xscreen><yscreen>8</yscreen><sizeHorzCX>5357</sizeHorzCX><sizeHorzCY>8147</sizeHorzCY><sizeVertCX>136905</sizeVertCX><sizeVertCY>627291</sizeVertCY></Rect></Wnd3></Sizes></Row0></Left><Right><Row0><Sizes><Wnd4><Rect><Top>-2</Top><Left>-2</Left><Bottom>614</Bottom><Right>530</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>316667</sizeVertCX><sizeVertCY>627291</sizeVertCY></Rect></Wnd4></Sizes></Row0><Row1><Sizes><Wnd5><Rect><Top>-2</Top><Left>528</Left><Bottom>614</Bottom><Right>833</Right><x>528</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>181548</sizeVertCX><sizeVertCY>627291</sizeVertCY></Rect></Wnd5></Sizes></Row1></Right><Bottom><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>276</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>278</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>283096</sizeHorzCY><sizeVertCX>5357</sizeVertCX><sizeVertCY>8147</sizeVertCY></Rect></Wnd0></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
|
<Top><Row0><Sizes><Toolbar-029D9C80><key>iaridepm.enu1</key></Toolbar-029D9C80></Sizes></Row0><Row1><Sizes><Toolbar-142947E8><key>debuggergui.enu1</key></Toolbar-142947E8></Sizes></Row1><Row2><Sizes><Toolbar-14294A40><key>rl78ocd.enu1</key></Toolbar-14294A40></Sizes></Row2><Row3><Sizes/></Row3><Row4><Sizes/></Row4><Row5><Sizes/></Row5><Row6><Sizes/></Row6><Row7><Sizes/></Row7><Row8><Sizes/></Row8><Row9><Sizes/></Row9><Row10><Sizes/></Row10><Row11><Sizes/></Row11><Row12><Sizes/></Row12><Row13><Sizes/></Row13><Row14><Sizes/></Row14><Row15><Sizes/></Row15><Row16><Sizes/></Row16><Row17><Sizes/></Row17><Row18><Sizes/></Row18><Row19><Sizes/></Row19></Top><Left><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>615</Bottom><Right>345</Right><x>-2</x><y>-2</y><xscreen>9</xscreen><yscreen>8</yscreen><sizeHorzCX>5357</sizeHorzCX><sizeHorzCY>8130</sizeHorzCY><sizeVertCX>206548</sizeVertCX><sizeVertCY>627033</sizeVertCY></Rect></Wnd1></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>277</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>279</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>283537</sizeHorzCY><sizeVertCX>5357</sizeVertCX><sizeVertCY>8130</sizeVertCY></Rect></Wnd0></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
|
||||||
</Desktop>
|
</Desktop>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
[DebugChecksum]
|
[DebugChecksum]
|
||||||
Checksum=1325488880
|
Checksum=-1598462895
|
||||||
[DisAssemblyWindow]
|
[DisAssemblyWindow]
|
||||||
NumStates=_ 1
|
NumStates=_ 1
|
||||||
State 1=_ 1
|
State 1=_ 1
|
||||||
|
@ -8,10 +8,10 @@ Enabled=_ 0
|
||||||
[CodeCoverage]
|
[CodeCoverage]
|
||||||
Enabled=_ 0
|
Enabled=_ 0
|
||||||
[E1]
|
[E1]
|
||||||
Map0=0,0,262143,262144
|
Map0=0,0,131071,131072
|
||||||
Map1=1,1031936,1048319,16384
|
Map1=1,1040128,1048319,8192
|
||||||
MapEntries=2
|
MapEntries=2
|
||||||
HWsettings=3,0,1,2,4,0,1,0,16,1,0
|
HWsettings=2,0,1,2,4,0,1,0,16,17,0
|
||||||
HWsettingsCube=2,4294967295,2,4294967295,0,1,0,0
|
HWsettingsCube=2,4294967295,2,4294967295,0,1,0,0
|
||||||
HWsettingsRsuid=00000000000000000000
|
HWsettingsRsuid=00000000000000000000
|
||||||
EventEntries=0
|
EventEntries=0
|
||||||
|
@ -59,10 +59,10 @@ TraceSettings=128,0,0,0,0,0,8192
|
||||||
TimerSettings=0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
TimerSettings=0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
CoverSettings=1048192,1048207,0
|
CoverSettings=1048192,1048207,0
|
||||||
Version=1,trace.txt
|
Version=1,trace.txt
|
||||||
LastDevFile=DR5F110PJ.DVF
|
LastDevFile=DR5F10WMG.DVF
|
||||||
EmulType=64
|
EmulType=64
|
||||||
BreakToggle=0
|
BreakToggle=0
|
||||||
EventLimits=0,2,2,0,0,0,2
|
EventLimits=0,1,1,0,0,0,1
|
||||||
LastSetupFailed=0
|
LastSetupFailed=0
|
||||||
ForceHwSetup=0
|
ForceHwSetup=0
|
||||||
[StackPlugin]
|
[StackPlugin]
|
||||||
|
@ -147,34 +147,8 @@ ByteLimit=50
|
||||||
ShowArgs=0
|
ShowArgs=0
|
||||||
[Disassembly]
|
[Disassembly]
|
||||||
MixedMode=1
|
MixedMode=1
|
||||||
[InterruptLog]
|
[CallStackLog]
|
||||||
LogEnabled=0
|
|
||||||
SumEnabled=0
|
|
||||||
GraphEnabled=0
|
|
||||||
ShowTimeLog=1
|
|
||||||
ShowTimeSum=1
|
|
||||||
SumSortOrder=0
|
|
||||||
[DataLog]
|
|
||||||
LogEnabled=0
|
|
||||||
SumEnabled=0
|
|
||||||
GraphEnabled=0
|
|
||||||
ShowTimeLog=1
|
|
||||||
ShowTimeSum=1
|
|
||||||
[Breakpoints2]
|
|
||||||
Bp0=_ 0 "STD_CODE2" "{$PROJ_DIR$\RegTest.s87}.172.1" 0 0 1 "" 0 ""
|
|
||||||
Count=1
|
|
||||||
[Interrupts]
|
|
||||||
Enabled=1
|
|
||||||
[MemoryMap]
|
|
||||||
Enabled=0
|
Enabled=0
|
||||||
Base=0
|
|
||||||
UseAuto=0
|
|
||||||
TypeViolation=1
|
|
||||||
UnspecRange=1
|
|
||||||
ActionState=1
|
|
||||||
[Trace1]
|
|
||||||
Enabled=0
|
|
||||||
ShowSource=1
|
|
||||||
[DataSample]
|
[DataSample]
|
||||||
LogEnabled=0
|
LogEnabled=0
|
||||||
GraphEnabled=0
|
GraphEnabled=0
|
||||||
|
@ -190,8 +164,6 @@ LogFile=_ ""
|
||||||
[TraceHelper]
|
[TraceHelper]
|
||||||
Enabled=0
|
Enabled=0
|
||||||
ShowSource=1
|
ShowSource=1
|
||||||
[CallStackLog]
|
|
||||||
Enabled=0
|
|
||||||
[DriverProfiling]
|
[DriverProfiling]
|
||||||
Enabled=0
|
Enabled=0
|
||||||
Mode=0
|
Mode=0
|
||||||
|
@ -200,7 +172,39 @@ Symbiont=0
|
||||||
Exclusions=
|
Exclusions=
|
||||||
[Breakpoints]
|
[Breakpoints]
|
||||||
Count=0
|
Count=0
|
||||||
|
[InterruptLog]
|
||||||
|
LogEnabled=0
|
||||||
|
SumEnabled=0
|
||||||
|
GraphEnabled=0
|
||||||
|
ShowTimeLog=1
|
||||||
|
ShowTimeSum=1
|
||||||
|
SumSortOrder=0
|
||||||
|
[DataLog]
|
||||||
|
LogEnabled=0
|
||||||
|
SumEnabled=0
|
||||||
|
GraphEnabled=0
|
||||||
|
ShowTimeLog=1
|
||||||
|
ShowTimeSum=1
|
||||||
|
[Breakpoints2]
|
||||||
|
Bp0=_ 0 "STD_CODE2" "{$PROJ_DIR$\RegTest.s87}.172.1" 0 0 1 "" 0 ""
|
||||||
|
Bp1=_ 1 "STD_CODE2" "{$PROJ_DIR$\main_full.c}.346.2" 0 0 1 "" 0 ""
|
||||||
|
Bp2=_ 1 "STD_CODE2" "{$PROJ_DIR$\main_full.c}.352.3" 0 0 1 "" 0 ""
|
||||||
|
Count=3
|
||||||
|
[Interrupts]
|
||||||
|
Enabled=1
|
||||||
|
[MemoryMap]
|
||||||
|
Enabled=0
|
||||||
|
Base=0
|
||||||
|
UseAuto=0
|
||||||
|
TypeViolation=1
|
||||||
|
UnspecRange=1
|
||||||
|
ActionState=1
|
||||||
|
[Trace1]
|
||||||
|
Enabled=0
|
||||||
|
ShowSource=1
|
||||||
[Aliases]
|
[Aliases]
|
||||||
A0=_ "C:\Data\RL78_STICK\FreeRTOSV6.1.1\Source\portable\IAR\RL78\portasm.s87" "E:\Data\RL78_STICK\FreeRTOSV6.1.1\Source\portable\IAR\RL78\portasm.s87"
|
A0=_ "C:\Data\RL78_STICK\FreeRTOSV6.1.1\Source\portable\IAR\RL78\portasm.s87" "E:\Data\RL78_STICK\FreeRTOSV6.1.1\Source\portable\IAR\RL78\portasm.s87"
|
||||||
Count=1
|
Count=1
|
||||||
SuppressDialog=1
|
SuppressDialog=1
|
||||||
|
[Simulator]
|
||||||
|
Freq=10000000
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<Workspace>
|
<Workspace>
|
||||||
<ConfigDictionary>
|
<ConfigDictionary>
|
||||||
|
|
||||||
<CurrentConfigs><Project>RTOSDemo/RSKRL78L1C</Project></CurrentConfigs></ConfigDictionary>
|
<CurrentConfigs><Project>RTOSDemo/YRPBRL78G13</Project></CurrentConfigs></ConfigDictionary>
|
||||||
<Desktop>
|
<Desktop>
|
||||||
<Static>
|
<Static>
|
||||||
<Workspace>
|
<Workspace>
|
||||||
|
@ -25,24 +25,24 @@
|
||||||
<Factory>Workspace</Factory>
|
<Factory>Workspace</Factory>
|
||||||
<Session>
|
<Session>
|
||||||
|
|
||||||
<NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/Demo Source</ExpandedNode></NodeDict></Session>
|
<NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/Demo Source</ExpandedNode><ExpandedNode>RTOSDemo/Kernel Source</ExpandedNode></NodeDict></Session>
|
||||||
</Tab>
|
</Tab>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
<SelectedTab>0</SelectedTab></Wnd2><Wnd3><Tabs><Tab><Identity>TabID-4654-17433</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab><Tab><Identity>TabID-7454-1824</Identity><TabName>Find in Files</TabName><Factory>Find-in-Files</Factory><Session/></Tab><Tab><Identity>TabID-32199-1847</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab><Tab><Identity>TabID-16124-30648</Identity><TabName>Ambiguous Definitions</TabName><Factory>Select-Ambiguous-Definitions</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd3></Windows>
|
<SelectedTab>0</SelectedTab></Wnd2><Wnd3><Tabs><Tab><Identity>TabID-4654-17433</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab><Tab><Identity>TabID-7454-1824</Identity><TabName>Find in Files</TabName><Factory>Find-in-Files</Factory><Session/></Tab><Tab><Identity>TabID-16124-30648</Identity><TabName>Ambiguous Definitions</TabName><Factory>Select-Ambiguous-Definitions</Factory><Session/></Tab><Tab><Identity>TabID-21155-6491</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd3></Windows>
|
||||||
<Editor>
|
<Editor>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main_full.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>63</YPos2><SelStart2>0</SelStart2><SelEnd2>0</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main_blinky.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>62</YPos2><SelStart2>10664</SelStart2><SelEnd2>10664</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>60</YPos2><SelStart2>6875</SelStart2><SelEnd2>6875</SelEnd2></Tab><ActiveTab>2</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
|
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>67</YPos2><SelStart2>7176</SelStart2><SelEnd2>7176</SelEnd2></Tab><ActiveTab>0</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
|
||||||
<Positions>
|
<Positions>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<Top><Row0><Sizes><Toolbar-01348a30><key>iaridepm.enu1</key></Toolbar-01348a30></Sizes></Row0><Row1><Sizes/></Row1><Row2><Sizes/></Row2><Row3><Sizes/></Row3><Row4><Sizes/></Row4><Row5><Sizes/></Row5><Row6><Sizes/></Row6><Row7><Sizes/></Row7><Row8><Sizes/></Row8><Row9><Sizes/></Row9><Row10><Sizes/></Row10><Row11><Sizes/></Row11><Row12><Sizes/></Row12><Row13><Sizes/></Row13><Row14><Sizes/></Row14><Row15><Sizes/></Row15><Row16><Sizes/></Row16><Row17><Sizes/></Row17><Row18><Sizes/></Row18><Row19><Sizes/></Row19><Row20><Sizes/></Row20><Row21><Sizes/></Row21><Row22><Sizes/></Row22></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>505</Bottom><Right>443</Right><x>-2</x><y>-2</y><xscreen>12633</xscreen><yscreen>8252</yscreen><sizeHorzCX>7519643</sizeHorzCX><sizeHorzCY>8403259</sizeHorzCY><sizeVertCX>264881</sizeVertCX><sizeVertCY>516293</sizeVertCY></Rect></Wnd2></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>433</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>435</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>442974</sizeHorzCY><sizeVertCX>9869643</sizeVertCX><sizeVertCY>10668024</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
|
<Top><Row0><Sizes><Toolbar-029D9C80><key>iaridepm.enu1</key></Toolbar-029D9C80></Sizes></Row0><Row1><Sizes/></Row1><Row2><Sizes/></Row2><Row3><Sizes/></Row3><Row4><Sizes/></Row4><Row5><Sizes/></Row5><Row6><Sizes/></Row6><Row7><Sizes/></Row7><Row8><Sizes/></Row8><Row9><Sizes/></Row9><Row10><Sizes/></Row10><Row11><Sizes/></Row11><Row12><Sizes/></Row12><Row13><Sizes/></Row13><Row14><Sizes/></Row14><Row15><Sizes/></Row15><Row16><Sizes/></Row16><Row17><Sizes/></Row17><Row18><Sizes/></Row18><Row19><Sizes/></Row19><Row20><Sizes/></Row20><Row21><Sizes/></Row21></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>506</Bottom><Right>443</Right><x>-2</x><y>-2</y><xscreen>12633</xscreen><yscreen>8269</yscreen><sizeHorzCX>7519643</sizeHorzCX><sizeHorzCY>8403455</sizeHorzCY><sizeVertCX>264881</sizeVertCX><sizeVertCY>516260</sizeVertCY></Rect></Wnd2></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>434</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>436</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>443089</sizeHorzCY><sizeVertCX>9869643</sizeVertCX><sizeVertCY>10667683</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
|
||||||
</Desktop>
|
</Desktop>
|
||||||
</Workspace>
|
</Workspace>
|
||||||
|
|
||||||
|
|
|
@ -1814,15 +1814,19 @@ uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
* <PRE>void vTaskNotifyClear( TaskHandle_t xTask );</pre>
|
* <PRE>BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask );</pre>
|
||||||
*
|
*
|
||||||
* Clear the notification state of the task referenced by the handle xTask. The
|
* If the notification state of the task referenced by the handle xTask is
|
||||||
* task's notification value is not altered. Set xTask to NULL to clear the
|
* eNotified, then set the task's notification state to eNotWaitingNotification.
|
||||||
|
* The task's notification value is not altered. Set xTask to NULL to clear the
|
||||||
* notification state of the calling task.
|
* notification state of the calling task.
|
||||||
|
*
|
||||||
|
* @return pdTRUE if the task's notification state was set to
|
||||||
|
* eNotWaitingNotification, otherwise pdFALSE.
|
||||||
* \defgroup vTaskNotifyClear vTaskNotifyClear
|
* \defgroup vTaskNotifyClear vTaskNotifyClear
|
||||||
* \ingroup TaskNotifications
|
* \ingroup TaskNotifications
|
||||||
*/
|
*/
|
||||||
void vTaskNotifyStateClear( TaskHandle_t xTask );
|
BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask );
|
||||||
|
|
||||||
/*-----------------------------------------------------------
|
/*-----------------------------------------------------------
|
||||||
* SCHEDULER INTERNALS AVAILABLE FOR PORTING PURPOSES
|
* SCHEDULER INTERNALS AVAILABLE FOR PORTING PURPOSES
|
||||||
|
|
567
FreeRTOS/Source/portable/GCC/ARM_CR5/port.c
Normal file
567
FreeRTOS/Source/portable/GCC/ARM_CR5/port.c
Normal file
|
@ -0,0 +1,567 @@
|
||||||
|
/*
|
||||||
|
FreeRTOS V8.2.2 - Copyright (C) 2015 Real Time Engineers Ltd.
|
||||||
|
All rights reserved
|
||||||
|
|
||||||
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
|
||||||
|
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. Full license text is available on the following
|
||||||
|
link: http://www.freertos.org/a00114.html
|
||||||
|
|
||||||
|
***************************************************************************
|
||||||
|
* *
|
||||||
|
* FreeRTOS provides completely free yet professionally developed, *
|
||||||
|
* robust, strictly quality controlled, supported, and cross *
|
||||||
|
* platform software that is more than just the market leader, it *
|
||||||
|
* is the industry's de facto standard. *
|
||||||
|
* *
|
||||||
|
* Help yourself get started quickly while simultaneously helping *
|
||||||
|
* to support the FreeRTOS project by purchasing a FreeRTOS *
|
||||||
|
* tutorial book, reference manual, or both: *
|
||||||
|
* http://www.FreeRTOS.org/Documentation *
|
||||||
|
* *
|
||||||
|
***************************************************************************
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading
|
||||||
|
the FAQ page "My application does not run, what could be wrong?". Have you
|
||||||
|
defined configASSERT()?
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/support - In return for receiving this top quality
|
||||||
|
embedded software for free we request you assist our global community by
|
||||||
|
participating in the support forum.
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/training - Investing in training allows your team to
|
||||||
|
be as productive as possible as early as possible. Now you can receive
|
||||||
|
FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
|
||||||
|
Ltd, and the world's leading authority on the world's leading RTOS.
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
||||||
|
including FreeRTOS+Trace - an indispensable productivity tool, a DOS
|
||||||
|
compatible FAT file system, and our tiny thread aware UDP/IP stack.
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
|
||||||
|
Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
|
||||||
|
|
||||||
|
http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
|
||||||
|
Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS
|
||||||
|
licenses offer ticketed support, indemnification and commercial middleware.
|
||||||
|
|
||||||
|
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
|
||||||
|
engineered and independently SIL3 certified version for use in safety and
|
||||||
|
mission critical applications that require provable dependability.
|
||||||
|
|
||||||
|
1 tab == 4 spaces!
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Standard includes. */
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
/* Scheduler includes. */
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "task.h"
|
||||||
|
|
||||||
|
#ifndef configINTERRUPT_CONTROLLER_BASE_ADDRESS
|
||||||
|
#error configINTERRUPT_CONTROLLER_BASE_ADDRESS must be defined. Refer to Cortex-A equivalent: http://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef configINTERRUPT_CONTROLLER_CPU_INTERFACE_OFFSET
|
||||||
|
#error configINTERRUPT_CONTROLLER_CPU_INTERFACE_OFFSET must be defined. Refer to Cortex-A equivalent: http://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef configUNIQUE_INTERRUPT_PRIORITIES
|
||||||
|
#error configUNIQUE_INTERRUPT_PRIORITIES must be defined. Refer to Cortex-A equivalent: http://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef configSETUP_TICK_INTERRUPT
|
||||||
|
#error configSETUP_TICK_INTERRUPT() must be defined. Refer to Cortex-A equivalent: http://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
|
||||||
|
#endif /* configSETUP_TICK_INTERRUPT */
|
||||||
|
|
||||||
|
#ifndef configMAX_API_CALL_INTERRUPT_PRIORITY
|
||||||
|
#error configMAX_API_CALL_INTERRUPT_PRIORITY must be defined. Refer to Cortex-A equivalent: http://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if configMAX_API_CALL_INTERRUPT_PRIORITY == 0
|
||||||
|
#error configMAX_API_CALL_INTERRUPT_PRIORITY must not be set to 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if configMAX_API_CALL_INTERRUPT_PRIORITY > configUNIQUE_INTERRUPT_PRIORITIES
|
||||||
|
#error configMAX_API_CALL_INTERRUPT_PRIORITY must be less than or equal to configUNIQUE_INTERRUPT_PRIORITIES as the lower the numeric priority value the higher the logical interrupt priority
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1
|
||||||
|
/* Check the configuration. */
|
||||||
|
#if( configMAX_PRIORITIES > 32 )
|
||||||
|
#error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32. It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice.
|
||||||
|
#endif
|
||||||
|
#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */
|
||||||
|
|
||||||
|
/* In case security extensions are implemented. */
|
||||||
|
#if configMAX_API_CALL_INTERRUPT_PRIORITY <= ( configUNIQUE_INTERRUPT_PRIORITIES / 2 )
|
||||||
|
#error configMAX_API_CALL_INTERRUPT_PRIORITY must be greater than ( configUNIQUE_INTERRUPT_PRIORITIES / 2 )
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Some vendor specific files default configCLEAR_TICK_INTERRUPT() in
|
||||||
|
portmacro.h. */
|
||||||
|
#ifndef configCLEAR_TICK_INTERRUPT
|
||||||
|
#define configCLEAR_TICK_INTERRUPT()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* A critical section is exited when the critical section nesting count reaches
|
||||||
|
this value. */
|
||||||
|
#define portNO_CRITICAL_NESTING ( ( uint32_t ) 0 )
|
||||||
|
|
||||||
|
/* In all GICs 255 can be written to the priority mask register to unmask all
|
||||||
|
(but the lowest) interrupt priority. */
|
||||||
|
#define portUNMASK_VALUE ( 0xFFUL )
|
||||||
|
|
||||||
|
/* Tasks are not created with a floating point context, but can be given a
|
||||||
|
floating point context after they have been created. A variable is stored as
|
||||||
|
part of the tasks context that holds portNO_FLOATING_POINT_CONTEXT if the task
|
||||||
|
does not have an FPU context, or any other value if the task does have an FPU
|
||||||
|
context. */
|
||||||
|
#define portNO_FLOATING_POINT_CONTEXT ( ( StackType_t ) 0 )
|
||||||
|
|
||||||
|
/* Constants required to setup the initial task context. */
|
||||||
|
#define portINITIAL_SPSR ( ( StackType_t ) 0x1f ) /* System mode, ARM mode, IRQ enabled FIQ enabled. */
|
||||||
|
#define portTHUMB_MODE_BIT ( ( StackType_t ) 0x20 )
|
||||||
|
#define portINTERRUPT_ENABLE_BIT ( 0x80UL )
|
||||||
|
#define portTHUMB_MODE_ADDRESS ( 0x01UL )
|
||||||
|
|
||||||
|
/* Used by portASSERT_IF_INTERRUPT_PRIORITY_INVALID() when ensuring the binary
|
||||||
|
point is zero. */
|
||||||
|
#define portBINARY_POINT_BITS ( ( uint8_t ) 0x03 )
|
||||||
|
|
||||||
|
/* Masks all bits in the APSR other than the mode bits. */
|
||||||
|
#define portAPSR_MODE_BITS_MASK ( 0x1F )
|
||||||
|
|
||||||
|
/* The value of the mode bits in the APSR when the CPU is executing in user
|
||||||
|
mode. */
|
||||||
|
#define portAPSR_USER_MODE ( 0x10 )
|
||||||
|
|
||||||
|
/* The critical section macros only mask interrupts up to an application
|
||||||
|
determined priority level. Sometimes it is necessary to turn interrupt off in
|
||||||
|
the CPU itself before modifying certain hardware registers. */
|
||||||
|
#define portCPU_IRQ_DISABLE() \
|
||||||
|
__asm volatile ( "CPSID i" ); \
|
||||||
|
__asm volatile ( "DSB" ); \
|
||||||
|
__asm volatile ( "ISB" );
|
||||||
|
|
||||||
|
#define portCPU_IRQ_ENABLE() \
|
||||||
|
__asm volatile ( "CPSIE i" ); \
|
||||||
|
__asm volatile ( "DSB" ); \
|
||||||
|
__asm volatile ( "ISB" );
|
||||||
|
|
||||||
|
|
||||||
|
/* Macro to unmask all interrupt priorities. */
|
||||||
|
#define portCLEAR_INTERRUPT_MASK() \
|
||||||
|
{ \
|
||||||
|
portCPU_IRQ_DISABLE(); \
|
||||||
|
portICCPMR_PRIORITY_MASK_REGISTER = portUNMASK_VALUE; \
|
||||||
|
__asm( "DSB \n" \
|
||||||
|
"ISB \n" ); \
|
||||||
|
portCPU_IRQ_ENABLE(); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define portINTERRUPT_PRIORITY_REGISTER_OFFSET 0x400UL
|
||||||
|
#define portMAX_8_BIT_VALUE ( ( uint8_t ) 0xff )
|
||||||
|
#define portBIT_0_SET ( ( uint8_t ) 0x01 )
|
||||||
|
|
||||||
|
/* Let the user override the pre-loading of the initial LR with the address of
|
||||||
|
prvTaskExitError() in case is messes up unwinding of the stack in the
|
||||||
|
debugger. */
|
||||||
|
#ifdef configTASK_RETURN_ADDRESS
|
||||||
|
#define portTASK_RETURN_ADDRESS configTASK_RETURN_ADDRESS
|
||||||
|
#else
|
||||||
|
#define portTASK_RETURN_ADDRESS prvTaskExitError
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Starts the first task executing. This function is necessarily written in
|
||||||
|
* assembly code so is implemented in portASM.s.
|
||||||
|
*/
|
||||||
|
extern void vPortRestoreTaskContext( void );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Used to catch tasks that attempt to return from their implementing function.
|
||||||
|
*/
|
||||||
|
static void prvTaskExitError( void );
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* A variable is used to keep track of the critical section nesting. This
|
||||||
|
variable has to be stored as part of the task context and must be initialised to
|
||||||
|
a non zero value to ensure interrupts don't inadvertently become unmasked before
|
||||||
|
the scheduler starts. As it is stored as part of the task context it will
|
||||||
|
automatically be set to 0 when the first task is started. */
|
||||||
|
volatile uint32_t ulCriticalNesting = 9999UL;
|
||||||
|
|
||||||
|
/* Saved as part of the task context. If ulPortTaskHasFPUContext is non-zero then
|
||||||
|
a floating point context must be saved and restored for the task. */
|
||||||
|
uint32_t ulPortTaskHasFPUContext = pdFALSE;
|
||||||
|
|
||||||
|
/* Set to 1 to pend a context switch from an ISR. */
|
||||||
|
uint32_t ulPortYieldRequired = pdFALSE;
|
||||||
|
|
||||||
|
/* Counts the interrupt nesting depth. A context switch is only performed if
|
||||||
|
if the nesting depth is 0. */
|
||||||
|
uint32_t ulPortInterruptNesting = 0UL;
|
||||||
|
|
||||||
|
/* Used in asm code. */
|
||||||
|
__attribute__(( used )) const uint32_t ulICCIAR = portICCIAR_INTERRUPT_ACKNOWLEDGE_REGISTER_ADDRESS;
|
||||||
|
__attribute__(( used )) const uint32_t ulICCEOIR = portICCEOIR_END_OF_INTERRUPT_REGISTER_ADDRESS;
|
||||||
|
__attribute__(( used )) const uint32_t ulICCPMR = portICCPMR_PRIORITY_MASK_REGISTER_ADDRESS;
|
||||||
|
__attribute__(( used )) const uint32_t ulMaxAPIPriorityMask = ( configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT );
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* See header file for description.
|
||||||
|
*/
|
||||||
|
StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters )
|
||||||
|
{
|
||||||
|
/* Setup the initial stack of the task. The stack is set exactly as
|
||||||
|
expected by the portRESTORE_CONTEXT() macro.
|
||||||
|
|
||||||
|
The fist real value on the stack is the status register, which is set for
|
||||||
|
system mode, with interrupts enabled. A few NULLs are added first to ensure
|
||||||
|
GDB does not try decoding a non-existent return address. */
|
||||||
|
*pxTopOfStack = ( StackType_t ) NULL;
|
||||||
|
pxTopOfStack--;
|
||||||
|
*pxTopOfStack = ( StackType_t ) NULL;
|
||||||
|
pxTopOfStack--;
|
||||||
|
*pxTopOfStack = ( StackType_t ) NULL;
|
||||||
|
pxTopOfStack--;
|
||||||
|
*pxTopOfStack = ( StackType_t ) portINITIAL_SPSR;
|
||||||
|
|
||||||
|
if( ( ( uint32_t ) pxCode & portTHUMB_MODE_ADDRESS ) != 0x00UL )
|
||||||
|
{
|
||||||
|
/* The task will start in THUMB mode. */
|
||||||
|
*pxTopOfStack |= portTHUMB_MODE_BIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
pxTopOfStack--;
|
||||||
|
|
||||||
|
/* Next the return address, which in this case is the start of the task. */
|
||||||
|
*pxTopOfStack = ( StackType_t ) pxCode;
|
||||||
|
pxTopOfStack--;
|
||||||
|
|
||||||
|
/* Next all the registers other than the stack pointer. */
|
||||||
|
*pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* R14 */
|
||||||
|
pxTopOfStack--;
|
||||||
|
*pxTopOfStack = ( StackType_t ) 0x12121212; /* R12 */
|
||||||
|
pxTopOfStack--;
|
||||||
|
*pxTopOfStack = ( StackType_t ) 0x11111111; /* R11 */
|
||||||
|
pxTopOfStack--;
|
||||||
|
*pxTopOfStack = ( StackType_t ) 0x10101010; /* R10 */
|
||||||
|
pxTopOfStack--;
|
||||||
|
*pxTopOfStack = ( StackType_t ) 0x09090909; /* R9 */
|
||||||
|
pxTopOfStack--;
|
||||||
|
*pxTopOfStack = ( StackType_t ) 0x08080808; /* R8 */
|
||||||
|
pxTopOfStack--;
|
||||||
|
*pxTopOfStack = ( StackType_t ) 0x07070707; /* R7 */
|
||||||
|
pxTopOfStack--;
|
||||||
|
*pxTopOfStack = ( StackType_t ) 0x06060606; /* R6 */
|
||||||
|
pxTopOfStack--;
|
||||||
|
*pxTopOfStack = ( StackType_t ) 0x05050505; /* R5 */
|
||||||
|
pxTopOfStack--;
|
||||||
|
*pxTopOfStack = ( StackType_t ) 0x04040404; /* R4 */
|
||||||
|
pxTopOfStack--;
|
||||||
|
*pxTopOfStack = ( StackType_t ) 0x03030303; /* R3 */
|
||||||
|
pxTopOfStack--;
|
||||||
|
*pxTopOfStack = ( StackType_t ) 0x02020202; /* R2 */
|
||||||
|
pxTopOfStack--;
|
||||||
|
*pxTopOfStack = ( StackType_t ) 0x01010101; /* R1 */
|
||||||
|
pxTopOfStack--;
|
||||||
|
*pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */
|
||||||
|
pxTopOfStack--;
|
||||||
|
|
||||||
|
/* The task will start with a critical nesting count of 0 as interrupts are
|
||||||
|
enabled. */
|
||||||
|
*pxTopOfStack = portNO_CRITICAL_NESTING;
|
||||||
|
pxTopOfStack--;
|
||||||
|
|
||||||
|
/* The task will start without a floating point context. A task that uses
|
||||||
|
the floating point hardware must call vPortTaskUsesFPU() before executing
|
||||||
|
any floating point instructions. */
|
||||||
|
*pxTopOfStack = portNO_FLOATING_POINT_CONTEXT;
|
||||||
|
|
||||||
|
return pxTopOfStack;
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void prvTaskExitError( void )
|
||||||
|
{
|
||||||
|
/* A function that implements a task must not exit or attempt to return to
|
||||||
|
its caller as there is nothing to return to. If a task wants to exit it
|
||||||
|
should instead call vTaskDelete( NULL ).
|
||||||
|
|
||||||
|
Artificially force an assert() to be triggered if configASSERT() is
|
||||||
|
defined, then stop here so application writers can catch the error. */
|
||||||
|
configASSERT( ulPortInterruptNesting == ~0UL );
|
||||||
|
portDISABLE_INTERRUPTS();
|
||||||
|
for( ;; );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
BaseType_t xPortStartScheduler( void )
|
||||||
|
{
|
||||||
|
uint32_t ulAPSR, ulCycles = 8; /* 8 bits per byte. */
|
||||||
|
|
||||||
|
#if( configASSERT_DEFINED == 1 )
|
||||||
|
{
|
||||||
|
volatile uint32_t ulOriginalPriority;
|
||||||
|
volatile uint8_t * const pucFirstUserPriorityRegister = ( volatile uint8_t * const ) ( configINTERRUPT_CONTROLLER_BASE_ADDRESS + portINTERRUPT_PRIORITY_REGISTER_OFFSET );
|
||||||
|
volatile uint8_t ucMaxPriorityValue;
|
||||||
|
|
||||||
|
/* Determine how many priority bits are implemented in the GIC.
|
||||||
|
|
||||||
|
Save the interrupt priority value that is about to be clobbered. */
|
||||||
|
ulOriginalPriority = *pucFirstUserPriorityRegister;
|
||||||
|
|
||||||
|
/* Determine the number of priority bits available. First write to
|
||||||
|
all possible bits. */
|
||||||
|
*pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE;
|
||||||
|
|
||||||
|
/* Read the value back to see how many bits stuck. */
|
||||||
|
ucMaxPriorityValue = *pucFirstUserPriorityRegister;
|
||||||
|
|
||||||
|
/* Shift to the least significant bits. */
|
||||||
|
while( ( ucMaxPriorityValue & portBIT_0_SET ) != portBIT_0_SET )
|
||||||
|
{
|
||||||
|
ucMaxPriorityValue >>= ( uint8_t ) 0x01;
|
||||||
|
|
||||||
|
/* If ulCycles reaches 0 then ucMaxPriorityValue must have been
|
||||||
|
read as 0, indicating a misconfiguration. */
|
||||||
|
ulCycles--;
|
||||||
|
if( ulCycles == 0 )
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sanity check configUNIQUE_INTERRUPT_PRIORITIES matches the read
|
||||||
|
value. */
|
||||||
|
// configASSERT( ucMaxPriorityValue == portLOWEST_INTERRUPT_PRIORITY );
|
||||||
|
|
||||||
|
/* Restore the clobbered interrupt priority register to its original
|
||||||
|
value. */
|
||||||
|
*pucFirstUserPriorityRegister = ulOriginalPriority;
|
||||||
|
}
|
||||||
|
#endif /* conifgASSERT_DEFINED */
|
||||||
|
|
||||||
|
/* Only continue if the CPU is not in User mode. The CPU must be in a
|
||||||
|
Privileged mode for the scheduler to start. */
|
||||||
|
__asm volatile ( "MRS %0, APSR" : "=r" ( ulAPSR ) );
|
||||||
|
ulAPSR &= portAPSR_MODE_BITS_MASK;
|
||||||
|
configASSERT( ulAPSR != portAPSR_USER_MODE );
|
||||||
|
|
||||||
|
if( ulAPSR != portAPSR_USER_MODE )
|
||||||
|
{
|
||||||
|
/* Only continue if the binary point value is set to its lowest possible
|
||||||
|
setting. See the comments in vPortValidateInterruptPriority() below for
|
||||||
|
more information. */
|
||||||
|
configASSERT( ( portICCBPR_BINARY_POINT_REGISTER & portBINARY_POINT_BITS ) <= portMAX_BINARY_POINT_VALUE );
|
||||||
|
|
||||||
|
if( ( portICCBPR_BINARY_POINT_REGISTER & portBINARY_POINT_BITS ) <= portMAX_BINARY_POINT_VALUE )
|
||||||
|
{
|
||||||
|
/* Interrupts are turned off in the CPU itself to ensure tick does
|
||||||
|
not execute while the scheduler is being started. Interrupts are
|
||||||
|
automatically turned back on in the CPU when the first task starts
|
||||||
|
executing. */
|
||||||
|
portCPU_IRQ_DISABLE();
|
||||||
|
|
||||||
|
/* Start the timer that generates the tick ISR. */
|
||||||
|
configSETUP_TICK_INTERRUPT();
|
||||||
|
|
||||||
|
/* Start the first task executing. */
|
||||||
|
vPortRestoreTaskContext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Will only get here if xTaskStartScheduler() was called with the CPU in
|
||||||
|
a non-privileged mode or the binary point register was not set to its lowest
|
||||||
|
possible value. prvTaskExitError() is referenced to prevent a compiler
|
||||||
|
warning about it being defined but not referenced in the case that the user
|
||||||
|
defines their own exit address. */
|
||||||
|
( void ) prvTaskExitError;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vPortEndScheduler( void )
|
||||||
|
{
|
||||||
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
|
Artificially force an assert. */
|
||||||
|
configASSERT( ulCriticalNesting == 1000UL );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vPortEnterCritical( void )
|
||||||
|
{
|
||||||
|
/* Mask interrupts up to the max syscall interrupt priority. */
|
||||||
|
ulPortSetInterruptMask();
|
||||||
|
|
||||||
|
/* Now interrupts are disabled ulCriticalNesting can be accessed
|
||||||
|
directly. Increment ulCriticalNesting to keep a count of how many times
|
||||||
|
portENTER_CRITICAL() has been called. */
|
||||||
|
ulCriticalNesting++;
|
||||||
|
|
||||||
|
/* This is not the interrupt safe version of the enter critical function so
|
||||||
|
assert() if it is being called from an interrupt context. Only API
|
||||||
|
functions that end in "FromISR" can be used in an interrupt. Only assert if
|
||||||
|
the critical nesting count is 1 to protect against recursive calls if the
|
||||||
|
assert function also uses a critical section. */
|
||||||
|
if( ulCriticalNesting == 1 )
|
||||||
|
{
|
||||||
|
configASSERT( ulPortInterruptNesting == 0 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vPortExitCritical( void )
|
||||||
|
{
|
||||||
|
if( ulCriticalNesting > portNO_CRITICAL_NESTING )
|
||||||
|
{
|
||||||
|
/* Decrement the nesting count as the critical section is being
|
||||||
|
exited. */
|
||||||
|
ulCriticalNesting--;
|
||||||
|
|
||||||
|
/* If the nesting level has reached zero then all interrupt
|
||||||
|
priorities must be re-enabled. */
|
||||||
|
if( ulCriticalNesting == portNO_CRITICAL_NESTING )
|
||||||
|
{
|
||||||
|
/* Critical nesting has reached zero so all interrupt priorities
|
||||||
|
should be unmasked. */
|
||||||
|
portCLEAR_INTERRUPT_MASK();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void FreeRTOS_Tick_Handler( void )
|
||||||
|
{
|
||||||
|
/* Set interrupt mask before altering scheduler structures. The tick
|
||||||
|
handler runs at the lowest priority, so interrupts cannot already be masked,
|
||||||
|
so there is no need to save and restore the current mask value. It is
|
||||||
|
necessary to turn off interrupts in the CPU itself while the ICCPMR is being
|
||||||
|
updated. */
|
||||||
|
portCPU_IRQ_DISABLE();
|
||||||
|
portICCPMR_PRIORITY_MASK_REGISTER = ( uint32_t ) ( configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT );
|
||||||
|
__asm volatile ( "dsb \n"
|
||||||
|
"isb \n" );
|
||||||
|
portCPU_IRQ_ENABLE();
|
||||||
|
|
||||||
|
/* Increment the RTOS tick. */
|
||||||
|
if( xTaskIncrementTick() != pdFALSE )
|
||||||
|
{
|
||||||
|
ulPortYieldRequired = pdTRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ensure all interrupt priorities are active again. */
|
||||||
|
portCLEAR_INTERRUPT_MASK();
|
||||||
|
configCLEAR_TICK_INTERRUPT();
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vPortTaskUsesFPU( void )
|
||||||
|
{
|
||||||
|
uint32_t ulInitialFPSCR = 0;
|
||||||
|
|
||||||
|
/* A task is registering the fact that it needs an FPU context. Set the
|
||||||
|
FPU flag (which is saved as part of the task context). */
|
||||||
|
ulPortTaskHasFPUContext = pdTRUE;
|
||||||
|
|
||||||
|
/* Initialise the floating point status register. */
|
||||||
|
__asm volatile ( "FMXR FPSCR, %0" :: "r" (ulInitialFPSCR) );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vPortClearInterruptMask( uint32_t ulNewMaskValue )
|
||||||
|
{
|
||||||
|
if( ulNewMaskValue == pdFALSE )
|
||||||
|
{
|
||||||
|
portCLEAR_INTERRUPT_MASK();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
uint32_t ulPortSetInterruptMask( void )
|
||||||
|
{
|
||||||
|
uint32_t ulReturn;
|
||||||
|
|
||||||
|
/* Interrupt in the CPU must be turned off while the ICCPMR is being
|
||||||
|
updated. */
|
||||||
|
portCPU_IRQ_DISABLE();
|
||||||
|
if( portICCPMR_PRIORITY_MASK_REGISTER == ( uint32_t ) ( configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT ) )
|
||||||
|
{
|
||||||
|
/* Interrupts were already masked. */
|
||||||
|
ulReturn = pdTRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ulReturn = pdFALSE;
|
||||||
|
portICCPMR_PRIORITY_MASK_REGISTER = ( uint32_t ) ( configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT );
|
||||||
|
__asm volatile ( "dsb \n"
|
||||||
|
"isb \n" );
|
||||||
|
}
|
||||||
|
portCPU_IRQ_ENABLE();
|
||||||
|
|
||||||
|
return ulReturn;
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
#if( configASSERT_DEFINED == 1 )
|
||||||
|
|
||||||
|
void vPortValidateInterruptPriority( void )
|
||||||
|
{
|
||||||
|
/* The following assertion will fail if a service routine (ISR) for
|
||||||
|
an interrupt that has been assigned a priority above
|
||||||
|
configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API
|
||||||
|
function. ISR safe FreeRTOS API functions must *only* be called
|
||||||
|
from interrupts that have been assigned a priority at or below
|
||||||
|
configMAX_SYSCALL_INTERRUPT_PRIORITY.
|
||||||
|
|
||||||
|
Numerically low interrupt priority numbers represent logically high
|
||||||
|
interrupt priorities, therefore the priority of the interrupt must
|
||||||
|
be set to a value equal to or numerically *higher* than
|
||||||
|
configMAX_SYSCALL_INTERRUPT_PRIORITY.
|
||||||
|
|
||||||
|
FreeRTOS maintains separate thread and ISR API functions to ensure
|
||||||
|
interrupt entry is as fast and simple as possible. */
|
||||||
|
|
||||||
|
configASSERT( portICCRPR_RUNNING_PRIORITY_REGISTER >= ( uint32_t ) ( configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT ) );
|
||||||
|
|
||||||
|
/* Priority grouping: The interrupt controller (GIC) allows the bits
|
||||||
|
that define each interrupt's priority to be split between bits that
|
||||||
|
define the interrupt's pre-emption priority bits and bits that define
|
||||||
|
the interrupt's sub-priority. For simplicity all bits must be defined
|
||||||
|
to be pre-emption priority bits. The following assertion will fail if
|
||||||
|
this is not the case (if some bits represent a sub-priority).
|
||||||
|
|
||||||
|
The priority grouping is configured by the GIC's binary point register
|
||||||
|
(ICCBPR). Writting 0 to ICCBPR will ensure it is set to its lowest
|
||||||
|
possible value (which may be above 0). */
|
||||||
|
configASSERT( ( portICCBPR_BINARY_POINT_REGISTER & portBINARY_POINT_BITS ) <= portMAX_BINARY_POINT_VALUE );
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* configASSERT_DEFINED */
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
325
FreeRTOS/Source/portable/GCC/ARM_CR5/portASM.S
Normal file
325
FreeRTOS/Source/portable/GCC/ARM_CR5/portASM.S
Normal file
|
@ -0,0 +1,325 @@
|
||||||
|
/*
|
||||||
|
FreeRTOS V8.2.2 - Copyright (C) 2015 Real Time Engineers Ltd.
|
||||||
|
All rights reserved
|
||||||
|
|
||||||
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
|
||||||
|
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. Full license text is available on the following
|
||||||
|
link: http://www.freertos.org/a00114.html
|
||||||
|
|
||||||
|
***************************************************************************
|
||||||
|
* *
|
||||||
|
* FreeRTOS provides completely free yet professionally developed, *
|
||||||
|
* robust, strictly quality controlled, supported, and cross *
|
||||||
|
* platform software that is more than just the market leader, it *
|
||||||
|
* is the industry's de facto standard. *
|
||||||
|
* *
|
||||||
|
* Help yourself get started quickly while simultaneously helping *
|
||||||
|
* to support the FreeRTOS project by purchasing a FreeRTOS *
|
||||||
|
* tutorial book, reference manual, or both: *
|
||||||
|
* http://www.FreeRTOS.org/Documentation *
|
||||||
|
* *
|
||||||
|
***************************************************************************
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading
|
||||||
|
the FAQ page "My application does not run, what could be wrong?". Have you
|
||||||
|
defined configASSERT()?
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/support - In return for receiving this top quality
|
||||||
|
embedded software for free we request you assist our global community by
|
||||||
|
participating in the support forum.
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/training - Investing in training allows your team to
|
||||||
|
be as productive as possible as early as possible. Now you can receive
|
||||||
|
FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
|
||||||
|
Ltd, and the world's leading authority on the world's leading RTOS.
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
||||||
|
including FreeRTOS+Trace - an indispensable productivity tool, a DOS
|
||||||
|
compatible FAT file system, and our tiny thread aware UDP/IP stack.
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
|
||||||
|
Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
|
||||||
|
|
||||||
|
http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
|
||||||
|
Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS
|
||||||
|
licenses offer ticketed support, indemnification and commercial middleware.
|
||||||
|
|
||||||
|
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
|
||||||
|
engineered and independently SIL3 certified version for use in safety and
|
||||||
|
mission critical applications that require provable dependability.
|
||||||
|
|
||||||
|
1 tab == 4 spaces!
|
||||||
|
*/
|
||||||
|
|
||||||
|
.text
|
||||||
|
.arm
|
||||||
|
|
||||||
|
.set SYS_MODE, 0x1f
|
||||||
|
.set SVC_MODE, 0x13
|
||||||
|
.set IRQ_MODE, 0x12
|
||||||
|
|
||||||
|
/* Hardware registers. */
|
||||||
|
.extern ulICCIAR
|
||||||
|
.extern ulICCEOIR
|
||||||
|
.extern ulICCPMR
|
||||||
|
|
||||||
|
/* Variables and functions. */
|
||||||
|
.extern ulMaxAPIPriorityMask
|
||||||
|
.extern _freertos_vector_table
|
||||||
|
.extern pxCurrentTCB
|
||||||
|
.extern vTaskSwitchContext
|
||||||
|
.extern vApplicationIRQHandler
|
||||||
|
.extern ulPortInterruptNesting
|
||||||
|
.extern ulPortTaskHasFPUContext
|
||||||
|
|
||||||
|
.global FreeRTOS_IRQ_Handler
|
||||||
|
.global FreeRTOS_SWI_Handler
|
||||||
|
.global vPortRestoreTaskContext
|
||||||
|
.global vPortInstallFreeRTOSVectorTable
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.macro portSAVE_CONTEXT
|
||||||
|
|
||||||
|
/* Save the LR and SPSR onto the system mode stack before switching to
|
||||||
|
system mode to save the remaining system mode registers. */
|
||||||
|
SRSDB sp!, #SYS_MODE
|
||||||
|
CPS #SYS_MODE
|
||||||
|
PUSH {R0-R12, R14}
|
||||||
|
|
||||||
|
/* Push the critical nesting count. */
|
||||||
|
LDR R2, ulCriticalNestingConst
|
||||||
|
LDR R1, [R2]
|
||||||
|
PUSH {R1}
|
||||||
|
|
||||||
|
/* Does the task have a floating point context that needs saving? If
|
||||||
|
ulPortTaskHasFPUContext is 0 then no. */
|
||||||
|
LDR R2, ulPortTaskHasFPUContextConst
|
||||||
|
LDR R3, [R2]
|
||||||
|
CMP R3, #0
|
||||||
|
|
||||||
|
/* Save the floating point context, if any. */
|
||||||
|
FMRXNE R1, FPSCR
|
||||||
|
VPUSHNE {D0-D15}
|
||||||
|
/*VPUSHNE {D16-D31}*/
|
||||||
|
PUSHNE {R1}
|
||||||
|
|
||||||
|
/* Save ulPortTaskHasFPUContext itself. */
|
||||||
|
PUSH {R3}
|
||||||
|
|
||||||
|
/* Save the stack pointer in the TCB. */
|
||||||
|
LDR R0, pxCurrentTCBConst
|
||||||
|
LDR R1, [R0]
|
||||||
|
STR SP, [R1]
|
||||||
|
|
||||||
|
.endm
|
||||||
|
|
||||||
|
; /**********************************************************************/
|
||||||
|
|
||||||
|
.macro portRESTORE_CONTEXT
|
||||||
|
|
||||||
|
/* Set the SP to point to the stack of the task being restored. */
|
||||||
|
LDR R0, pxCurrentTCBConst
|
||||||
|
LDR R1, [R0]
|
||||||
|
LDR SP, [R1]
|
||||||
|
|
||||||
|
/* Is there a floating point context to restore? If the restored
|
||||||
|
ulPortTaskHasFPUContext is zero then no. */
|
||||||
|
LDR R0, ulPortTaskHasFPUContextConst
|
||||||
|
POP {R1}
|
||||||
|
STR R1, [R0]
|
||||||
|
CMP R1, #0
|
||||||
|
|
||||||
|
/* Restore the floating point context, if any. */
|
||||||
|
POPNE {R0}
|
||||||
|
/*VPOPNE {D16-D31}*/
|
||||||
|
VPOPNE {D0-D15}
|
||||||
|
VMSRNE FPSCR, R0
|
||||||
|
|
||||||
|
/* Restore the critical section nesting depth. */
|
||||||
|
LDR R0, ulCriticalNestingConst
|
||||||
|
POP {R1}
|
||||||
|
STR R1, [R0]
|
||||||
|
|
||||||
|
/* Ensure the priority mask is correct for the critical nesting depth. */
|
||||||
|
LDR R2, ulICCPMRConst
|
||||||
|
LDR R2, [R2]
|
||||||
|
CMP R1, #0
|
||||||
|
MOVEQ R4, #255
|
||||||
|
LDRNE R4, ulMaxAPIPriorityMaskConst
|
||||||
|
LDRNE R4, [R4]
|
||||||
|
STR R4, [R2]
|
||||||
|
|
||||||
|
/* Restore all system mode registers other than the SP (which is already
|
||||||
|
being used). */
|
||||||
|
POP {R0-R12, R14}
|
||||||
|
|
||||||
|
/* Return to the task code, loading CPSR on the way. */
|
||||||
|
RFEIA sp!
|
||||||
|
|
||||||
|
.endm
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* SVC handler is used to start the scheduler.
|
||||||
|
*****************************************************************************/
|
||||||
|
.align 4
|
||||||
|
.type FreeRTOS_SWI_Handler, %function
|
||||||
|
FreeRTOS_SWI_Handler:
|
||||||
|
/* Save the context of the current task and select a new task to run. */
|
||||||
|
portSAVE_CONTEXT
|
||||||
|
LDR R0, vTaskSwitchContextConst
|
||||||
|
BLX R0
|
||||||
|
portRESTORE_CONTEXT
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* vPortRestoreTaskContext is used to start the scheduler.
|
||||||
|
*****************************************************************************/
|
||||||
|
.type vPortRestoreTaskContext, %function
|
||||||
|
vPortRestoreTaskContext:
|
||||||
|
/* Switch to system mode. */
|
||||||
|
CPS #SYS_MODE
|
||||||
|
portRESTORE_CONTEXT
|
||||||
|
|
||||||
|
.align 4
|
||||||
|
.type FreeRTOS_IRQ_Handler, %function
|
||||||
|
FreeRTOS_IRQ_Handler:
|
||||||
|
|
||||||
|
/* Return to the interrupted instruction. */
|
||||||
|
SUB lr, lr, #4
|
||||||
|
|
||||||
|
/* Push the return address and SPSR. */
|
||||||
|
PUSH {lr}
|
||||||
|
MRS lr, SPSR
|
||||||
|
PUSH {lr}
|
||||||
|
|
||||||
|
/* Change to supervisor mode to allow reentry. */
|
||||||
|
CPS #SVC_MODE
|
||||||
|
|
||||||
|
/* Push used registers. */
|
||||||
|
PUSH {r0-r4, r12}
|
||||||
|
|
||||||
|
/* Increment nesting count. r3 holds the address of ulPortInterruptNesting
|
||||||
|
for future use. r1 holds the original ulPortInterruptNesting value for
|
||||||
|
future use. */
|
||||||
|
LDR r3, ulPortInterruptNestingConst
|
||||||
|
LDR r1, [r3]
|
||||||
|
ADD r4, r1, #1
|
||||||
|
STR r4, [r3]
|
||||||
|
|
||||||
|
/* Read value from the interrupt acknowledge register, which is stored in r0
|
||||||
|
for future parameter and interrupt clearing use. */
|
||||||
|
LDR r2, ulICCIARConst
|
||||||
|
LDR r2, [r2]
|
||||||
|
LDR r0, [r2]
|
||||||
|
|
||||||
|
/* Ensure bit 2 of the stack pointer is clear. r2 holds the bit 2 value for
|
||||||
|
future use. */
|
||||||
|
MOV r2, sp
|
||||||
|
AND r2, r2, #4
|
||||||
|
SUB sp, sp, r2
|
||||||
|
|
||||||
|
/* Call the interrupt handler. */
|
||||||
|
PUSH {r0-r3, lr}
|
||||||
|
LDR r1, vApplicationIRQHandlerConst
|
||||||
|
BLX r1
|
||||||
|
POP {r0-r3, lr}
|
||||||
|
ADD sp, sp, r2
|
||||||
|
|
||||||
|
CPSID i
|
||||||
|
DSB
|
||||||
|
ISB
|
||||||
|
|
||||||
|
/* Write the value read from ICCIAR to ICCEOIR. */
|
||||||
|
LDR r4, ulICCEOIRConst
|
||||||
|
LDR r4, [r4]
|
||||||
|
STR r0, [r4]
|
||||||
|
|
||||||
|
/* Restore the old nesting count. */
|
||||||
|
STR r1, [r3]
|
||||||
|
|
||||||
|
/* A context switch is never performed if the nesting count is not 0. */
|
||||||
|
CMP r1, #0
|
||||||
|
BNE exit_without_switch
|
||||||
|
|
||||||
|
/* Did the interrupt request a context switch? r1 holds the address of
|
||||||
|
ulPortYieldRequired and r0 the value of ulPortYieldRequired for future
|
||||||
|
use. */
|
||||||
|
LDR r1, =ulPortYieldRequired
|
||||||
|
LDR r0, [r1]
|
||||||
|
CMP r0, #0
|
||||||
|
BNE switch_before_exit
|
||||||
|
|
||||||
|
exit_without_switch:
|
||||||
|
/* No context switch. Restore used registers, LR_irq and SPSR before
|
||||||
|
returning. */
|
||||||
|
POP {r0-r4, r12}
|
||||||
|
CPS #IRQ_MODE
|
||||||
|
POP {LR}
|
||||||
|
MSR SPSR_cxsf, LR
|
||||||
|
POP {LR}
|
||||||
|
MOVS PC, LR
|
||||||
|
|
||||||
|
switch_before_exit:
|
||||||
|
/* A context swtich is to be performed. Clear the context switch pending
|
||||||
|
flag. */
|
||||||
|
MOV r0, #0
|
||||||
|
STR r0, [r1]
|
||||||
|
|
||||||
|
/* Restore used registers, LR-irq and SPSR before saving the context
|
||||||
|
to the task stack. */
|
||||||
|
POP {r0-r4, r12}
|
||||||
|
CPS #IRQ_MODE
|
||||||
|
POP {LR}
|
||||||
|
MSR SPSR_cxsf, LR
|
||||||
|
POP {LR}
|
||||||
|
portSAVE_CONTEXT
|
||||||
|
|
||||||
|
/* Call the function that selects the new task to execute.
|
||||||
|
vTaskSwitchContext() if vTaskSwitchContext() uses LDRD or STRD
|
||||||
|
instructions, or 8 byte aligned stack allocated data. LR does not need
|
||||||
|
saving as a new LR will be loaded by portRESTORE_CONTEXT anyway. */
|
||||||
|
LDR R0, vTaskSwitchContextConst
|
||||||
|
BLX R0
|
||||||
|
|
||||||
|
/* Restore the context of, and branch to, the task selected to execute
|
||||||
|
next. */
|
||||||
|
portRESTORE_CONTEXT
|
||||||
|
|
||||||
|
ulICCIARConst: .word ulICCIAR
|
||||||
|
ulICCEOIRConst: .word ulICCEOIR
|
||||||
|
ulICCPMRConst: .word ulICCPMR
|
||||||
|
pxCurrentTCBConst: .word pxCurrentTCB
|
||||||
|
ulCriticalNestingConst: .word ulCriticalNesting
|
||||||
|
ulPortTaskHasFPUContextConst: .word ulPortTaskHasFPUContext
|
||||||
|
ulMaxAPIPriorityMaskConst: .word ulMaxAPIPriorityMask
|
||||||
|
vTaskSwitchContextConst: .word vTaskSwitchContext
|
||||||
|
vApplicationIRQHandlerConst: .word vApplicationIRQHandler
|
||||||
|
ulPortInterruptNestingConst: .word ulPortInterruptNesting
|
||||||
|
|
||||||
|
.end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
235
FreeRTOS/Source/portable/GCC/ARM_CR5/portmacro.h
Normal file
235
FreeRTOS/Source/portable/GCC/ARM_CR5/portmacro.h
Normal file
|
@ -0,0 +1,235 @@
|
||||||
|
/*
|
||||||
|
FreeRTOS V8.2.2 - Copyright (C) 2015 Real Time Engineers Ltd.
|
||||||
|
All rights reserved
|
||||||
|
|
||||||
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
|
||||||
|
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. Full license text is available on the following
|
||||||
|
link: http://www.freertos.org/a00114.html
|
||||||
|
|
||||||
|
***************************************************************************
|
||||||
|
* *
|
||||||
|
* FreeRTOS provides completely free yet professionally developed, *
|
||||||
|
* robust, strictly quality controlled, supported, and cross *
|
||||||
|
* platform software that is more than just the market leader, it *
|
||||||
|
* is the industry's de facto standard. *
|
||||||
|
* *
|
||||||
|
* Help yourself get started quickly while simultaneously helping *
|
||||||
|
* to support the FreeRTOS project by purchasing a FreeRTOS *
|
||||||
|
* tutorial book, reference manual, or both: *
|
||||||
|
* http://www.FreeRTOS.org/Documentation *
|
||||||
|
* *
|
||||||
|
***************************************************************************
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading
|
||||||
|
the FAQ page "My application does not run, what could be wrong?". Have you
|
||||||
|
defined configASSERT()?
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/support - In return for receiving this top quality
|
||||||
|
embedded software for free we request you assist our global community by
|
||||||
|
participating in the support forum.
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/training - Investing in training allows your team to
|
||||||
|
be as productive as possible as early as possible. Now you can receive
|
||||||
|
FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
|
||||||
|
Ltd, and the world's leading authority on the world's leading RTOS.
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
||||||
|
including FreeRTOS+Trace - an indispensable productivity tool, a DOS
|
||||||
|
compatible FAT file system, and our tiny thread aware UDP/IP stack.
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
|
||||||
|
Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
|
||||||
|
|
||||||
|
http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
|
||||||
|
Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS
|
||||||
|
licenses offer ticketed support, indemnification and commercial middleware.
|
||||||
|
|
||||||
|
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
|
||||||
|
engineered and independently SIL3 certified version for use in safety and
|
||||||
|
mission critical applications that require provable dependability.
|
||||||
|
|
||||||
|
1 tab == 4 spaces!
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PORTMACRO_H
|
||||||
|
#define PORTMACRO_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------
|
||||||
|
* Port specific definitions.
|
||||||
|
*
|
||||||
|
* The settings in this file configure FreeRTOS correctly for the given hardware
|
||||||
|
* and compiler.
|
||||||
|
*
|
||||||
|
* These settings should not be altered.
|
||||||
|
*-----------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Type definitions. */
|
||||||
|
#define portCHAR char
|
||||||
|
#define portFLOAT float
|
||||||
|
#define portDOUBLE double
|
||||||
|
#define portLONG long
|
||||||
|
#define portSHORT short
|
||||||
|
#define portSTACK_TYPE uint32_t
|
||||||
|
#define portBASE_TYPE long
|
||||||
|
|
||||||
|
typedef portSTACK_TYPE StackType_t;
|
||||||
|
typedef long BaseType_t;
|
||||||
|
typedef unsigned long UBaseType_t;
|
||||||
|
|
||||||
|
typedef uint32_t TickType_t;
|
||||||
|
#define portMAX_DELAY ( TickType_t ) 0xffffffffUL
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Hardware specifics. */
|
||||||
|
#define portSTACK_GROWTH ( -1 )
|
||||||
|
#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
|
||||||
|
#define portBYTE_ALIGNMENT 8
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Task utilities. */
|
||||||
|
|
||||||
|
/* Called at the end of an ISR that can cause a context switch. */
|
||||||
|
#define portEND_SWITCHING_ISR( xSwitchRequired )\
|
||||||
|
{ \
|
||||||
|
extern uint32_t ulPortYieldRequired; \
|
||||||
|
\
|
||||||
|
if( xSwitchRequired != pdFALSE ) \
|
||||||
|
{ \
|
||||||
|
ulPortYieldRequired = pdTRUE; \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define portYIELD_FROM_ISR( x ) portEND_SWITCHING_ISR( x )
|
||||||
|
#define portYIELD() __asm volatile ( "SWI 0" );
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------
|
||||||
|
* Critical section control
|
||||||
|
*----------------------------------------------------------*/
|
||||||
|
|
||||||
|
extern void vPortEnterCritical( void );
|
||||||
|
extern void vPortExitCritical( void );
|
||||||
|
extern uint32_t ulPortSetInterruptMask( void );
|
||||||
|
extern void vPortClearInterruptMask( uint32_t ulNewMaskValue );
|
||||||
|
extern void vPortInstallFreeRTOSVectorTable( void );
|
||||||
|
|
||||||
|
/* These macros do not globally disable/enable interrupts. They do mask off
|
||||||
|
interrupts that have a priority below configMAX_API_CALL_INTERRUPT_PRIORITY. */
|
||||||
|
#define portENTER_CRITICAL() vPortEnterCritical();
|
||||||
|
#define portEXIT_CRITICAL() vPortExitCritical();
|
||||||
|
#define portDISABLE_INTERRUPTS() ulPortSetInterruptMask()
|
||||||
|
#define portENABLE_INTERRUPTS() vPortClearInterruptMask( 0 )
|
||||||
|
#define portSET_INTERRUPT_MASK_FROM_ISR() ulPortSetInterruptMask()
|
||||||
|
#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortClearInterruptMask(x)
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Task function macros as described on the FreeRTOS.org WEB site. These are
|
||||||
|
not required for this port but included in case common demo code that uses these
|
||||||
|
macros is used. */
|
||||||
|
#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters )
|
||||||
|
#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )
|
||||||
|
|
||||||
|
/* Prototype of the FreeRTOS tick handler. This must be installed as the
|
||||||
|
handler for whichever peripheral is used to generate the RTOS tick. */
|
||||||
|
void FreeRTOS_Tick_Handler( void );
|
||||||
|
|
||||||
|
/* Any task that uses the floating point unit MUST call vPortTaskUsesFPU()
|
||||||
|
before any floating point instructions are executed. */
|
||||||
|
void vPortTaskUsesFPU( void );
|
||||||
|
#define portTASK_USES_FLOATING_POINT() vPortTaskUsesFPU()
|
||||||
|
|
||||||
|
#define portLOWEST_INTERRUPT_PRIORITY ( ( ( uint32_t ) configUNIQUE_INTERRUPT_PRIORITIES ) - 1UL )
|
||||||
|
#define portLOWEST_USABLE_INTERRUPT_PRIORITY ( portLOWEST_INTERRUPT_PRIORITY - 1UL )
|
||||||
|
|
||||||
|
/* Architecture specific optimisations. */
|
||||||
|
#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION
|
||||||
|
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1
|
||||||
|
|
||||||
|
/* Store/clear the ready priorities in a bit map. */
|
||||||
|
#define portRECORD_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) |= ( 1UL << ( uxPriority ) )
|
||||||
|
#define portRESET_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) &= ~( 1UL << ( uxPriority ) )
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define portGET_HIGHEST_PRIORITY( uxTopPriority, uxReadyPriorities ) uxTopPriority = ( 31 - __builtin_clz( uxReadyPriorities ) )
|
||||||
|
|
||||||
|
#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */
|
||||||
|
|
||||||
|
#ifdef configASSERT
|
||||||
|
void vPortValidateInterruptPriority( void );
|
||||||
|
#define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() vPortValidateInterruptPriority()
|
||||||
|
#endif /* configASSERT */
|
||||||
|
|
||||||
|
#define portNOP() __asm volatile( "NOP" )
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern C */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* The number of bits to shift for an interrupt priority is dependent on the
|
||||||
|
number of bits implemented by the interrupt controller. */
|
||||||
|
#if configUNIQUE_INTERRUPT_PRIORITIES == 16
|
||||||
|
#define portPRIORITY_SHIFT 4
|
||||||
|
#define portMAX_BINARY_POINT_VALUE 3
|
||||||
|
#elif configUNIQUE_INTERRUPT_PRIORITIES == 32
|
||||||
|
#define portPRIORITY_SHIFT 3
|
||||||
|
#define portMAX_BINARY_POINT_VALUE 2
|
||||||
|
#elif configUNIQUE_INTERRUPT_PRIORITIES == 64
|
||||||
|
#define portPRIORITY_SHIFT 2
|
||||||
|
#define portMAX_BINARY_POINT_VALUE 1
|
||||||
|
#elif configUNIQUE_INTERRUPT_PRIORITIES == 128
|
||||||
|
#define portPRIORITY_SHIFT 1
|
||||||
|
#define portMAX_BINARY_POINT_VALUE 0
|
||||||
|
#elif configUNIQUE_INTERRUPT_PRIORITIES == 256
|
||||||
|
#define portPRIORITY_SHIFT 0
|
||||||
|
#define portMAX_BINARY_POINT_VALUE 0
|
||||||
|
#else
|
||||||
|
#error Invalid configUNIQUE_INTERRUPT_PRIORITIES setting. configUNIQUE_INTERRUPT_PRIORITIES must be set to the number of unique priorities implemented by the target hardware
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Interrupt controller access addresses. */
|
||||||
|
#define portICCPMR_PRIORITY_MASK_OFFSET ( 0x04 )
|
||||||
|
#define portICCIAR_INTERRUPT_ACKNOWLEDGE_OFFSET ( 0x0C )
|
||||||
|
#define portICCEOIR_END_OF_INTERRUPT_OFFSET ( 0x10 )
|
||||||
|
#define portICCBPR_BINARY_POINT_OFFSET ( 0x08 )
|
||||||
|
#define portICCRPR_RUNNING_PRIORITY_OFFSET ( 0x14 )
|
||||||
|
|
||||||
|
#define portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS ( configINTERRUPT_CONTROLLER_BASE_ADDRESS + configINTERRUPT_CONTROLLER_CPU_INTERFACE_OFFSET )
|
||||||
|
#define portICCPMR_PRIORITY_MASK_REGISTER ( *( ( volatile uint32_t * ) ( portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS + portICCPMR_PRIORITY_MASK_OFFSET ) ) )
|
||||||
|
#define portICCIAR_INTERRUPT_ACKNOWLEDGE_REGISTER_ADDRESS ( portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS + portICCIAR_INTERRUPT_ACKNOWLEDGE_OFFSET )
|
||||||
|
#define portICCEOIR_END_OF_INTERRUPT_REGISTER_ADDRESS ( portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS + portICCEOIR_END_OF_INTERRUPT_OFFSET )
|
||||||
|
#define portICCPMR_PRIORITY_MASK_REGISTER_ADDRESS ( portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS + portICCPMR_PRIORITY_MASK_OFFSET )
|
||||||
|
#define portICCBPR_BINARY_POINT_REGISTER ( *( ( const volatile uint32_t * ) ( portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS + portICCBPR_BINARY_POINT_OFFSET ) ) )
|
||||||
|
#define portICCRPR_RUNNING_PRIORITY_REGISTER ( *( ( const volatile uint32_t * ) ( portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS + portICCRPR_RUNNING_PRIORITY_OFFSET ) ) )
|
||||||
|
|
||||||
|
#endif /* PORTMACRO_H */
|
||||||
|
|
|
@ -69,15 +69,10 @@ portSAVE_CONTEXT MACRO
|
||||||
|
|
||||||
PUSH AX ; Save AX Register to stack.
|
PUSH AX ; Save AX Register to stack.
|
||||||
PUSH HL
|
PUSH HL
|
||||||
#if configMEMORY_MODE == 1
|
|
||||||
MOV A, CS ; Save CS register.
|
MOV A, CS ; Save CS register.
|
||||||
XCH A, X
|
XCH A, X
|
||||||
MOV A, ES ; Save ES register.
|
MOV A, ES ; Save ES register.
|
||||||
PUSH AX
|
PUSH AX
|
||||||
#else
|
|
||||||
MOV A, CS ; Save CS register.
|
|
||||||
PUSH AX
|
|
||||||
#endif
|
|
||||||
PUSH DE ; Save the remaining general purpose registers.
|
PUSH DE ; Save the remaining general purpose registers.
|
||||||
PUSH BC
|
PUSH BC
|
||||||
MOVW AX, usCriticalNesting ; Save the usCriticalNesting value.
|
MOVW AX, usCriticalNesting ; Save the usCriticalNesting value.
|
||||||
|
@ -104,15 +99,10 @@ portRESTORE_CONTEXT MACRO
|
||||||
MOVW usCriticalNesting, AX
|
MOVW usCriticalNesting, AX
|
||||||
POP BC ; Restore the necessary general purpose registers.
|
POP BC ; Restore the necessary general purpose registers.
|
||||||
POP DE
|
POP DE
|
||||||
#if configMEMORY_MODE == 1
|
|
||||||
POP AX ; Restore the ES register.
|
POP AX ; Restore the ES register.
|
||||||
MOV ES, A
|
MOV ES, A
|
||||||
XCH A, X ; Restore the CS register.
|
XCH A, X ; Restore the CS register.
|
||||||
MOV CS, A
|
MOV CS, A
|
||||||
#else
|
|
||||||
POP AX
|
|
||||||
MOV CS, A ; Restore CS register.
|
|
||||||
#endif
|
|
||||||
POP HL ; Restore general purpose register HL.
|
POP HL ; Restore general purpose register HL.
|
||||||
POP AX ; Restore AX.
|
POP AX ; Restore AX.
|
||||||
ENDM
|
ENDM
|
||||||
|
|
|
@ -70,15 +70,10 @@ portSAVE_CONTEXT MACRO
|
||||||
|
|
||||||
PUSH AX ; Save AX Register to stack.
|
PUSH AX ; Save AX Register to stack.
|
||||||
PUSH HL
|
PUSH HL
|
||||||
#if __DATA_MODEL__ == __DATA_MODEL_FAR__
|
|
||||||
MOV A, CS ; Save CS register.
|
MOV A, CS ; Save CS register.
|
||||||
XCH A, X
|
XCH A, X
|
||||||
MOV A, ES ; Save ES register.
|
MOV A, ES ; Save ES register.
|
||||||
PUSH AX
|
PUSH AX
|
||||||
#else
|
|
||||||
MOV A, CS ; Save CS register.
|
|
||||||
PUSH AX
|
|
||||||
#endif
|
|
||||||
PUSH DE ; Save the remaining general purpose registers.
|
PUSH DE ; Save the remaining general purpose registers.
|
||||||
PUSH BC
|
PUSH BC
|
||||||
MOVW AX, usCriticalNesting ; Save the usCriticalNesting value.
|
MOVW AX, usCriticalNesting ; Save the usCriticalNesting value.
|
||||||
|
@ -105,15 +100,10 @@ portRESTORE_CONTEXT MACRO
|
||||||
MOVW usCriticalNesting, AX
|
MOVW usCriticalNesting, AX
|
||||||
POP BC ; Restore the necessary general purpose registers.
|
POP BC ; Restore the necessary general purpose registers.
|
||||||
POP DE
|
POP DE
|
||||||
#if __DATA_MODEL__ == __DATA_MODEL_FAR__
|
|
||||||
POP AX ; Restore the ES register.
|
POP AX ; Restore the ES register.
|
||||||
MOV ES, A
|
MOV ES, A
|
||||||
XCH A, X ; Restore the CS register.
|
XCH A, X ; Restore the CS register.
|
||||||
MOV CS, A
|
MOV CS, A
|
||||||
#else
|
|
||||||
POP AX
|
|
||||||
MOV CS, A ; Restore CS register.
|
|
||||||
#endif
|
|
||||||
POP HL ; Restore general purpose register HL.
|
POP HL ; Restore general purpose register HL.
|
||||||
POP AX ; Restore AX.
|
POP AX ; Restore AX.
|
||||||
ENDM
|
ENDM
|
||||||
|
|
|
@ -431,7 +431,7 @@ uint8_t *puc;
|
||||||
void vPortDefineHeapRegions( const HeapRegion_t * const pxHeapRegions )
|
void vPortDefineHeapRegions( const HeapRegion_t * const pxHeapRegions )
|
||||||
{
|
{
|
||||||
BlockLink_t *pxFirstFreeBlockInRegion = NULL, *pxPreviousFreeBlock;
|
BlockLink_t *pxFirstFreeBlockInRegion = NULL, *pxPreviousFreeBlock;
|
||||||
uint8_t *pucAlignedHeap;
|
size_t xAlignedHeap;
|
||||||
size_t xTotalRegionSize, xTotalHeapSize = 0;
|
size_t xTotalRegionSize, xTotalHeapSize = 0;
|
||||||
BaseType_t xDefinedRegions = 0;
|
BaseType_t xDefinedRegions = 0;
|
||||||
size_t xAddress;
|
size_t xAddress;
|
||||||
|
@ -457,14 +457,14 @@ const HeapRegion_t *pxHeapRegion;
|
||||||
xTotalRegionSize -= xAddress - ( size_t ) pxHeapRegion->pucStartAddress;
|
xTotalRegionSize -= xAddress - ( size_t ) pxHeapRegion->pucStartAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
pucAlignedHeap = ( uint8_t * ) xAddress;
|
xAlignedHeap = xAddress;
|
||||||
|
|
||||||
/* Set xStart if it has not already been set. */
|
/* Set xStart if it has not already been set. */
|
||||||
if( xDefinedRegions == 0 )
|
if( xDefinedRegions == 0 )
|
||||||
{
|
{
|
||||||
/* xStart is used to hold a pointer to the first item in the list of
|
/* xStart is used to hold a pointer to the first item in the list of
|
||||||
free blocks. The void cast is used to prevent compiler warnings. */
|
free blocks. The void cast is used to prevent compiler warnings. */
|
||||||
xStart.pxNextFreeBlock = ( BlockLink_t * ) pucAlignedHeap;
|
xStart.pxNextFreeBlock = ( BlockLink_t * ) xAlignedHeap;
|
||||||
xStart.xBlockSize = ( size_t ) 0;
|
xStart.xBlockSize = ( size_t ) 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -483,7 +483,7 @@ const HeapRegion_t *pxHeapRegion;
|
||||||
|
|
||||||
/* pxEnd is used to mark the end of the list of free blocks and is
|
/* pxEnd is used to mark the end of the list of free blocks and is
|
||||||
inserted at the end of the region space. */
|
inserted at the end of the region space. */
|
||||||
xAddress = ( ( size_t ) pucAlignedHeap ) + xTotalRegionSize;
|
xAddress = xAlignedHeap + xTotalRegionSize;
|
||||||
xAddress -= xHeapStructSize;
|
xAddress -= xHeapStructSize;
|
||||||
xAddress &= ~portBYTE_ALIGNMENT_MASK;
|
xAddress &= ~portBYTE_ALIGNMENT_MASK;
|
||||||
pxEnd = ( BlockLink_t * ) xAddress;
|
pxEnd = ( BlockLink_t * ) xAddress;
|
||||||
|
@ -493,7 +493,7 @@ const HeapRegion_t *pxHeapRegion;
|
||||||
/* To start with there is a single free block in this region that is
|
/* To start with there is a single free block in this region that is
|
||||||
sized to take up the entire heap region minus the space taken by the
|
sized to take up the entire heap region minus the space taken by the
|
||||||
free block structure. */
|
free block structure. */
|
||||||
pxFirstFreeBlockInRegion = ( BlockLink_t * ) pucAlignedHeap;
|
pxFirstFreeBlockInRegion = ( BlockLink_t * ) xAlignedHeap;
|
||||||
pxFirstFreeBlockInRegion->xBlockSize = xAddress - ( size_t ) pxFirstFreeBlockInRegion;
|
pxFirstFreeBlockInRegion->xBlockSize = xAddress - ( size_t ) pxFirstFreeBlockInRegion;
|
||||||
pxFirstFreeBlockInRegion->pxNextFreeBlock = pxEnd;
|
pxFirstFreeBlockInRegion->pxNextFreeBlock = pxEnd;
|
||||||
|
|
||||||
|
|
|
@ -2241,8 +2241,7 @@ void vTaskSwitchContext( void )
|
||||||
#endif /* configGENERATE_RUN_TIME_STATS */
|
#endif /* configGENERATE_RUN_TIME_STATS */
|
||||||
|
|
||||||
/* Check for stack overflow, if configured. */
|
/* Check for stack overflow, if configured. */
|
||||||
taskFIRST_CHECK_FOR_STACK_OVERFLOW();
|
taskCHECK_FOR_STACK_OVERFLOW();
|
||||||
taskSECOND_CHECK_FOR_STACK_OVERFLOW();
|
|
||||||
|
|
||||||
/* Select a new task to run using either the generic C or port
|
/* Select a new task to run using either the generic C or port
|
||||||
optimised asm code. */
|
optimised asm code. */
|
||||||
|
@ -4078,7 +4077,7 @@ TickType_t uxReturn;
|
||||||
#endif /* INCLUDE_vTaskSuspend */
|
#endif /* INCLUDE_vTaskSuspend */
|
||||||
|
|
||||||
traceTASK_NOTIFY_WAIT_BLOCK();
|
traceTASK_NOTIFY_WAIT_BLOCK();
|
||||||
|
|
||||||
/* All ports are written to allow a yield in a critical
|
/* All ports are written to allow a yield in a critical
|
||||||
section (some will yield immediately, others wait until the
|
section (some will yield immediately, others wait until the
|
||||||
critical section exits) - but it is not something that
|
critical section exits) - but it is not something that
|
||||||
|
@ -4100,7 +4099,7 @@ TickType_t uxReturn;
|
||||||
taskENTER_CRITICAL();
|
taskENTER_CRITICAL();
|
||||||
{
|
{
|
||||||
traceTASK_NOTIFY_WAIT();
|
traceTASK_NOTIFY_WAIT();
|
||||||
|
|
||||||
if( pulNotificationValue != NULL )
|
if( pulNotificationValue != NULL )
|
||||||
{
|
{
|
||||||
/* Output the current notification value, which may or may not
|
/* Output the current notification value, which may or may not
|
||||||
|
@ -4315,7 +4314,7 @@ TickType_t uxReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
traceTASK_NOTIFY_FROM_ISR();
|
traceTASK_NOTIFY_FROM_ISR();
|
||||||
|
|
||||||
/* If the task is in the blocked state specifically to wait for a
|
/* If the task is in the blocked state specifically to wait for a
|
||||||
notification then unblock it now. */
|
notification then unblock it now. */
|
||||||
if( eOriginalNotifyState == eWaitingNotification )
|
if( eOriginalNotifyState == eWaitingNotification )
|
||||||
|
@ -4396,7 +4395,7 @@ TickType_t uxReturn;
|
||||||
/* 'Giving' is equivalent to incrementing a count in a counting
|
/* 'Giving' is equivalent to incrementing a count in a counting
|
||||||
semaphore. */
|
semaphore. */
|
||||||
( pxTCB->ulNotifiedValue )++;
|
( pxTCB->ulNotifiedValue )++;
|
||||||
|
|
||||||
traceTASK_NOTIFY_GIVE_FROM_ISR();
|
traceTASK_NOTIFY_GIVE_FROM_ISR();
|
||||||
|
|
||||||
/* If the task is in the blocked state specifically to wait for a
|
/* If the task is in the blocked state specifically to wait for a
|
||||||
|
@ -4440,6 +4439,37 @@ TickType_t uxReturn;
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
#if( configUSE_TASK_NOTIFICATIONS == 1 )
|
||||||
|
|
||||||
|
BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask )
|
||||||
|
{
|
||||||
|
TCB_t *pxTCB;
|
||||||
|
BaseType_t xReturn;
|
||||||
|
|
||||||
|
pxTCB = ( TCB_t * ) xTask;
|
||||||
|
|
||||||
|
/* If null is passed in here then it is the calling task that is having
|
||||||
|
its notification state cleared. */
|
||||||
|
pxTCB = prvGetTCBFromHandle( pxTCB );
|
||||||
|
|
||||||
|
taskENTER_CRITICAL();
|
||||||
|
{
|
||||||
|
if( pxTCB->eNotifyState == eNotified )
|
||||||
|
{
|
||||||
|
pxTCB->eNotifyState = eNotWaitingNotification;
|
||||||
|
xReturn = pdPASS;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
xReturn = pdFAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
taskEXIT_CRITICAL();
|
||||||
|
|
||||||
|
return xReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* configUSE_TASK_NOTIFICATIONS */
|
||||||
|
|
||||||
#ifdef FREERTOS_MODULE_TEST
|
#ifdef FREERTOS_MODULE_TEST
|
||||||
#include "tasks_test_access_functions.h"
|
#include "tasks_test_access_functions.h"
|
||||||
|
|
Loading…
Reference in a new issue