mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-05-25 06:29:04 -04:00
xTaskGetTaskHandle() changed to xTaskGetHandle().
Tidy up CEC1302 demo. Ensure bit 0 of the task address is clear when setting up stack of initial Cortex-M3/4/7 stacks (for strict compliance, although not practically necessary). vTaskGetTaskInfo() changed to vTaskGetInfo() - with a macro added for backward compatibility.
This commit is contained in:
parent
ee5386756d
commit
255145bde1
|
@ -157,8 +157,8 @@ void vInitialiseTimerForIntQueueTest( void )
|
||||||
|
|
||||||
/* Configure TC1 channel 0 tmrTIMER_2_FREQUENCY frequency and trigger on
|
/* Configure TC1 channel 0 tmrTIMER_2_FREQUENCY frequency and trigger on
|
||||||
RC compare. */
|
RC compare. */
|
||||||
tc_trigger_on_freq( TC1, tmrTC0_CHANNEL_0, tmrTIMER_2_FREQUENCY );
|
tc_trigger_on_freq( TC1, tmrTC1_CHANNEL_0, tmrTIMER_2_FREQUENCY );
|
||||||
TC1->TC_CHANNEL[ tmrTC0_CHANNEL_0 ].TC_IER = TC_IER_CPCS;
|
TC1->TC_CHANNEL[ tmrTC1_CHANNEL_0 ].TC_IER = TC_IER_CPCS;
|
||||||
|
|
||||||
/* Enable interrupts and start the timers. */
|
/* Enable interrupts and start the timers. */
|
||||||
aic_configure( ID_TC0, tmrLOWER_PRIORITY );
|
aic_configure( ID_TC0, tmrLOWER_PRIORITY );
|
||||||
|
|
|
@ -157,7 +157,7 @@ to exclude the API function. */
|
||||||
#define INCLUDE_xTimerPendFunctionCall 1
|
#define INCLUDE_xTimerPendFunctionCall 1
|
||||||
#define INCLUDE_eTaskGetState 1
|
#define INCLUDE_eTaskGetState 1
|
||||||
#define INCLUDE_xTaskAbortDelay 1
|
#define INCLUDE_xTaskAbortDelay 1
|
||||||
#define INCLUDE_xTaskGetTaskHandle 1
|
#define INCLUDE_xTaskGetHandle 1
|
||||||
|
|
||||||
/* This demo makes use of one or more example stats formatting functions. These
|
/* This demo makes use of one or more example stats formatting functions. These
|
||||||
format the raw data provided by the uxTaskGetSystemState() function in to human
|
format the raw data provided by the uxTaskGetSystemState() function in to human
|
||||||
|
|
|
@ -91,7 +91,7 @@ extern "C" {
|
||||||
/* Set configCREATE_LOW_POWER_DEMO to one to run the simple blinky demo low power
|
/* Set configCREATE_LOW_POWER_DEMO to one to run the simple blinky demo low power
|
||||||
example, or 1 to run the more comprehensive test and demo application. See
|
example, or 1 to run the more comprehensive test and demo application. See
|
||||||
the comments at the top of main.c for more information. */
|
the comments at the top of main.c for more information. */
|
||||||
#define configCREATE_LOW_POWER_DEMO 1
|
#define configCREATE_LOW_POWER_DEMO 0
|
||||||
|
|
||||||
/* Some configuration is dependent on the demo being built. */
|
/* Some configuration is dependent on the demo being built. */
|
||||||
#if( configCREATE_LOW_POWER_DEMO == 1 )
|
#if( configCREATE_LOW_POWER_DEMO == 1 )
|
||||||
|
|
|
@ -92,8 +92,8 @@
|
||||||
<MDIClientArea>
|
<MDIClientArea>
|
||||||
<RegID>0</RegID>
|
<RegID>0</RegID>
|
||||||
<MDITabState>
|
<MDITabState>
|
||||||
<Len>270</Len>
|
<Len>274</Len>
|
||||||
<Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000100000000000000010000004A433A5C455C4465765C4672656552544F535C576F726B696E67436F70795C4672656552544F535C44656D6F5C434F525445585F4D34465F434543313330325F4B65696C5C6D61696E2E6300000000066D61696E2E6300000000BECEA100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000340100005E000000800700006E030000</Data>
|
<Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000100000000000000010000004E433A5C455C4465765C4672656552544F535C576F726B696E67436F70795C4672656552544F535C44656D6F5C434F525445585F4D34465F434543313330325F4B65696C5F4743435C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000340100005E000000800700006E030000</Data>
|
||||||
</MDITabState>
|
</MDITabState>
|
||||||
</MDIClientArea>
|
</MDIClientArea>
|
||||||
<ViewEx>
|
<ViewEx>
|
||||||
|
@ -1287,8 +1287,8 @@
|
||||||
<RegID>59392</RegID>
|
<RegID>59392</RegID>
|
||||||
<Name>File</Name>
|
<Name>File</Name>
|
||||||
<Buttons>
|
<Buttons>
|
||||||
<Len>2323</Len>
|
<Len>2098</Len>
|
||||||
<Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000105F5F61736D20766F6C6174696C65202896000000000000001400105F5F61736D20766F6C6174696C6520280008707276456E61626C08707276536C6565701470727644697361626C65496E7465727275707473087469636B686F6F6B08626C6F636B696E6706626C6F636B7106726563757273087265636D757465780A537461636B5F53697A65114E5649435F48616E646C65725F544D52300B6274696D65725F696E69740F5379735469636B5F48616E646C6572077379737469636B1278506F727450656E64535648616E646C65720670656E6473760B785461736B4372656174650A737461727473636865640C6D616C6C6F636661696C65640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C6572030000</Data>
|
<Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000204D4D43525F5043525F50524F434553534F525F434C4F434B5F434F4E54524F4C960000000000000002001678506F72744973496E73696465496E74657272757074204D4D43525F5043525F50524F434553534F525F434C4F434B5F434F4E54524F4C0000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C6572030000</Data>
|
||||||
</Buttons>
|
</Buttons>
|
||||||
<OriginalItems>
|
<OriginalItems>
|
||||||
<Len>1423</Len>
|
<Len>1423</Len>
|
||||||
|
@ -2528,8 +2528,8 @@
|
||||||
<RegID>59392</RegID>
|
<RegID>59392</RegID>
|
||||||
<Name>File</Name>
|
<Name>File</Name>
|
||||||
<Buttons>
|
<Buttons>
|
||||||
<Len>2323</Len>
|
<Len>2071</Len>
|
||||||
<Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000105F5F61736D20766F6C6174696C65202896000000000000001400105F5F61736D20766F6C6174696C6520280008707276456E61626C08707276536C6565701470727644697361626C65496E7465727275707473087469636B686F6F6B08626C6F636B696E6706626C6F636B7106726563757273087265636D757465780A537461636B5F53697A65114E5649435F48616E646C65725F544D52300B6274696D65725F696E69740F5379735469636B5F48616E646C6572077379737469636B1278506F727450656E64535648616E646C65720670656E6473760B785461736B4372656174650A737461727473636865640C6D616C6C6F636661696C65640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020001001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C6572030000</Data>
|
<Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000000460000000000000000000000000000000001000000010000000180FE880000000000004500000000000000000000000000000000010000000100000001800B810000000000001300000000000000000000000000000000010000000100000001800C810000000000001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000204D4D43525F5043525F50524F434553534F525F434C4F434B5F434F4E54524F4C96000000000000000100204D4D43525F5043525F50524F434553534F525F434C4F434B5F434F4E54524F4C00000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020003001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C6572030000</Data>
|
||||||
</Buttons>
|
</Buttons>
|
||||||
<OriginalItems>
|
<OriginalItems>
|
||||||
<Len>1423</Len>
|
<Len>1423</Len>
|
||||||
|
@ -2561,7 +2561,7 @@
|
||||||
<Name>Debug</Name>
|
<Name>Debug</Name>
|
||||||
<Buttons>
|
<Buttons>
|
||||||
<Len>2236</Len>
|
<Len>2236</Len>
|
||||||
<Data>00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020000002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B000000000000310000000857617463682026320000000000000000000000000100000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F727920263400000000000000000000000001000000010000000000000000000000010000000000138010010000020000003300000008554152542023263100000000000000000000000001000000010000000000000000000000010000000400138093070000000000003300000008554152542023263100000000000000000000000001000000010000000000000000000000010000000000138094070000000000003300000008554152542023263200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000008554152542023263300000000000000000000000001000000010000000000000000000000010000000000138096070000000000003300000015446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000020000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F7200000000000000000100000000000000010000000000000000000000010000000000000000000544656275673C020000</Data>
|
<Data>00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020000002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B000000000000310000000857617463682026320000000000000000000000000100000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F727920263400000000000000000000000001000000010000000000000000000000010000000000138010010000020000003300000008554152542023263100000000000000000000000001000000010000000000000000000000010000000400138093070000000000003300000008554152542023263100000000000000000000000001000000010000000000000000000000010000000000138094070000000000003300000008554152542023263200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000008554152542023263300000000000000000000000001000000010000000000000000000000010000000000138096070000000000003300000015446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000020000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F7201000000000000000100000000000000010000000000000000000000010000000000000000000544656275673C020000</Data>
|
||||||
</Buttons>
|
</Buttons>
|
||||||
<OriginalItems>
|
<OriginalItems>
|
||||||
<Len>898</Len>
|
<Len>898</Len>
|
||||||
|
@ -2589,8 +2589,8 @@
|
||||||
<Doc>
|
<Doc>
|
||||||
<Name>..\main.c</Name>
|
<Name>..\main.c</Name>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
<ColumnNumber>0</ColumnNumber>
|
||||||
<TopLine>66</TopLine>
|
<TopLine>67</TopLine>
|
||||||
<CurrentLine>141</CurrentLine>
|
<CurrentLine>142</CurrentLine>
|
||||||
<Folding>1</Folding>
|
<Folding>1</Folding>
|
||||||
<ContractedFolders></ContractedFolders>
|
<ContractedFolders></ContractedFolders>
|
||||||
<PaneID>0</PaneID>
|
<PaneID>0</PaneID>
|
||||||
|
|
|
@ -73,7 +73,7 @@
|
||||||
<LExpSel>0</LExpSel>
|
<LExpSel>0</LExpSel>
|
||||||
</OPTXL>
|
</OPTXL>
|
||||||
<OPTFL>
|
<OPTFL>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<IsCurrentTarget>1</IsCurrentTarget>
|
<IsCurrentTarget>1</IsCurrentTarget>
|
||||||
</OPTFL>
|
</OPTFL>
|
||||||
|
@ -213,7 +213,7 @@
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>System</GroupName>
|
<GroupName>System</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
|
@ -529,7 +529,7 @@
|
||||||
<GroupNumber>5</GroupNumber>
|
<GroupNumber>5</GroupNumber>
|
||||||
<FileNumber>24</FileNumber>
|
<FileNumber>24</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>1</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\main_full\IntQueueTimer.c</PathWithFileName>
|
<PathWithFileName>..\main_full\IntQueueTimer.c</PathWithFileName>
|
||||||
|
|
|
@ -92,6 +92,7 @@
|
||||||
/* Hardware register addresses. */
|
/* Hardware register addresses. */
|
||||||
#define mainVTOR ( * ( uint32_t * ) 0xE000ED08 )
|
#define mainVTOR ( * ( uint32_t * ) 0xE000ED08 )
|
||||||
#define mainNVIC_AUX_ACTLR ( * ( uint32_t * ) 0xE000E008 )
|
#define mainNVIC_AUX_ACTLR ( * ( uint32_t * ) 0xE000E008 )
|
||||||
|
#define mainEC_INTERRUPT_CONTROL ( * ( volatile uint32_t * ) 0x4000FC18 )
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -167,6 +168,9 @@ extern unsigned long __Vectors[];
|
||||||
/* Disable M4 write buffer: fix MEC1322 hardware bug. */
|
/* Disable M4 write buffer: fix MEC1322 hardware bug. */
|
||||||
mainNVIC_AUX_ACTLR |= 0x07;
|
mainNVIC_AUX_ACTLR |= 0x07;
|
||||||
|
|
||||||
|
/* Enable alternative NVIC vectors. */
|
||||||
|
mainEC_INTERRUPT_CONTROL = pdTRUE;
|
||||||
|
|
||||||
system_set_ec_clock();
|
system_set_ec_clock();
|
||||||
|
|
||||||
/* Assuming downloading code via the debugger - so ensure the hardware
|
/* Assuming downloading code via the debugger - so ensure the hardware
|
||||||
|
|
|
@ -119,7 +119,6 @@ timers must still be above the tick interrupt priority. */
|
||||||
|
|
||||||
/* Hardware register locations. */
|
/* Hardware register locations. */
|
||||||
#define tmrGIRQ23_ENABLE_SET ( * ( volatile uint32_t * ) 0x4000C130 )
|
#define tmrGIRQ23_ENABLE_SET ( * ( volatile uint32_t * ) 0x4000C130 )
|
||||||
#define tmrMMCR_EC_INTERRUPT_CONTROL ( * ( volatile uint8_t * ) 0x4000FC18 )
|
|
||||||
|
|
||||||
#define tmrRECORD_NESTING_DEPTH() \
|
#define tmrRECORD_NESTING_DEPTH() \
|
||||||
ulNestingDepth++; \
|
ulNestingDepth++; \
|
||||||
|
@ -140,7 +139,6 @@ const uint32_t ulTimer1Count = configCPU_CLOCK_HZ / tmrTIMER_1_FREQUENCY;
|
||||||
const uint32_t ulTimer2Count = configCPU_CLOCK_HZ / tmrTIMER_2_FREQUENCY;
|
const uint32_t ulTimer2Count = configCPU_CLOCK_HZ / tmrTIMER_2_FREQUENCY;
|
||||||
|
|
||||||
tmrGIRQ23_ENABLE_SET = 0x03;
|
tmrGIRQ23_ENABLE_SET = 0x03;
|
||||||
tmrMMCR_EC_INTERRUPT_CONTROL = 1;
|
|
||||||
|
|
||||||
/* Initialise the three timers as described at the top of this file, and
|
/* Initialise the three timers as described at the top of this file, and
|
||||||
enable their interrupts in the NVIC. */
|
enable their interrupts in the NVIC. */
|
||||||
|
|
|
@ -355,8 +355,7 @@ unsigned long ulErrorFound = pdFALSE;
|
||||||
{
|
{
|
||||||
/* An error has been detected in one of the tasks - flash the LED
|
/* An error has been detected in one of the tasks - flash the LED
|
||||||
at a higher frequency to give visible feedback that something has
|
at a higher frequency to give visible feedback that something has
|
||||||
gone wrong (it might just be that the loop back connector required
|
gone wrong. */
|
||||||
by the comtest tasks has not been fitted). */
|
|
||||||
xDelayPeriod = mainERROR_CHECK_TASK_PERIOD;
|
xDelayPeriod = mainERROR_CHECK_TASK_PERIOD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -134,12 +134,10 @@ static const uint32_t ulHighResolutionReloadValue = ( mainHIGHER_RESOLUTION_TIME
|
||||||
|
|
||||||
/* Calculate how many clock increments make up a single tick period. */
|
/* Calculate how many clock increments make up a single tick period. */
|
||||||
static const uint32_t ulReloadValueForOneHighResolutionTick = ( mainHIGHER_RESOLUTION_TIMER_HZ / configTICK_RATE_HZ );
|
static const uint32_t ulReloadValueForOneHighResolutionTick = ( mainHIGHER_RESOLUTION_TIMER_HZ / configTICK_RATE_HZ );
|
||||||
//static const uint32_t usReloadValueForOneLowResolutionTick = ( mainLOW_RESOLUTION_TIMER_HZ / configTICK_RATE_HZ );
|
|
||||||
|
|
||||||
/* Calculate the maximum number of ticks that can be suppressed when using the
|
/* Calculate the maximum number of ticks that can be suppressed when using the
|
||||||
high resolution clock and low resolution clock respectively. */
|
high resolution clock and low resolution clock respectively. */
|
||||||
static uint32_t ulMaximumPossibleSuppressedHighResolutionTicks = 0;
|
static uint32_t ulMaximumPossibleSuppressedHighResolutionTicks = 0;
|
||||||
//static const uint16_t usMaximumPossibleSuppressedLowResolutionTicks = USHRT_MAX / usReloadValueForOneLowResolutionTick;
|
|
||||||
|
|
||||||
/* As the clock is only 2KHz, it is likely a value of 1 will be too much, so
|
/* As the clock is only 2KHz, it is likely a value of 1 will be too much, so
|
||||||
use zero - but leave the value here to assist porting to different clock
|
use zero - but leave the value here to assist porting to different clock
|
||||||
|
@ -171,15 +169,14 @@ void NVIC_Handler_HIB_TMR( void )
|
||||||
|
|
||||||
#if( lpINCLUDE_TEST_TIMER == 1 )
|
#if( lpINCLUDE_TEST_TIMER == 1 )
|
||||||
|
|
||||||
#define GIRQ23_ENABLE_SET ( * ( uint32_t * ) 0x4000C130 )
|
#define lpGIRQ23_ENABLE_SET ( * ( uint32_t * ) 0x4000C130 )
|
||||||
|
|
||||||
static void prvSetupBasicTimer( void )
|
static void prvSetupBasicTimer( void )
|
||||||
{
|
{
|
||||||
const uint8_t ucTimerChannel = 0;
|
const uint8_t ucTimerChannel = 0;
|
||||||
const uint32_t ulTimer0Count = configCPU_CLOCK_HZ / 10;
|
const uint32_t ulTimer0Count = configCPU_CLOCK_HZ / 10;
|
||||||
|
|
||||||
GIRQ23_ENABLE_SET = 0x03;
|
lpGIRQ23_ENABLE_SET = 0x03;
|
||||||
*(unsigned int*)0x4000FC18 = 1;
|
|
||||||
|
|
||||||
/* To fully test the low power tick processing it is necessary to sometimes
|
/* To fully test the low power tick processing it is necessary to sometimes
|
||||||
bring the MCU out of its sleep state by a method other than the tick
|
bring the MCU out of its sleep state by a method other than the tick
|
||||||
|
@ -202,9 +199,7 @@ void vPortSetupTimerInterrupt( void )
|
||||||
ulMaximumPossibleSuppressedHighResolutionTicks = ( ( uint32_t ) USHRT_MAX ) / ulReloadValueForOneHighResolutionTick;
|
ulMaximumPossibleSuppressedHighResolutionTicks = ( ( uint32_t ) USHRT_MAX ) / ulReloadValueForOneHighResolutionTick;
|
||||||
|
|
||||||
/* Set up the hibernation timer to start at the value required by the
|
/* Set up the hibernation timer to start at the value required by the
|
||||||
tick interrupt. Equivalent to the following libarary call. The library
|
tick interrupt. */
|
||||||
is not used as it is not compatible with all the compilers used:
|
|
||||||
htimer_enable( mainTICK_HTIMER_ID, ulHighResolutionReloadValue, mainHTIMER_HIGH_RESOLUTION ); */
|
|
||||||
lpHTIMER_PRELOAD_REGISTER = ulHighResolutionReloadValue;
|
lpHTIMER_PRELOAD_REGISTER = ulHighResolutionReloadValue;
|
||||||
lpHTIMER_CONTROL_REGISTER = mainHTIMER_HIGH_RESOLUTION;
|
lpHTIMER_CONTROL_REGISTER = mainHTIMER_HIGH_RESOLUTION;
|
||||||
|
|
||||||
|
@ -285,7 +280,7 @@ TickType_t xModifiableIdleTime;
|
||||||
eSleepAction = eTaskConfirmSleepModeStatus();
|
eSleepAction = eTaskConfirmSleepModeStatus();
|
||||||
if( eSleepAction == eAbortSleep )
|
if( eSleepAction == eAbortSleep )
|
||||||
{
|
{
|
||||||
/* Resetart the timer from whatever remains in the counter register,
|
/* Restart the timer from whatever remains in the counter register,
|
||||||
but 0 is not a valid value. */
|
but 0 is not a valid value. */
|
||||||
ulReloadValue = ulCountBeforeSleep - ulStoppedTimerCompensation;
|
ulReloadValue = ulCountBeforeSleep - ulStoppedTimerCompensation;
|
||||||
|
|
||||||
|
|
|
@ -89,8 +89,8 @@
|
||||||
build. Remove the whole file if this is not the case. */
|
build. Remove the whole file if this is not the case. */
|
||||||
#if( INCLUDE_xTaskAbortDelay == 1 )
|
#if( INCLUDE_xTaskAbortDelay == 1 )
|
||||||
|
|
||||||
#if( INCLUDE_xTaskGetTaskHandle != 1 )
|
#if( INCLUDE_xTaskGetHandle != 1 )
|
||||||
#error This test file uses the xTaskGetTaskHandle() API function so INCLUDE_xTaskGetTaskHandle must be set to 1 in FreeRTOSConfig.h.
|
#error This test file uses the xTaskGetHandle() API function so INCLUDE_xTaskGetHandle must be set to 1 in FreeRTOSConfig.h.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Task priorities. Allow these to be overridden. */
|
/* Task priorities. Allow these to be overridden. */
|
||||||
|
@ -183,7 +183,7 @@ const TickType_t xStartMargin = 2UL;
|
||||||
/* Just to remove compiler warnings. */
|
/* Just to remove compiler warnings. */
|
||||||
( void ) pvParameters;
|
( void ) pvParameters;
|
||||||
|
|
||||||
xBlockingTask = xTaskGetTaskHandle( pcBlockingTaskName );
|
xBlockingTask = xTaskGetHandle( pcBlockingTaskName );
|
||||||
configASSERT( xBlockingTask );
|
configASSERT( xBlockingTask );
|
||||||
|
|
||||||
for( ;; )
|
for( ;; )
|
||||||
|
@ -241,7 +241,7 @@ uint32_t ulNotificationValue;
|
||||||
/* Just to remove compiler warnings. */
|
/* Just to remove compiler warnings. */
|
||||||
( void ) pvParameters;
|
( void ) pvParameters;
|
||||||
|
|
||||||
xControllingTask = xTaskGetTaskHandle( pcControllingTaskName );
|
xControllingTask = xTaskGetHandle( pcControllingTaskName );
|
||||||
configASSERT( xControllingTask );
|
configASSERT( xControllingTask );
|
||||||
|
|
||||||
for( ;; )
|
for( ;; )
|
||||||
|
|
|
@ -154,7 +154,7 @@ functions anyway. */
|
||||||
#define INCLUDE_xTaskGetSchedulerState 1
|
#define INCLUDE_xTaskGetSchedulerState 1
|
||||||
#define INCLUDE_xTimerGetTimerDaemonTaskHandle 1
|
#define INCLUDE_xTimerGetTimerDaemonTaskHandle 1
|
||||||
#define INCLUDE_xTaskGetIdleTaskHandle 1
|
#define INCLUDE_xTaskGetIdleTaskHandle 1
|
||||||
#define INCLUDE_xTaskGetTaskHandle 1
|
#define INCLUDE_xTaskGetHandle 1
|
||||||
#define INCLUDE_eTaskGetState 1
|
#define INCLUDE_eTaskGetState 1
|
||||||
#define INCLUDE_xSemaphoreGetMutexHolder 1
|
#define INCLUDE_xSemaphoreGetMutexHolder 1
|
||||||
#define INCLUDE_xTimerPendFunctionCall 1
|
#define INCLUDE_xTimerPendFunctionCall 1
|
||||||
|
|
|
@ -145,7 +145,7 @@ functions anyway. */
|
||||||
#define INCLUDE_xTaskGetSchedulerState 1
|
#define INCLUDE_xTaskGetSchedulerState 1
|
||||||
#define INCLUDE_xTimerGetTimerDaemonTaskHandle 1
|
#define INCLUDE_xTimerGetTimerDaemonTaskHandle 1
|
||||||
#define INCLUDE_xTaskGetIdleTaskHandle 1
|
#define INCLUDE_xTaskGetIdleTaskHandle 1
|
||||||
#define INCLUDE_xTaskGetTaskHandle 1
|
#define INCLUDE_xTaskGetHandle 1
|
||||||
#define INCLUDE_eTaskGetState 1
|
#define INCLUDE_eTaskGetState 1
|
||||||
#define INCLUDE_xSemaphoreGetMutexHolder 1
|
#define INCLUDE_xSemaphoreGetMutexHolder 1
|
||||||
#define INCLUDE_xTimerPendFunctionCall 1
|
#define INCLUDE_xTimerPendFunctionCall 1
|
||||||
|
|
|
@ -599,12 +599,12 @@ extern StackType_t uxTimerTaskStack[];
|
||||||
|
|
||||||
/* Check the same handle is obtained using the idle task's name. First try
|
/* Check the same handle is obtained using the idle task's name. First try
|
||||||
with the wrong name, then the right name. */
|
with the wrong name, then the right name. */
|
||||||
if( xTaskGetTaskHandle( "Idle" ) == xIdleTaskHandle )
|
if( xTaskGetHandle( "Idle" ) == xIdleTaskHandle )
|
||||||
{
|
{
|
||||||
pcStatusMessage = "Error: Returned handle for name Idle was incorrect";
|
pcStatusMessage = "Error: Returned handle for name Idle was incorrect";
|
||||||
}
|
}
|
||||||
|
|
||||||
if( xTaskGetTaskHandle( "IDLE" ) != xIdleTaskHandle )
|
if( xTaskGetHandle( "IDLE" ) != xIdleTaskHandle )
|
||||||
{
|
{
|
||||||
pcStatusMessage = "Error: Returned handle for name Idle was incorrect";
|
pcStatusMessage = "Error: Returned handle for name Idle was incorrect";
|
||||||
}
|
}
|
||||||
|
@ -616,7 +616,7 @@ extern StackType_t uxTimerTaskStack[];
|
||||||
pcStatusMessage = "Error: Returned timer task handle was incorrect";
|
pcStatusMessage = "Error: Returned timer task handle was incorrect";
|
||||||
}
|
}
|
||||||
|
|
||||||
if( xTaskGetTaskHandle( "Tmr Svc" ) != xTimerTaskHandle )
|
if( xTaskGetHandle( "Tmr Svc" ) != xTimerTaskHandle )
|
||||||
{
|
{
|
||||||
pcStatusMessage = "Error: Returned handle for name Tmr Svc was incorrect";
|
pcStatusMessage = "Error: Returned handle for name Tmr Svc was incorrect";
|
||||||
}
|
}
|
||||||
|
@ -633,20 +633,20 @@ extern StackType_t uxTimerTaskStack[];
|
||||||
pcStatusMessage = "Error: Returned timer task state was incorrect";
|
pcStatusMessage = "Error: Returned timer task state was incorrect";
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Also with the vTaskGetTaskInfo() function. */
|
/* Also with the vTaskGetInfo() function. */
|
||||||
vTaskGetTaskInfo( xTimerTaskHandle, /* The task being queried. */
|
vTaskGetInfo( xTimerTaskHandle, /* The task being queried. */
|
||||||
&xTaskInfo, /* The structure into which information on the task will be written. */
|
&xTaskInfo, /* The structure into which information on the task will be written. */
|
||||||
pdTRUE, /* Include the task's high watermark in the structure. */
|
pdTRUE, /* Include the task's high watermark in the structure. */
|
||||||
eInvalid ); /* Include the task state in the structure. */
|
eInvalid ); /* Include the task state in the structure. */
|
||||||
|
|
||||||
/* Check the information returned by vTaskGetTaskInfo() is as expected. */
|
/* Check the information returned by vTaskGetInfo() is as expected. */
|
||||||
if( ( xTaskInfo.eCurrentState != eBlocked ) ||
|
if( ( xTaskInfo.eCurrentState != eBlocked ) ||
|
||||||
( strcmp( xTaskInfo.pcTaskName, "Tmr Svc" ) != 0 ) ||
|
( strcmp( xTaskInfo.pcTaskName, "Tmr Svc" ) != 0 ) ||
|
||||||
( xTaskInfo.uxCurrentPriority != configTIMER_TASK_PRIORITY ) ||
|
( xTaskInfo.uxCurrentPriority != configTIMER_TASK_PRIORITY ) ||
|
||||||
( xTaskInfo.pxStackBase != uxTimerTaskStack ) ||
|
( xTaskInfo.pxStackBase != uxTimerTaskStack ) ||
|
||||||
( xTaskInfo.xHandle != xTimerTaskHandle ) )
|
( xTaskInfo.xHandle != xTimerTaskHandle ) )
|
||||||
{
|
{
|
||||||
pcStatusMessage = "Error: vTaskGetTaskInfo() returned incorrect information about the timer task";
|
pcStatusMessage = "Error: vTaskGetInfo() returned incorrect information about the timer task";
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Other tests that should only be performed once follow. The test task
|
/* Other tests that should only be performed once follow. The test task
|
||||||
|
|
|
@ -147,7 +147,7 @@ functions anyway. */
|
||||||
#define INCLUDE_xSemaphoreGetMutexHolder 1
|
#define INCLUDE_xSemaphoreGetMutexHolder 1
|
||||||
#define INCLUDE_xTimerPendFunctionCall 1
|
#define INCLUDE_xTimerPendFunctionCall 1
|
||||||
#define INCLUDE_xTaskAbortDelay 1
|
#define INCLUDE_xTaskAbortDelay 1
|
||||||
#define INCLUDE_xTaskGetTaskHandle 1
|
#define INCLUDE_xTaskGetHandle 1
|
||||||
|
|
||||||
/* It is a good idea to define configASSERT() while developing. configASSERT()
|
/* It is a good idea to define configASSERT() while developing. configASSERT()
|
||||||
uses the same semantics as the standard C assert() macro. */
|
uses the same semantics as the standard C assert() macro. */
|
||||||
|
|
|
@ -181,8 +181,8 @@ extern "C" {
|
||||||
#define INCLUDE_xSemaphoreGetMutexHolder INCLUDE_xQueueGetMutexHolder
|
#define INCLUDE_xSemaphoreGetMutexHolder INCLUDE_xQueueGetMutexHolder
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef INCLUDE_xTaskGetTaskHandle
|
#ifndef INCLUDE_xTaskGetHandle
|
||||||
#define INCLUDE_xTaskGetTaskHandle 0
|
#define INCLUDE_xTaskGetHandle 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef INCLUDE_uxTaskGetStackHighWaterMark
|
#ifndef INCLUDE_uxTaskGetStackHighWaterMark
|
||||||
|
@ -837,6 +837,8 @@ V8 if desired. */
|
||||||
#define portTICK_RATE_MS portTICK_PERIOD_MS
|
#define portTICK_RATE_MS portTICK_PERIOD_MS
|
||||||
#define pcTaskGetTaskName pcTaskGetName
|
#define pcTaskGetTaskName pcTaskGetName
|
||||||
#define pcTimerGetTimerName pcTimerGetName
|
#define pcTimerGetTimerName pcTimerGetName
|
||||||
|
#define pcQueueGetQueueName pcQueueGetName
|
||||||
|
#define vTaskGetTaskInfo vTaskGetInfo
|
||||||
|
|
||||||
/* Backward compatibility within the scheduler code only - these definitions
|
/* Backward compatibility within the scheduler code only - these definitions
|
||||||
are not really required but are included for completeness. */
|
are not really required but are included for completeness. */
|
||||||
|
|
|
@ -421,7 +421,9 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
||||||
* \defgroup xSemaphoreTakeRecursive xSemaphoreTakeRecursive
|
* \defgroup xSemaphoreTakeRecursive xSemaphoreTakeRecursive
|
||||||
* \ingroup Semaphores
|
* \ingroup Semaphores
|
||||||
*/
|
*/
|
||||||
#define xSemaphoreTakeRecursive( xMutex, xBlockTime ) xQueueTakeMutexRecursive( ( xMutex ), ( xBlockTime ) )
|
#if( configUSE_RECURSIVE_MUTEXES == 1 )
|
||||||
|
#define xSemaphoreTakeRecursive( xMutex, xBlockTime ) xQueueTakeMutexRecursive( ( xMutex ), ( xBlockTime ) )
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* semphr. h
|
* semphr. h
|
||||||
|
@ -568,7 +570,9 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
||||||
* \defgroup xSemaphoreGiveRecursive xSemaphoreGiveRecursive
|
* \defgroup xSemaphoreGiveRecursive xSemaphoreGiveRecursive
|
||||||
* \ingroup Semaphores
|
* \ingroup Semaphores
|
||||||
*/
|
*/
|
||||||
#define xSemaphoreGiveRecursive( xMutex ) xQueueGiveMutexRecursive( ( xMutex ) )
|
#if( configUSE_RECURSIVE_MUTEXES == 1 )
|
||||||
|
#define xSemaphoreGiveRecursive( xMutex ) xQueueGiveMutexRecursive( ( xMutex ) )
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* semphr. h
|
* semphr. h
|
||||||
|
@ -879,7 +883,7 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
||||||
* \defgroup xSemaphoreCreateRecursiveMutex xSemaphoreCreateRecursiveMutex
|
* \defgroup xSemaphoreCreateRecursiveMutex xSemaphoreCreateRecursiveMutex
|
||||||
* \ingroup Semaphores
|
* \ingroup Semaphores
|
||||||
*/
|
*/
|
||||||
#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
|
#if( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configUSE_RECURSIVE_MUTEXES == 1 ) )
|
||||||
#define xSemaphoreCreateRecursiveMutex() xQueueCreateMutex( queueQUEUE_TYPE_RECURSIVE_MUTEX )
|
#define xSemaphoreCreateRecursiveMutex() xQueueCreateMutex( queueQUEUE_TYPE_RECURSIVE_MUTEX )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -952,7 +956,7 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
||||||
* \defgroup xSemaphoreCreateRecursiveMutexStatic xSemaphoreCreateRecursiveMutexStatic
|
* \defgroup xSemaphoreCreateRecursiveMutexStatic xSemaphoreCreateRecursiveMutexStatic
|
||||||
* \ingroup Semaphores
|
* \ingroup Semaphores
|
||||||
*/
|
*/
|
||||||
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
#if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configUSE_RECURSIVE_MUTEXES == 1 ) )
|
||||||
#define xSemaphoreCreateRecursiveMutexStatic( pxStaticSemaphore ) xQueueCreateMutexStatic( queueQUEUE_TYPE_RECURSIVE_MUTEX, pxStaticSemaphore )
|
#define xSemaphoreCreateRecursiveMutexStatic( pxStaticSemaphore ) xQueueCreateMutexStatic( queueQUEUE_TYPE_RECURSIVE_MUTEX, pxStaticSemaphore )
|
||||||
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
||||||
|
|
||||||
|
@ -1152,7 +1156,7 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* semphr.h
|
* semphr.h
|
||||||
* <pre>UBaseType_t uxSemaphoreGetCount( SemaphoreHandle_t xMutex );</pre>
|
* <pre>UBaseType_t uxSemaphoreGetCount( SemaphoreHandle_t xSemaphore );</pre>
|
||||||
*
|
*
|
||||||
* If the semaphore is a counting semaphore then uxSemaphoreGetCount() returns
|
* If the semaphore is a counting semaphore then uxSemaphoreGetCount() returns
|
||||||
* its current count value. If the semaphore is a binary semaphore then
|
* its current count value. If the semaphore is a binary semaphore then
|
||||||
|
|
|
@ -840,7 +840,7 @@ eTaskState eTaskGetState( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
* <pre>void vTaskGetTaskInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState );</pre>
|
* <pre>void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState );</pre>
|
||||||
*
|
*
|
||||||
* configUSE_TRACE_FACILITY must be defined as 1 for this function to be
|
* configUSE_TRACE_FACILITY must be defined as 1 for this function to be
|
||||||
* available. See the configuration section for more information.
|
* available. See the configuration section for more information.
|
||||||
|
@ -877,22 +877,22 @@ eTaskState eTaskGetState( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
||||||
TaskStatus_t xTaskDetails;
|
TaskStatus_t xTaskDetails;
|
||||||
|
|
||||||
// Obtain the handle of a task from its name.
|
// Obtain the handle of a task from its name.
|
||||||
xHandle = xTaskGetTaskHandle( "Task_Name" );
|
xHandle = xTaskGetHandle( "Task_Name" );
|
||||||
|
|
||||||
// Check the handle is not NULL.
|
// Check the handle is not NULL.
|
||||||
configASSERT( xHandle );
|
configASSERT( xHandle );
|
||||||
|
|
||||||
// Use the handle to obtain further information about the task.
|
// Use the handle to obtain further information about the task.
|
||||||
vTaskGetTaskInfo( xHandle,
|
vTaskGetInfo( xHandle,
|
||||||
&xTaskDetails,
|
&xTaskDetails,
|
||||||
pdTRUE, // Include the high water mark in xTaskDetails.
|
pdTRUE, // Include the high water mark in xTaskDetails.
|
||||||
eInvalid ); // Include the task state in xTaskDetails.
|
eInvalid ); // Include the task state in xTaskDetails.
|
||||||
}
|
}
|
||||||
</pre>
|
</pre>
|
||||||
* \defgroup vTaskGetTaskInfo vTaskGetTaskInfo
|
* \defgroup vTaskGetInfo vTaskGetInfo
|
||||||
* \ingroup TaskCtrl
|
* \ingroup TaskCtrl
|
||||||
*/
|
*/
|
||||||
void vTaskGetTaskInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState ) PRIVILEGED_FUNCTION;
|
void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
|
@ -1319,19 +1319,19 @@ char *pcTaskGetName( TaskHandle_t xTaskToQuery ) PRIVILEGED_FUNCTION; /*lint !e9
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
* <PRE>TaskHandle_t xTaskGetTaskHandle( const char *pcNameToQuery );</PRE>
|
* <PRE>TaskHandle_t xTaskGetHandle( const char *pcNameToQuery );</PRE>
|
||||||
*
|
*
|
||||||
* NOTE: This function takes a relatively long time to complete and should be
|
* NOTE: This function takes a relatively long time to complete and should be
|
||||||
* used sparingly.
|
* used sparingly.
|
||||||
*
|
*
|
||||||
* @return The handle of the task that has the human readable name pcNameToQuery.
|
* @return The handle of the task that has the human readable name pcNameToQuery.
|
||||||
* NULL is returned if no matching name is found. INCLUDE_xTaskGetTaskHandle
|
* NULL is returned if no matching name is found. INCLUDE_xTaskGetHandle
|
||||||
* must be set to 1 in FreeRTOSConfig.h for pcTaskGetTaskHandle() to be available.
|
* must be set to 1 in FreeRTOSConfig.h for pcTaskGetHandle() to be available.
|
||||||
*
|
*
|
||||||
* \defgroup pcTaskGetTaskHandle pcTaskGetTaskHandle
|
* \defgroup pcTaskGetHandle pcTaskGetHandle
|
||||||
* \ingroup TaskUtils
|
* \ingroup TaskUtils
|
||||||
*/
|
*/
|
||||||
TaskHandle_t xTaskGetTaskHandle( const char *pcNameToQuery ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
TaskHandle_t xTaskGetHandle( const char *pcNameToQuery ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task.h
|
* task.h
|
||||||
|
|
|
@ -137,6 +137,10 @@ occurred while the SysTick counter is stopped during tickless idle
|
||||||
calculations. */
|
calculations. */
|
||||||
#define portMISSED_COUNTS_FACTOR ( 45UL )
|
#define portMISSED_COUNTS_FACTOR ( 45UL )
|
||||||
|
|
||||||
|
/* For strict compliance with the Cortex-M spec the task start address should
|
||||||
|
have bit-0 clear, as it is loaded into the PC on exit from an ISR. */
|
||||||
|
#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL )
|
||||||
|
|
||||||
/* Required to allow portasm.asm access the configMAX_SYSCALL_INTERRUPT_PRIORITY
|
/* Required to allow portasm.asm access the configMAX_SYSCALL_INTERRUPT_PRIORITY
|
||||||
setting. */
|
setting. */
|
||||||
const uint32_t ulMaxSyscallInterruptPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY;
|
const uint32_t ulMaxSyscallInterruptPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY;
|
||||||
|
@ -224,7 +228,7 @@ StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t px
|
||||||
|
|
||||||
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) pxCode; /* PC */
|
*pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) prvTaskExitError; /* LR */
|
*pxTopOfStack = ( StackType_t ) prvTaskExitError; /* LR */
|
||||||
|
|
||||||
|
@ -419,6 +423,9 @@ void xPortSysTickHandler( void )
|
||||||
/* Enter a critical section but don't use the taskENTER_CRITICAL()
|
/* Enter a critical section but don't use the taskENTER_CRITICAL()
|
||||||
method as that will mask interrupts that should exit sleep mode. */
|
method as that will mask interrupts that should exit sleep mode. */
|
||||||
__asm( " cpsid i" );
|
__asm( " cpsid i" );
|
||||||
|
__asm( " dsb" );
|
||||||
|
__asm( " isb" );
|
||||||
|
|
||||||
|
|
||||||
/* If a context switch is pending or a task is waiting for the scheduler
|
/* If a context switch is pending or a task is waiting for the scheduler
|
||||||
to be unsuspended then abandon the low power entry. */
|
to be unsuspended then abandon the low power entry. */
|
||||||
|
|
|
@ -131,6 +131,10 @@ occurred while the SysTick counter is stopped during tickless idle
|
||||||
calculations. */
|
calculations. */
|
||||||
#define portMISSED_COUNTS_FACTOR ( 45UL )
|
#define portMISSED_COUNTS_FACTOR ( 45UL )
|
||||||
|
|
||||||
|
/* For strict compliance with the Cortex-M spec the task start address should
|
||||||
|
have bit-0 clear, as it is loaded into the PC on exit from an ISR. */
|
||||||
|
#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL )
|
||||||
|
|
||||||
/* Let the user override the pre-loading of the initial LR with the address of
|
/* Let the user override the pre-loading of the initial LR with the address of
|
||||||
prvTaskExitError() in case it messes up unwinding of the stack in the
|
prvTaskExitError() in case it messes up unwinding of the stack in the
|
||||||
debugger. */
|
debugger. */
|
||||||
|
@ -216,7 +220,7 @@ StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t px
|
||||||
pxTopOfStack--; /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */
|
pxTopOfStack--; /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */
|
||||||
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) pxCode; /* PC */
|
*pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */
|
*pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */
|
||||||
pxTopOfStack -= 5; /* R12, R3, R2 and R1. */
|
pxTopOfStack -= 5; /* R12, R3, R2 and R1. */
|
||||||
|
@ -480,6 +484,8 @@ void xPortSysTickHandler( void )
|
||||||
/* Enter a critical section but don't use the taskENTER_CRITICAL()
|
/* Enter a critical section but don't use the taskENTER_CRITICAL()
|
||||||
method as that will mask interrupts that should exit sleep mode. */
|
method as that will mask interrupts that should exit sleep mode. */
|
||||||
__asm volatile( "cpsid i" );
|
__asm volatile( "cpsid i" );
|
||||||
|
__asm volatile( "dsb" );
|
||||||
|
__asm volatile( "isb" );
|
||||||
|
|
||||||
/* If a context switch is pending or a task is waiting for the scheduler
|
/* If a context switch is pending or a task is waiting for the scheduler
|
||||||
to be unsuspended then abandon the low power entry. */
|
to be unsuspended then abandon the low power entry. */
|
||||||
|
|
|
@ -134,6 +134,10 @@ r0p1 port. */
|
||||||
/* The systick is a 24-bit counter. */
|
/* The systick is a 24-bit counter. */
|
||||||
#define portMAX_24_BIT_NUMBER ( 0xffffffUL )
|
#define portMAX_24_BIT_NUMBER ( 0xffffffUL )
|
||||||
|
|
||||||
|
/* For strict compliance with the Cortex-M spec the task start address should
|
||||||
|
have bit-0 clear, as it is loaded into the PC on exit from an ISR. */
|
||||||
|
#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL )
|
||||||
|
|
||||||
/* A fiddle factor to estimate the number of SysTick counts that would have
|
/* A fiddle factor to estimate the number of SysTick counts that would have
|
||||||
occurred while the SysTick counter is stopped during tickless idle
|
occurred while the SysTick counter is stopped during tickless idle
|
||||||
calculations. */
|
calculations. */
|
||||||
|
@ -233,7 +237,7 @@ StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t px
|
||||||
|
|
||||||
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) pxCode; /* PC */
|
*pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */
|
*pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */
|
||||||
|
|
||||||
|
@ -537,6 +541,8 @@ void xPortSysTickHandler( void )
|
||||||
/* Enter a critical section but don't use the taskENTER_CRITICAL()
|
/* Enter a critical section but don't use the taskENTER_CRITICAL()
|
||||||
method as that will mask interrupts that should exit sleep mode. */
|
method as that will mask interrupts that should exit sleep mode. */
|
||||||
__asm volatile( "cpsid i" );
|
__asm volatile( "cpsid i" );
|
||||||
|
__asm volatile( "dsb" );
|
||||||
|
__asm volatile( "isb" );
|
||||||
|
|
||||||
/* If a context switch is pending or a task is waiting for the scheduler
|
/* If a context switch is pending or a task is waiting for the scheduler
|
||||||
to be unsuspended then abandon the low power entry. */
|
to be unsuspended then abandon the low power entry. */
|
||||||
|
|
|
@ -133,6 +133,10 @@ occurred while the SysTick counter is stopped during tickless idle
|
||||||
calculations. */
|
calculations. */
|
||||||
#define portMISSED_COUNTS_FACTOR ( 45UL )
|
#define portMISSED_COUNTS_FACTOR ( 45UL )
|
||||||
|
|
||||||
|
/* For strict compliance with the Cortex-M spec the task start address should
|
||||||
|
have bit-0 clear, as it is loaded into the PC on exit from an ISR. */
|
||||||
|
#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL )
|
||||||
|
|
||||||
/* Let the user override the pre-loading of the initial LR with the address of
|
/* Let the user override the pre-loading of the initial LR with the address of
|
||||||
prvTaskExitError() in case it messes up unwinding of the stack in the
|
prvTaskExitError() in case it messes up unwinding of the stack in the
|
||||||
debugger. */
|
debugger. */
|
||||||
|
@ -227,7 +231,7 @@ StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t px
|
||||||
|
|
||||||
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) pxCode; /* PC */
|
*pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */
|
*pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */
|
||||||
|
|
||||||
|
@ -527,6 +531,8 @@ void xPortSysTickHandler( void )
|
||||||
/* Enter a critical section but don't use the taskENTER_CRITICAL()
|
/* Enter a critical section but don't use the taskENTER_CRITICAL()
|
||||||
method as that will mask interrupts that should exit sleep mode. */
|
method as that will mask interrupts that should exit sleep mode. */
|
||||||
__asm volatile( "cpsid i" );
|
__asm volatile( "cpsid i" );
|
||||||
|
__asm volatile( "dsb" );
|
||||||
|
__asm volatile( "isb" );
|
||||||
|
|
||||||
/* If a context switch is pending or a task is waiting for the scheduler
|
/* If a context switch is pending or a task is waiting for the scheduler
|
||||||
to be unsuspended then abandon the low power entry. */
|
to be unsuspended then abandon the low power entry. */
|
||||||
|
|
|
@ -555,7 +555,7 @@ uint32_t ulReturn;
|
||||||
this is not the case (if some bits represent a sub-priority).
|
this is not the case (if some bits represent a sub-priority).
|
||||||
|
|
||||||
The priority grouping is configured by the GIC's binary point register
|
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
|
(ICCBPR). Writing 0 to ICCBPR will ensure it is set to its lowest
|
||||||
possible value (which may be above 0). */
|
possible value (which may be above 0). */
|
||||||
configASSERT( ( portICCBPR_BINARY_POINT_REGISTER & portBINARY_POINT_BITS ) <= portMAX_BINARY_POINT_VALUE );
|
configASSERT( ( portICCBPR_BINARY_POINT_REGISTER & portBINARY_POINT_BITS ) <= portMAX_BINARY_POINT_VALUE );
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,6 +131,10 @@ occurred while the SysTick counter is stopped during tickless idle
|
||||||
calculations. */
|
calculations. */
|
||||||
#define portMISSED_COUNTS_FACTOR ( 45UL )
|
#define portMISSED_COUNTS_FACTOR ( 45UL )
|
||||||
|
|
||||||
|
/* For strict compliance with the Cortex-M spec the task start address should
|
||||||
|
have bit-0 clear, as it is loaded into the PC on exit from an ISR. */
|
||||||
|
#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL )
|
||||||
|
|
||||||
/* For backward compatibility, ensure configKERNEL_INTERRUPT_PRIORITY is
|
/* For backward compatibility, ensure configKERNEL_INTERRUPT_PRIORITY is
|
||||||
defined. The value 255 should also ensure backward compatibility.
|
defined. The value 255 should also ensure backward compatibility.
|
||||||
FreeRTOS.org versions prior to V4.3.0 did not include this definition. */
|
FreeRTOS.org versions prior to V4.3.0 did not include this definition. */
|
||||||
|
@ -212,7 +216,7 @@ StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t px
|
||||||
pxTopOfStack--; /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */
|
pxTopOfStack--; /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */
|
||||||
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) pxCode; /* PC */
|
*pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) prvTaskExitError; /* LR */
|
*pxTopOfStack = ( StackType_t ) prvTaskExitError; /* LR */
|
||||||
pxTopOfStack -= 5; /* R12, R3, R2 and R1. */
|
pxTopOfStack -= 5; /* R12, R3, R2 and R1. */
|
||||||
|
@ -392,6 +396,9 @@ void xPortSysTickHandler( void )
|
||||||
/* Enter a critical section but don't use the taskENTER_CRITICAL()
|
/* Enter a critical section but don't use the taskENTER_CRITICAL()
|
||||||
method as that will mask interrupts that should exit sleep mode. */
|
method as that will mask interrupts that should exit sleep mode. */
|
||||||
__disable_interrupt();
|
__disable_interrupt();
|
||||||
|
__DSB();
|
||||||
|
__ISB();
|
||||||
|
|
||||||
|
|
||||||
/* If a context switch is pending or a task is waiting for the scheduler
|
/* If a context switch is pending or a task is waiting for the scheduler
|
||||||
to be unsuspended then abandon the low power entry. */
|
to be unsuspended then abandon the low power entry. */
|
||||||
|
|
|
@ -146,6 +146,9 @@ occurred while the SysTick counter is stopped during tickless idle
|
||||||
calculations. */
|
calculations. */
|
||||||
#define portMISSED_COUNTS_FACTOR ( 45UL )
|
#define portMISSED_COUNTS_FACTOR ( 45UL )
|
||||||
|
|
||||||
|
/* For strict compliance with the Cortex-M spec the task start address should
|
||||||
|
have bit-0 clear, as it is loaded into the PC on exit from an ISR. */
|
||||||
|
#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL )
|
||||||
|
|
||||||
/* Each task maintains its own interrupt status in the critical nesting
|
/* Each task maintains its own interrupt status in the critical nesting
|
||||||
variable. */
|
variable. */
|
||||||
|
@ -230,7 +233,7 @@ StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t px
|
||||||
|
|
||||||
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) pxCode; /* PC */
|
*pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) prvTaskExitError; /* LR */
|
*pxTopOfStack = ( StackType_t ) prvTaskExitError; /* LR */
|
||||||
|
|
||||||
|
@ -434,6 +437,9 @@ void xPortSysTickHandler( void )
|
||||||
/* Enter a critical section but don't use the taskENTER_CRITICAL()
|
/* Enter a critical section but don't use the taskENTER_CRITICAL()
|
||||||
method as that will mask interrupts that should exit sleep mode. */
|
method as that will mask interrupts that should exit sleep mode. */
|
||||||
__disable_interrupt();
|
__disable_interrupt();
|
||||||
|
__DSB();
|
||||||
|
__ISB();
|
||||||
|
|
||||||
|
|
||||||
/* If a context switch is pending or a task is waiting for the scheduler
|
/* If a context switch is pending or a task is waiting for the scheduler
|
||||||
to be unsuspended then abandon the low power entry. */
|
to be unsuspended then abandon the low power entry. */
|
||||||
|
|
|
@ -140,6 +140,9 @@ occurred while the SysTick counter is stopped during tickless idle
|
||||||
calculations. */
|
calculations. */
|
||||||
#define portMISSED_COUNTS_FACTOR ( 45UL )
|
#define portMISSED_COUNTS_FACTOR ( 45UL )
|
||||||
|
|
||||||
|
/* For strict compliance with the Cortex-M spec the task start address should
|
||||||
|
have bit-0 clear, as it is loaded into the PC on exit from an ISR. */
|
||||||
|
#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL )
|
||||||
|
|
||||||
/* Each task maintains its own interrupt status in the critical nesting
|
/* Each task maintains its own interrupt status in the critical nesting
|
||||||
variable. */
|
variable. */
|
||||||
|
@ -224,7 +227,7 @@ StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t px
|
||||||
|
|
||||||
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) pxCode; /* PC */
|
*pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) prvTaskExitError; /* LR */
|
*pxTopOfStack = ( StackType_t ) prvTaskExitError; /* LR */
|
||||||
|
|
||||||
|
@ -418,6 +421,8 @@ void xPortSysTickHandler( void )
|
||||||
/* Enter a critical section but don't use the taskENTER_CRITICAL()
|
/* Enter a critical section but don't use the taskENTER_CRITICAL()
|
||||||
method as that will mask interrupts that should exit sleep mode. */
|
method as that will mask interrupts that should exit sleep mode. */
|
||||||
__disable_interrupt();
|
__disable_interrupt();
|
||||||
|
__DSB();
|
||||||
|
__ISB();
|
||||||
|
|
||||||
/* If a context switch is pending or a task is waiting for the scheduler
|
/* If a context switch is pending or a task is waiting for the scheduler
|
||||||
to be unsuspended then abandon the low power entry. */
|
to be unsuspended then abandon the low power entry. */
|
||||||
|
|
|
@ -141,6 +141,10 @@ occurred while the SysTick counter is stopped during tickless idle
|
||||||
calculations. */
|
calculations. */
|
||||||
#define portMISSED_COUNTS_FACTOR ( 45UL )
|
#define portMISSED_COUNTS_FACTOR ( 45UL )
|
||||||
|
|
||||||
|
/* For strict compliance with the Cortex-M spec the task start address should
|
||||||
|
have bit-0 clear, as it is loaded into the PC on exit from an ISR. */
|
||||||
|
#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL )
|
||||||
|
|
||||||
/* Each task maintains its own interrupt status in the critical nesting
|
/* Each task maintains its own interrupt status in the critical nesting
|
||||||
variable. */
|
variable. */
|
||||||
static UBaseType_t uxCriticalNesting = 0xaaaaaaaa;
|
static UBaseType_t uxCriticalNesting = 0xaaaaaaaa;
|
||||||
|
@ -217,7 +221,7 @@ StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t px
|
||||||
pxTopOfStack--; /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */
|
pxTopOfStack--; /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */
|
||||||
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) pxCode; /* PC */
|
*pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) prvTaskExitError; /* LR */
|
*pxTopOfStack = ( StackType_t ) prvTaskExitError; /* LR */
|
||||||
|
|
||||||
|
@ -476,6 +480,8 @@ void xPortSysTickHandler( void )
|
||||||
/* Enter a critical section but don't use the taskENTER_CRITICAL()
|
/* Enter a critical section but don't use the taskENTER_CRITICAL()
|
||||||
method as that will mask interrupts that should exit sleep mode. */
|
method as that will mask interrupts that should exit sleep mode. */
|
||||||
__disable_irq();
|
__disable_irq();
|
||||||
|
__dsb( portSY_FULL_READ_WRITE );
|
||||||
|
__isb( portSY_FULL_READ_WRITE );
|
||||||
|
|
||||||
/* If a context switch is pending or a task is waiting for the scheduler
|
/* If a context switch is pending or a task is waiting for the scheduler
|
||||||
to be unsuspended then abandon the low power entry. */
|
to be unsuspended then abandon the low power entry. */
|
||||||
|
|
|
@ -152,6 +152,10 @@ occurred while the SysTick counter is stopped during tickless idle
|
||||||
calculations. */
|
calculations. */
|
||||||
#define portMISSED_COUNTS_FACTOR ( 45UL )
|
#define portMISSED_COUNTS_FACTOR ( 45UL )
|
||||||
|
|
||||||
|
/* For strict compliance with the Cortex-M spec the task start address should
|
||||||
|
have bit-0 clear, as it is loaded into the PC on exit from an ISR. */
|
||||||
|
#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL )
|
||||||
|
|
||||||
/* Each task maintains its own interrupt status in the critical nesting
|
/* Each task maintains its own interrupt status in the critical nesting
|
||||||
variable. */
|
variable. */
|
||||||
static UBaseType_t uxCriticalNesting = 0xaaaaaaaa;
|
static UBaseType_t uxCriticalNesting = 0xaaaaaaaa;
|
||||||
|
@ -237,7 +241,7 @@ StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t px
|
||||||
|
|
||||||
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) pxCode; /* PC */
|
*pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) prvTaskExitError; /* LR */
|
*pxTopOfStack = ( StackType_t ) prvTaskExitError; /* LR */
|
||||||
|
|
||||||
|
@ -564,6 +568,8 @@ void xPortSysTickHandler( void )
|
||||||
/* Enter a critical section but don't use the taskENTER_CRITICAL()
|
/* Enter a critical section but don't use the taskENTER_CRITICAL()
|
||||||
method as that will mask interrupts that should exit sleep mode. */
|
method as that will mask interrupts that should exit sleep mode. */
|
||||||
__disable_irq();
|
__disable_irq();
|
||||||
|
__dsb( portSY_FULL_READ_WRITE );
|
||||||
|
__isb( portSY_FULL_READ_WRITE );
|
||||||
|
|
||||||
/* If a context switch is pending or a task is waiting for the scheduler
|
/* If a context switch is pending or a task is waiting for the scheduler
|
||||||
to be unsuspended then abandon the low power entry. */
|
to be unsuspended then abandon the low power entry. */
|
||||||
|
|
|
@ -146,6 +146,10 @@ occurred while the SysTick counter is stopped during tickless idle
|
||||||
calculations. */
|
calculations. */
|
||||||
#define portMISSED_COUNTS_FACTOR ( 45UL )
|
#define portMISSED_COUNTS_FACTOR ( 45UL )
|
||||||
|
|
||||||
|
/* For strict compliance with the Cortex-M spec the task start address should
|
||||||
|
have bit-0 clear, as it is loaded into the PC on exit from an ISR. */
|
||||||
|
#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL )
|
||||||
|
|
||||||
/* Each task maintains its own interrupt status in the critical nesting
|
/* Each task maintains its own interrupt status in the critical nesting
|
||||||
variable. */
|
variable. */
|
||||||
static UBaseType_t uxCriticalNesting = 0xaaaaaaaa;
|
static UBaseType_t uxCriticalNesting = 0xaaaaaaaa;
|
||||||
|
@ -231,7 +235,7 @@ StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t px
|
||||||
|
|
||||||
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) pxCode; /* PC */
|
*pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) prvTaskExitError; /* LR */
|
*pxTopOfStack = ( StackType_t ) prvTaskExitError; /* LR */
|
||||||
|
|
||||||
|
@ -550,6 +554,8 @@ void xPortSysTickHandler( void )
|
||||||
/* Enter a critical section but don't use the taskENTER_CRITICAL()
|
/* Enter a critical section but don't use the taskENTER_CRITICAL()
|
||||||
method as that will mask interrupts that should exit sleep mode. */
|
method as that will mask interrupts that should exit sleep mode. */
|
||||||
__disable_irq();
|
__disable_irq();
|
||||||
|
__dsb( portSY_FULL_READ_WRITE );
|
||||||
|
__isb( portSY_FULL_READ_WRITE );
|
||||||
|
|
||||||
/* If a context switch is pending or a task is waiting for the scheduler
|
/* If a context switch is pending or a task is waiting for the scheduler
|
||||||
to be unsuspended then abandon the low power entry. */
|
to be unsuspended then abandon the low power entry. */
|
||||||
|
|
|
@ -105,6 +105,10 @@ debugger. */
|
||||||
#define portTASK_RETURN_ADDRESS prvTaskExitError
|
#define portTASK_RETURN_ADDRESS prvTaskExitError
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* For strict compliance with the Cortex-M spec the task start address should
|
||||||
|
have bit-0 clear, as it is loaded into the PC on exit from an ISR. */
|
||||||
|
#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL )
|
||||||
|
|
||||||
/* The priority used by the kernel is assigned to a variable to make access
|
/* The priority used by the kernel is assigned to a variable to make access
|
||||||
from inline assembler easier. */
|
from inline assembler easier. */
|
||||||
const uint32_t ulKernelPriority = configKERNEL_INTERRUPT_PRIORITY;
|
const uint32_t ulKernelPriority = configKERNEL_INTERRUPT_PRIORITY;
|
||||||
|
@ -154,7 +158,7 @@ StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t px
|
||||||
|
|
||||||
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
*pxTopOfStack = portINITIAL_XPSR; /* xPSR */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) pxCode; /* PC */
|
*pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */
|
*pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */
|
||||||
|
|
||||||
|
|
|
@ -490,7 +490,7 @@ static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait, const BaseT
|
||||||
* Searches pxList for a task with name pcNameToQuery - returning a handle to
|
* Searches pxList for a task with name pcNameToQuery - returning a handle to
|
||||||
* the task if it is found, or NULL if the task is not found.
|
* the task if it is found, or NULL if the task is not found.
|
||||||
*/
|
*/
|
||||||
#if ( INCLUDE_xTaskGetTaskHandle == 1 )
|
#if ( INCLUDE_xTaskGetHandle == 1 )
|
||||||
|
|
||||||
static TCB_t *prvSearchForNameWithinSingleList( List_t *pxList, const char pcNameToQuery[] ) PRIVILEGED_FUNCTION;
|
static TCB_t *prvSearchForNameWithinSingleList( List_t *pxList, const char pcNameToQuery[] ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
|
@ -978,6 +978,12 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB )
|
||||||
mtCOVERAGE_TEST_MARKER();
|
mtCOVERAGE_TEST_MARKER();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Increment the uxTaskNumber also so kernel aware debuggers can
|
||||||
|
detect that the task lists need re-generating. This is done before
|
||||||
|
portPRE_TASK_DELETE_HOOK() as in the Windows port that macro will
|
||||||
|
not return. */
|
||||||
|
uxTaskNumber++;
|
||||||
|
|
||||||
if( pxTCB == pxCurrentTCB )
|
if( pxTCB == pxCurrentTCB )
|
||||||
{
|
{
|
||||||
/* A task is deleting itself. This cannot complete within the
|
/* A task is deleting itself. This cannot complete within the
|
||||||
|
@ -991,16 +997,23 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB )
|
||||||
there is a task that has been deleted and that it should therefore
|
there is a task that has been deleted and that it should therefore
|
||||||
check the xTasksWaitingTermination list. */
|
check the xTasksWaitingTermination list. */
|
||||||
++uxDeletedTasksWaitingCleanUp;
|
++uxDeletedTasksWaitingCleanUp;
|
||||||
|
|
||||||
|
/* The pre-delete hook is primarily for the Windows simulator,
|
||||||
|
in which Windows specific clean up operations are performed,
|
||||||
|
after which it is not possible to yield away from this task -
|
||||||
|
hence xYieldPending is used to latch that a context switch is
|
||||||
|
required. */
|
||||||
|
portPRE_TASK_DELETE_HOOK( pxTCB, &xYieldPending );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
--uxCurrentNumberOfTasks;
|
--uxCurrentNumberOfTasks;
|
||||||
prvDeleteTCB( pxTCB );
|
prvDeleteTCB( pxTCB );
|
||||||
}
|
|
||||||
|
|
||||||
/* Increment the uxTaskNumber also so kernel aware debuggers can
|
/* Reset the next expected unblock time in case it referred to
|
||||||
detect that the task lists need re-generating. */
|
the task that has just been deleted. */
|
||||||
uxTaskNumber++;
|
prvResetNextTaskUnblockTime();
|
||||||
|
}
|
||||||
|
|
||||||
traceTASK_DELETE( pxTCB );
|
traceTASK_DELETE( pxTCB );
|
||||||
}
|
}
|
||||||
|
@ -1013,24 +1026,11 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB )
|
||||||
if( pxTCB == pxCurrentTCB )
|
if( pxTCB == pxCurrentTCB )
|
||||||
{
|
{
|
||||||
configASSERT( uxSchedulerSuspended == 0 );
|
configASSERT( uxSchedulerSuspended == 0 );
|
||||||
|
|
||||||
/* The pre-delete hook is primarily for the Windows simulator,
|
|
||||||
in which Windows specific clean up operations are performed,
|
|
||||||
after which it is not possible to yield away from this task -
|
|
||||||
hence xYieldPending is used to latch that a context switch is
|
|
||||||
required. */
|
|
||||||
portPRE_TASK_DELETE_HOOK( pxTCB, &xYieldPending );
|
|
||||||
portYIELD_WITHIN_API();
|
portYIELD_WITHIN_API();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Reset the next expected unblock time in case it referred to
|
mtCOVERAGE_TEST_MARKER();
|
||||||
the task that has just been deleted. */
|
|
||||||
taskENTER_CRITICAL();
|
|
||||||
{
|
|
||||||
prvResetNextTaskUnblockTime();
|
|
||||||
}
|
|
||||||
taskEXIT_CRITICAL();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2083,7 +2083,7 @@ TCB_t *pxTCB;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( INCLUDE_xTaskGetTaskHandle == 1 )
|
#if ( INCLUDE_xTaskGetHandle == 1 )
|
||||||
|
|
||||||
static TCB_t *prvSearchForNameWithinSingleList( List_t *pxList, const char pcNameToQuery[] )
|
static TCB_t *prvSearchForNameWithinSingleList( List_t *pxList, const char pcNameToQuery[] )
|
||||||
{
|
{
|
||||||
|
@ -2141,12 +2141,12 @@ TCB_t *pxTCB;
|
||||||
return pxReturn;
|
return pxReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* INCLUDE_xTaskGetTaskHandle */
|
#endif /* INCLUDE_xTaskGetHandle */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( INCLUDE_xTaskGetTaskHandle == 1 )
|
#if ( INCLUDE_xTaskGetHandle == 1 )
|
||||||
|
|
||||||
TaskHandle_t xTaskGetTaskHandle( const char *pcNameToQuery ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
TaskHandle_t xTaskGetHandle( const char *pcNameToQuery ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
||||||
{
|
{
|
||||||
UBaseType_t uxQueue = configMAX_PRIORITIES;
|
UBaseType_t uxQueue = configMAX_PRIORITIES;
|
||||||
TCB_t* pxTCB;
|
TCB_t* pxTCB;
|
||||||
|
@ -2206,7 +2206,7 @@ TCB_t *pxTCB;
|
||||||
return ( TaskHandle_t ) pxTCB;
|
return ( TaskHandle_t ) pxTCB;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* INCLUDE_xTaskGetTaskHandle */
|
#endif /* INCLUDE_xTaskGetHandle */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( configUSE_TRACE_FACILITY == 1 )
|
#if ( configUSE_TRACE_FACILITY == 1 )
|
||||||
|
@ -3301,7 +3301,7 @@ static void prvCheckTasksWaitingTermination( void )
|
||||||
|
|
||||||
#if( configUSE_TRACE_FACILITY == 1 )
|
#if( configUSE_TRACE_FACILITY == 1 )
|
||||||
|
|
||||||
void vTaskGetTaskInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState )
|
void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState )
|
||||||
{
|
{
|
||||||
TCB_t *pxTCB;
|
TCB_t *pxTCB;
|
||||||
|
|
||||||
|
@ -3406,7 +3406,7 @@ static void prvCheckTasksWaitingTermination( void )
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
listGET_OWNER_OF_NEXT_ENTRY( pxNextTCB, pxList );
|
listGET_OWNER_OF_NEXT_ENTRY( pxNextTCB, pxList );
|
||||||
vTaskGetTaskInfo( ( TaskHandle_t ) pxNextTCB, &( pxTaskStatusArray[ uxTask ] ), pdTRUE, eState );
|
vTaskGetInfo( ( TaskHandle_t ) pxNextTCB, &( pxTaskStatusArray[ uxTask ] ), pdTRUE, eState );
|
||||||
uxTask++;
|
uxTask++;
|
||||||
} while( pxNextTCB != pxFirstTCB );
|
} while( pxNextTCB != pxFirstTCB );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue