mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-19 21:11:57 -04:00
Update libraries and sundry check-ins ready for the V10.3.0 kernel release.
This commit is contained in:
parent
d319bb0c71
commit
7bea399061
|
@ -305,6 +305,19 @@ extern uint32_t ulApplicationGetNextSequenceNumber( uint32_t ulSourceAddress,
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Supply a random number to FreeRTOS+TCP stack.
|
||||||
|
* THIS IS ONLY A DUMMY IMPLEMENTATION THAT RETURNS A PSEUDO RANDOM NUMBER
|
||||||
|
* SO IS NOT INTENDED FOR USE IN PRODUCTION SYSTEMS.
|
||||||
|
*/
|
||||||
|
BaseType_t xApplicationGetRandomNumber(uint32_t* pulNumber)
|
||||||
|
{
|
||||||
|
*(pulNumber) = uxRand();
|
||||||
|
return pdTRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/* configUSE_STATIC_ALLOCATION is set to 1, so the application must provide an
|
/* configUSE_STATIC_ALLOCATION is set to 1, so the application must provide an
|
||||||
implementation of vApplicationGetIdleTaskMemory() to provide the memory that is
|
implementation of vApplicationGetIdleTaskMemory() to provide the memory that is
|
||||||
used by the Idle task. */
|
used by the Idle task. */
|
||||||
|
|
|
@ -305,6 +305,18 @@ extern uint32_t ulApplicationGetNextSequenceNumber( uint32_t ulSourceAddress,
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Supply a random number to FreeRTOS+TCP stack.
|
||||||
|
* THIS IS ONLY A DUMMY IMPLEMENTATION THAT RETURNS A PSEUDO RANDOM NUMBER
|
||||||
|
* SO IS NOT INTENDED FOR USE IN PRODUCTION SYSTEMS.
|
||||||
|
*/
|
||||||
|
BaseType_t xApplicationGetRandomNumber(uint32_t* pulNumber)
|
||||||
|
{
|
||||||
|
*(pulNumber) = uxRand();
|
||||||
|
return pdTRUE;
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/* configUSE_STATIC_ALLOCATION is set to 1, so the application must provide an
|
/* configUSE_STATIC_ALLOCATION is set to 1, so the application must provide an
|
||||||
implementation of vApplicationGetIdleTaskMemory() to provide the memory that is
|
implementation of vApplicationGetIdleTaskMemory() to provide the memory that is
|
||||||
used by the Idle task. */
|
used by the Idle task. */
|
||||||
|
|
|
@ -314,6 +314,18 @@ extern uint32_t ulApplicationGetNextSequenceNumber( uint32_t ulSourceAddress,
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Supply a random number to FreeRTOS+TCP stack.
|
||||||
|
* THIS IS ONLY A DUMMY IMPLEMENTATION THAT RETURNS A PSEUDO RANDOM NUMBER
|
||||||
|
* SO IS NOT INTENDED FOR USE IN PRODUCTION SYSTEMS.
|
||||||
|
*/
|
||||||
|
BaseType_t xApplicationGetRandomNumber(uint32_t* pulNumber)
|
||||||
|
{
|
||||||
|
*(pulNumber) = uxRand();
|
||||||
|
return pdTRUE;
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/* configUSE_STATIC_ALLOCATION is set to 1, so the application must provide an
|
/* configUSE_STATIC_ALLOCATION is set to 1, so the application must provide an
|
||||||
implementation of vApplicationGetIdleTaskMemory() to provide the memory that is
|
implementation of vApplicationGetIdleTaskMemory() to provide the memory that is
|
||||||
used by the Idle task. */
|
used by the Idle task. */
|
||||||
|
|
|
@ -306,6 +306,18 @@ extern uint32_t ulApplicationGetNextSequenceNumber( uint32_t ulSourceAddress,
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Supply a random number to FreeRTOS+TCP stack.
|
||||||
|
* THIS IS ONLY A DUMMY IMPLEMENTATION THAT RETURNS A PSEUDO RANDOM NUMBER
|
||||||
|
* SO IS NOT INTENDED FOR USE IN PRODUCTION SYSTEMS.
|
||||||
|
*/
|
||||||
|
BaseType_t xApplicationGetRandomNumber(uint32_t* pulNumber)
|
||||||
|
{
|
||||||
|
*(pulNumber) = uxRand();
|
||||||
|
return pdTRUE;
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/* configUSE_STATIC_ALLOCATION is set to 1, so the application must provide an
|
/* configUSE_STATIC_ALLOCATION is set to 1, so the application must provide an
|
||||||
implementation of vApplicationGetIdleTaskMemory() to provide the memory that is
|
implementation of vApplicationGetIdleTaskMemory() to provide the memory that is
|
||||||
used by the Idle task. */
|
used by the Idle task. */
|
||||||
|
|
|
@ -146,6 +146,23 @@ extern uint32_t ulApplicationGetNextSequenceNumber( uint32_t ulSourceAddress,
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Supply a random number to FreeRTOS+TCP stack.
|
||||||
|
* THIS IS ONLY A DUMMY IMPLEMENTATION THAT RETURNS A PSEUDO RANDOM NUMBER
|
||||||
|
* SO IS NOT INTENDED FOR USE IN PRODUCTION SYSTEMS.
|
||||||
|
*/
|
||||||
|
BaseType_t xApplicationGetRandomNumber(uint32_t* pulNumber)
|
||||||
|
{
|
||||||
|
/* This example is the first in a sequence that adds IoT functionality into
|
||||||
|
an existing TCP / IP project.In this first project the TCP / IP stack is not
|
||||||
|
actually used, but it is still built, which requires this function to be
|
||||||
|
present.For now this function does not need to do anything. */
|
||||||
|
__debugbreak();
|
||||||
|
*(pulNumber) = 0;
|
||||||
|
return pdFALSE;
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
UBaseType_t uxRand( void )
|
UBaseType_t uxRand( void )
|
||||||
{
|
{
|
||||||
/* This example is the first in a sequence that adds IoT functionality into
|
/* This example is the first in a sequence that adds IoT functionality into
|
||||||
|
|
|
@ -814,6 +814,19 @@ extern uint32_t ulApplicationGetNextSequenceNumber(uint32_t ulSourceAddress,
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Supply a random number to FreeRTOS+TCP stack.
|
||||||
|
* THIS IS ONLY A DUMMY IMPLEMENTATION THAT RETURNS A PSEUDO RANDOM NUMBER
|
||||||
|
* SO IS NOT INTENDED FOR USE IN PRODUCTION SYSTEMS.
|
||||||
|
*/
|
||||||
|
BaseType_t xApplicationGetRandomNumber(uint32_t* pulNumber)
|
||||||
|
{
|
||||||
|
*(pulNumber) = uxRand();
|
||||||
|
return pdTRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if( ipconfigUSE_LLMNR != 0 ) || ( ipconfigUSE_NBNS != 0 ) || ( ipconfigDHCP_REGISTER_HOSTNAME != 0 )
|
#if( ipconfigUSE_LLMNR != 0 ) || ( ipconfigUSE_NBNS != 0 ) || ( ipconfigDHCP_REGISTER_HOSTNAME != 0 )
|
||||||
|
|
||||||
const char *pcApplicationHostnameHook( void )
|
const char *pcApplicationHostnameHook( void )
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+CLI V1.0.4
|
* FreeRTOS+CLI V1.0.x Labs copy
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+CLI V1.0.4
|
* FreeRTOS+CLI V1.0.x Labs copy
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
Changes between V1.0.3 and V1.0.4 released
|
Changes between V1.0.3 and TBD
|
||||||
|
|
||||||
+ Update to use stdint and the FreeRTOS specific typedefs that were
|
+ Update to use stdint and the FreeRTOS specific typedefs that were
|
||||||
introduced in FreeRTOS V8.0.0.
|
introduced in FreeRTOS V8.0.0.
|
||||||
|
|
|
@ -48,13 +48,15 @@
|
||||||
/**
|
/**
|
||||||
* @brief The timeout for MQTT operations in this example.
|
* @brief The timeout for MQTT operations in this example.
|
||||||
*/
|
*/
|
||||||
#define mqttexampleMQTT_TIMEOUT_MS ( 5000 )
|
#define mqttexampleMQTT_TIMEOUT_MS ( 50000 )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The MQTT client identifier used in this example.
|
* @brief The MQTT client identifier used in this example.
|
||||||
*/
|
*/
|
||||||
#define mqttexampleCLIENT_IDENTIFIER "mqttexampleclient"
|
#define mqttexampleCLIENT_IDENTIFIER "mqttexampleclient"
|
||||||
|
|
||||||
|
const char *pcClientIdentifiers[] = { "AAA" };//, "BBB", "CCC", "DDD", "EEE", "FFF", "GGG", "HHH", "III", "JJJ" };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Details of the MQTT broker to connect to.
|
* @brief Details of the MQTT broker to connect to.
|
||||||
*
|
*
|
||||||
|
@ -97,11 +99,6 @@
|
||||||
#define mqttexampleMESSAGE_RECEIVED_BIT ( 1UL << 1UL )
|
#define mqttexampleMESSAGE_RECEIVED_BIT ( 1UL << 1UL )
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief The MQTT connection handle used in this example.
|
|
||||||
*/
|
|
||||||
static IotMqttConnection_t xMQTTConnection = IOT_MQTT_CONNECTION_INITIALIZER;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Parameters used to create the system task pool.
|
* @brief Parameters used to create the system task pool.
|
||||||
*/
|
*/
|
||||||
|
@ -167,28 +164,28 @@ static void prvExample_OnMessageReceived( void * pvCallbackContext,
|
||||||
*
|
*
|
||||||
* @note This example does not use TLS and therefore will not work with MQTT.
|
* @note This example does not use TLS and therefore will not work with MQTT.
|
||||||
*/
|
*/
|
||||||
static void prvMQTTConnect( void );
|
static void prvMQTTConnect( IotMqttConnection_t *xMQTTConnection, const char *pcClientID );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Subscribes to the topic as specified in mqttexampleTOPIC.
|
* @brief Subscribes to pcTopicString.
|
||||||
*/
|
*/
|
||||||
static void prvMQTTSubscribe( void );
|
static void prvMQTTSubscribe( IotMqttConnection_t xMQTTConnection, const char * const pcTopicString );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Publishes a messages mqttexampleMESSAGE on mqttexampleTOPIC topic.
|
* @brief Publishes a messages mqttexampleMESSAGE on mqttexampleTOPIC topic.
|
||||||
*/
|
*/
|
||||||
static void prvMQTTPublish( void );
|
static void prvMQTTPublish( IotMqttConnection_t xMQTTConnection, const char * const pcTopicString );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Unsubscribes from the mqttexampleTOPIC topic.
|
* @brief Unsubscribes from the mqttexampleTOPIC topic.
|
||||||
*/
|
*/
|
||||||
static void prvMQTTUnsubscribe( void );
|
static void prvMQTTUnsubscribe( IotMqttConnection_t xMQTTConnection, const char * const pcTopicString );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Disconnects from the MQTT broker gracefully by sending an MQTT
|
* @brief Disconnects from the MQTT broker gracefully by sending an MQTT
|
||||||
* DISCONNECT message.
|
* DISCONNECT message.
|
||||||
*/
|
*/
|
||||||
static void prvMQTTDisconnect( void );
|
static void prvMQTTDisconnect( IotMqttConnection_t xMQTTConnection );
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvExample_OnDisconnect( void * pvCallbackContext,
|
static void prvExample_OnDisconnect( void * pvCallbackContext,
|
||||||
|
@ -213,10 +210,10 @@ static void prvExample_OnMessageReceived( void * pvCallbackContext,
|
||||||
TaskHandle_t xDemoTaskHandle = ( TaskHandle_t ) pvCallbackContext;
|
TaskHandle_t xDemoTaskHandle = ( TaskHandle_t ) pvCallbackContext;
|
||||||
|
|
||||||
/* Ensure that the message is received on the expected topic. */
|
/* Ensure that the message is received on the expected topic. */
|
||||||
configASSERT( pxCallbackParams->u.message.info.topicNameLength == strlen( mqttexampleTOPIC ) );
|
// configASSERT( pxCallbackParams->u.message.info.topicNameLength == strlen( mqttexampleTOPIC ) );
|
||||||
configASSERT( strncmp( pxCallbackParams->u.message.info.pTopicName,
|
// configASSERT( strncmp( pxCallbackParams->u.message.info.pTopicName,
|
||||||
mqttexampleTOPIC,
|
// mqttexampleTOPIC,
|
||||||
strlen( mqttexampleTOPIC ) ) == 0 );
|
// strlen( mqttexampleTOPIC ) ) == 0 );
|
||||||
|
|
||||||
/* Ensure that the expected message is received. */
|
/* Ensure that the expected message is received. */
|
||||||
configASSERT( pxCallbackParams->u.message.info.payloadLength == strlen( mqttexampleMESSAGE ) );
|
configASSERT( pxCallbackParams->u.message.info.payloadLength == strlen( mqttexampleMESSAGE ) );
|
||||||
|
@ -243,24 +240,34 @@ TaskHandle_t xDemoTaskHandle = ( TaskHandle_t ) pvCallbackContext;
|
||||||
|
|
||||||
void vStartSimpleMQTTDemo( void )
|
void vStartSimpleMQTTDemo( void )
|
||||||
{
|
{
|
||||||
|
uint32_t x;
|
||||||
|
const uint32_t ulMax_x = sizeof( pcClientIdentifiers ) / sizeof( char * );
|
||||||
|
|
||||||
/* This example uses a single application task, which in turn is used to
|
/* This example uses a single application task, which in turn is used to
|
||||||
* connect, subscribe, publish, unsubscribe and disconnect from the MQTT
|
* connect, subscribe, publish, unsubscribe and disconnect from the MQTT
|
||||||
* broker. */
|
* broker. */
|
||||||
|
for( x = 0; x < ulMax_x; x++ )
|
||||||
|
{
|
||||||
xTaskCreate( prvMQTTDemoTask, /* Function that implements the task. */
|
xTaskCreate( prvMQTTDemoTask, /* Function that implements the task. */
|
||||||
"MQTTDemo", /* Text name for the task - only used for debugging. */
|
"MQTTDemo", /* Text name for the task - only used for debugging. */
|
||||||
configMINIMAL_STACK_SIZE, /* Size of stack (in words, not bytes) to allocate for the task. */
|
configMINIMAL_STACK_SIZE, /* Size of stack (in words, not bytes) to allocate for the task. */
|
||||||
NULL, /* Task parameter - not used in this case. */
|
( void * ) x, /* Task parameter - not used in this case. */
|
||||||
tskIDLE_PRIORITY, /* Task priority, must be between 0 and configMAX_PRIORITIES - 1. */
|
tskIDLE_PRIORITY, /* Task priority, must be between 0 and configMAX_PRIORITIES - 1. */
|
||||||
NULL ); /* Used to pass out a handle to the created task - not used in this case. */
|
NULL ); /* Used to pass out a handle to the created task - not used in this case. */
|
||||||
}
|
}
|
||||||
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvMQTTDemoTask( void *pvParameters )
|
static void prvMQTTDemoTask( void *pvParameters )
|
||||||
{
|
{
|
||||||
IotMqttError_t xResult;
|
IotMqttError_t xResult;
|
||||||
uint32_t ulNotificationValue = 0, ulPublishCount;
|
uint32_t ulNotificationValue = 0, ulPublishCount;
|
||||||
const uint32_t ulMaxPublishCount = 5UL;
|
uint32_t ulMaxPublishCount = 0UL;
|
||||||
const TickType_t xNoDelay = ( TickType_t ) 0;
|
const TickType_t xNoDelay = ( TickType_t ) 1;
|
||||||
|
IotMqttConnection_t xMQTTConnection = IOT_MQTT_CONNECTION_INITIALIZER;
|
||||||
|
uint32_t ulTaskNumber = ( uint32_t ) pvParameters, x;
|
||||||
|
char cTopicString[ sizeof( mqttexampleTOPIC ) + 5 ];//_RB_ Access by other tasks so must be persistant and will cause memory faults on memory protected systems.
|
||||||
|
#pragma message ("Access by other tasks so must be persistant and will cause memory faults on memory protected systems.")
|
||||||
|
|
||||||
/* Remove compiler warnings about unused parameters. */
|
/* Remove compiler warnings about unused parameters. */
|
||||||
( void ) pvParameters;
|
( void ) pvParameters;
|
||||||
|
@ -274,10 +281,15 @@ const TickType_t xNoDelay = ( TickType_t ) 0;
|
||||||
xResult = IotMqtt_Init();
|
xResult = IotMqtt_Init();
|
||||||
configASSERT( xResult == IOT_MQTT_SUCCESS );
|
configASSERT( xResult == IOT_MQTT_SUCCESS );
|
||||||
|
|
||||||
|
/* Create a topic string that is unique to the MQTT connection created by
|
||||||
|
this task. */
|
||||||
|
snprintf( cTopicString, sizeof( cTopicString ), "%s/%s", mqttexampleTOPIC, pcClientIdentifiers[ ulTaskNumber ] );
|
||||||
|
|
||||||
for( ; ; )
|
for( ; ; )
|
||||||
{
|
{
|
||||||
/* Don't expect any notifications to be pending yet. */
|
/* Don't expect any notifications to be pending yet. */
|
||||||
configASSERT( ulTaskNotifyTake( pdTRUE, xNoDelay ) == 0 );
|
ulNotificationValue = ulTaskNotifyTake( pdTRUE, xNoDelay );
|
||||||
|
configASSERT( ulNotificationValue == 0 );
|
||||||
|
|
||||||
|
|
||||||
/****************************** Connect. ******************************/
|
/****************************** Connect. ******************************/
|
||||||
|
@ -287,7 +299,7 @@ const TickType_t xNoDelay = ( TickType_t ) 0;
|
||||||
* mqttexampleMQTT_BROKER_PORT at the top of this file. Please change
|
* mqttexampleMQTT_BROKER_PORT at the top of this file. Please change
|
||||||
* it to the MQTT broker you want to connect to. Note that this example
|
* it to the MQTT broker you want to connect to. Note that this example
|
||||||
* does not use TLS and therefore will not work with AWS IoT. */
|
* does not use TLS and therefore will not work with AWS IoT. */
|
||||||
prvMQTTConnect();
|
prvMQTTConnect( &xMQTTConnection, pcClientIdentifiers[ ulTaskNumber ] );
|
||||||
configPRINTF( ( "Connected to %s\r\n", mqttexampleMQTT_BROKER_ENDPOINT ) );
|
configPRINTF( ( "Connected to %s\r\n", mqttexampleMQTT_BROKER_ENDPOINT ) );
|
||||||
|
|
||||||
|
|
||||||
|
@ -298,19 +310,28 @@ const TickType_t xNoDelay = ( TickType_t ) 0;
|
||||||
* client will then publish to the same topic it subscribed to, so will
|
* client will then publish to the same topic it subscribed to, so will
|
||||||
* expect all the messages it sends to the broker to be sent back to it
|
* expect all the messages it sends to the broker to be sent back to it
|
||||||
* from the broker. */
|
* from the broker. */
|
||||||
prvMQTTSubscribe();
|
prvMQTTSubscribe( xMQTTConnection, cTopicString );
|
||||||
configPRINTF( ( "Subscribed to the topic %s\r\n", mqttexampleTOPIC ) );
|
configPRINTF( ( "Subscribed to the topic %s\r\n", cTopicString ) );
|
||||||
|
|
||||||
|
|
||||||
/*********************** Publish 5 messages. **************************/
|
/*********************** Publish 5 messages. **************************/
|
||||||
|
|
||||||
/* Publish a few messages while connected. */
|
/* Publish a few messages while connected. */
|
||||||
|
for( x = 0; x < ( ulTaskNumber + 1UL ); x++ )
|
||||||
|
{
|
||||||
|
ulMaxPublishCount = uxRand();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Cap ulMaxPublishCount but ensure it is not zero. */
|
||||||
|
ulMaxPublishCount %= 10UL;
|
||||||
|
ulMaxPublishCount++;
|
||||||
|
|
||||||
for( ulPublishCount = 0; ulPublishCount < ulMaxPublishCount; ulPublishCount++ )
|
for( ulPublishCount = 0; ulPublishCount < ulMaxPublishCount; ulPublishCount++ )
|
||||||
{
|
{
|
||||||
/* Publish a message on the mqttexampleTOPIC topic as specified at
|
/* Publish a message on the mqttexampleTOPIC topic as specified at
|
||||||
* the top of this file. */
|
* the top of this file. */
|
||||||
prvMQTTPublish();
|
prvMQTTPublish( xMQTTConnection, cTopicString );
|
||||||
configPRINTF( ( "Published %s on the topic %s\r\n", mqttexampleMESSAGE, mqttexampleTOPIC ) );
|
configPRINTF( ( "Published %s on the topic %s\r\n", mqttexampleMESSAGE, cTopicString ) );
|
||||||
|
|
||||||
/* Since we are subscribed to the same topic as we published on, we
|
/* Since we are subscribed to the same topic as we published on, we
|
||||||
* will get the same message back from the MQTT broker. Wait for the
|
* will get the same message back from the MQTT broker. Wait for the
|
||||||
|
@ -331,8 +352,8 @@ const TickType_t xNoDelay = ( TickType_t ) 0;
|
||||||
|
|
||||||
/* Unsubscribe from the topic mqttexampleTOPIC and disconnect
|
/* Unsubscribe from the topic mqttexampleTOPIC and disconnect
|
||||||
* gracefully. */
|
* gracefully. */
|
||||||
prvMQTTUnsubscribe();
|
prvMQTTUnsubscribe( xMQTTConnection, cTopicString );
|
||||||
prvMQTTDisconnect();
|
prvMQTTDisconnect( xMQTTConnection );
|
||||||
configPRINTF( ( "Disconnected from %s\r\n\r\n", mqttexampleMQTT_BROKER_ENDPOINT ) );
|
configPRINTF( ( "Disconnected from %s\r\n\r\n", mqttexampleMQTT_BROKER_ENDPOINT ) );
|
||||||
|
|
||||||
/* Wait for the disconnect operation to complete which is informed to us
|
/* Wait for the disconnect operation to complete which is informed to us
|
||||||
|
@ -349,18 +370,19 @@ const TickType_t xNoDelay = ( TickType_t ) 0;
|
||||||
/* Wait for some time between two iterations to ensure that we do not
|
/* Wait for some time between two iterations to ensure that we do not
|
||||||
* bombard the public test mosquitto broker. */
|
* bombard the public test mosquitto broker. */
|
||||||
configPRINTF( ( "prvMQTTDemoTask() completed an iteration without hitting an assert. Total free heap is %u\r\n\r\n", xPortGetFreeHeapSize() ) );
|
configPRINTF( ( "prvMQTTDemoTask() completed an iteration without hitting an assert. Total free heap is %u\r\n\r\n", xPortGetFreeHeapSize() ) );
|
||||||
vTaskDelay( pdMS_TO_TICKS( 5000 ) );
|
// vTaskDelay( pdMS_TO_TICKS( 5000 ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvMQTTConnect( void )
|
static void prvMQTTConnect( IotMqttConnection_t *xMQTTConnection, const char *pcClientID )
|
||||||
{
|
{
|
||||||
IotMqttError_t xResult;
|
IotMqttError_t xResult;
|
||||||
IotNetworkServerInfo_t xMQTTBrokerInfo;
|
IotNetworkServerInfo_t xMQTTBrokerInfo;
|
||||||
IotMqttNetworkInfo_t xNetworkInfo = IOT_MQTT_NETWORK_INFO_INITIALIZER;
|
IotMqttNetworkInfo_t xNetworkInfo = IOT_MQTT_NETWORK_INFO_INITIALIZER;
|
||||||
IotMqttConnectInfo_t xConnectInfo = IOT_MQTT_CONNECT_INFO_INITIALIZER;
|
IotMqttConnectInfo_t xConnectInfo = IOT_MQTT_CONNECT_INFO_INITIALIZER;
|
||||||
|
static char c[ 10 ];
|
||||||
|
static int id = 0;
|
||||||
|
|
||||||
/******************* Broker information setup. **********************/
|
/******************* Broker information setup. **********************/
|
||||||
|
|
||||||
|
@ -417,8 +439,8 @@ IotMqttConnectInfo_t xConnectInfo = IOT_MQTT_CONNECT_INFO_INITIALIZER;
|
||||||
/* The client identifier is used to uniquely identify this MQTT client to
|
/* The client identifier is used to uniquely identify this MQTT client to
|
||||||
* the MQTT broker. In a production device the identifier can be something
|
* the MQTT broker. In a production device the identifier can be something
|
||||||
* unique, such as a device serial number. */
|
* unique, such as a device serial number. */
|
||||||
xConnectInfo.pClientIdentifier = mqttexampleCLIENT_IDENTIFIER;
|
xConnectInfo.pClientIdentifier = pcClientID;
|
||||||
xConnectInfo.clientIdentifierLength = ( uint16_t ) strlen( mqttexampleCLIENT_IDENTIFIER );
|
xConnectInfo.clientIdentifierLength = ( uint16_t ) strlen( pcClientID );
|
||||||
|
|
||||||
/* This example does not use any authentication and therefore username and
|
/* This example does not use any authentication and therefore username and
|
||||||
* password fields are not used. */
|
* password fields are not used. */
|
||||||
|
@ -432,12 +454,12 @@ IotMqttConnectInfo_t xConnectInfo = IOT_MQTT_CONNECT_INFO_INITIALIZER;
|
||||||
xResult = IotMqtt_Connect( &( xNetworkInfo ),
|
xResult = IotMqtt_Connect( &( xNetworkInfo ),
|
||||||
&( xConnectInfo ),
|
&( xConnectInfo ),
|
||||||
mqttexampleMQTT_TIMEOUT_MS,
|
mqttexampleMQTT_TIMEOUT_MS,
|
||||||
&( xMQTTConnection ) );
|
xMQTTConnection );
|
||||||
configASSERT( xResult == IOT_MQTT_SUCCESS );
|
configASSERT( xResult == IOT_MQTT_SUCCESS );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvMQTTSubscribe( void )
|
static void prvMQTTSubscribe( IotMqttConnection_t xMQTTConnection, const char * const pcTopicString )
|
||||||
{
|
{
|
||||||
IotMqttError_t xResult;
|
IotMqttError_t xResult;
|
||||||
IotMqttSubscription_t xMQTTSubscription;
|
IotMqttSubscription_t xMQTTSubscription;
|
||||||
|
@ -446,8 +468,8 @@ IotMqttSubscription_t xMQTTSubscription;
|
||||||
* as the callback context which is used by the callback to send a task
|
* as the callback context which is used by the callback to send a task
|
||||||
* notification to this task.*/
|
* notification to this task.*/
|
||||||
xMQTTSubscription.qos = IOT_MQTT_QOS_1;
|
xMQTTSubscription.qos = IOT_MQTT_QOS_1;
|
||||||
xMQTTSubscription.pTopicFilter = mqttexampleTOPIC;
|
xMQTTSubscription.pTopicFilter = pcTopicString;
|
||||||
xMQTTSubscription.topicFilterLength = ( uint16_t ) strlen( mqttexampleTOPIC );
|
xMQTTSubscription.topicFilterLength = ( uint16_t ) strlen( pcTopicString );
|
||||||
xMQTTSubscription.callback.pCallbackContext = ( void * ) xTaskGetCurrentTaskHandle();
|
xMQTTSubscription.callback.pCallbackContext = ( void * ) xTaskGetCurrentTaskHandle();
|
||||||
xMQTTSubscription.callback.function = prvExample_OnMessageReceived;
|
xMQTTSubscription.callback.function = prvExample_OnMessageReceived;
|
||||||
|
|
||||||
|
@ -462,7 +484,7 @@ IotMqttSubscription_t xMQTTSubscription;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvMQTTPublish( void )
|
static void prvMQTTPublish( IotMqttConnection_t xMQTTConnection, const char * const pcTopicString )
|
||||||
{
|
{
|
||||||
IotMqttError_t xResult;
|
IotMqttError_t xResult;
|
||||||
IotMqttPublishInfo_t xMQTTPublishInfo;
|
IotMqttPublishInfo_t xMQTTPublishInfo;
|
||||||
|
@ -472,8 +494,8 @@ IotMqttPublishInfo_t xMQTTPublishInfo;
|
||||||
* back to us. It is verified in the publish callback. */
|
* back to us. It is verified in the publish callback. */
|
||||||
xMQTTPublishInfo.qos = IOT_MQTT_QOS_1;
|
xMQTTPublishInfo.qos = IOT_MQTT_QOS_1;
|
||||||
xMQTTPublishInfo.retain = false;
|
xMQTTPublishInfo.retain = false;
|
||||||
xMQTTPublishInfo.pTopicName = mqttexampleTOPIC;
|
xMQTTPublishInfo.pTopicName = pcTopicString;
|
||||||
xMQTTPublishInfo.topicNameLength = ( uint16_t ) strlen( mqttexampleTOPIC );
|
xMQTTPublishInfo.topicNameLength = ( uint16_t ) strlen( pcTopicString );
|
||||||
xMQTTPublishInfo.pPayload = mqttexampleMESSAGE;
|
xMQTTPublishInfo.pPayload = mqttexampleMESSAGE;
|
||||||
xMQTTPublishInfo.payloadLength = strlen( mqttexampleMESSAGE );
|
xMQTTPublishInfo.payloadLength = strlen( mqttexampleMESSAGE );
|
||||||
xMQTTPublishInfo.retryMs = mqttexamplePUBLISH_RETRY_MS;
|
xMQTTPublishInfo.retryMs = mqttexamplePUBLISH_RETRY_MS;
|
||||||
|
@ -489,14 +511,14 @@ IotMqttPublishInfo_t xMQTTPublishInfo;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvMQTTUnsubscribe( void )
|
static void prvMQTTUnsubscribe( IotMqttConnection_t xMQTTConnection, const char * const pcTopicString )
|
||||||
{
|
{
|
||||||
IotMqttError_t xResult;
|
IotMqttError_t xResult;
|
||||||
IotMqttSubscription_t xMQTTSubscription;
|
IotMqttSubscription_t xMQTTSubscription;
|
||||||
|
|
||||||
/* Unsubscribe from the mqttexampleTOPIC topic filter. */
|
/* Unsubscribe from the mqttexampleTOPIC topic filter. */
|
||||||
xMQTTSubscription.pTopicFilter = mqttexampleTOPIC;
|
xMQTTSubscription.pTopicFilter = pcTopicString;
|
||||||
xMQTTSubscription.topicFilterLength = ( uint16_t ) strlen( mqttexampleTOPIC );
|
xMQTTSubscription.topicFilterLength = ( uint16_t ) strlen( pcTopicString );
|
||||||
/* The following members of the IotMqttSubscription_t are ignored by the
|
/* The following members of the IotMqttSubscription_t are ignored by the
|
||||||
* unsubscribe operation. Just initialize them to avoid "use of uninitialized
|
* unsubscribe operation. Just initialize them to avoid "use of uninitialized
|
||||||
* variable" warnings. */
|
* variable" warnings. */
|
||||||
|
@ -515,7 +537,7 @@ IotMqttSubscription_t xMQTTSubscription;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvMQTTDisconnect( void )
|
static void prvMQTTDisconnect( IotMqttConnection_t xMQTTConnection )
|
||||||
{
|
{
|
||||||
/* Send a MQTT DISCONNECT packet to the MQTT broker to do a graceful
|
/* Send a MQTT DISCONNECT packet to the MQTT broker to do a graceful
|
||||||
* disconnect. */
|
* disconnect. */
|
||||||
|
|
|
@ -136,14 +136,14 @@ example, on my development laptop setting configNETWORK_INTERFACE_TO_USE to 4
|
||||||
results in the wired network being used, while setting
|
results in the wired network being used, while setting
|
||||||
configNETWORK_INTERFACE_TO_USE to 2 results in the wireless network being
|
configNETWORK_INTERFACE_TO_USE to 2 results in the wireless network being
|
||||||
used. */
|
used. */
|
||||||
#define configNETWORK_INTERFACE_TO_USE 3L
|
#define configNETWORK_INTERFACE_TO_USE 2L
|
||||||
|
|
||||||
/* The address of an echo server is only left in this project as it doubles as
|
/* The address of an echo server is only left in this project as it doubles as
|
||||||
the address to which logging is sent should UDP logging be enabled. */
|
the address to which logging is sent should UDP logging be enabled. */
|
||||||
#define configECHO_SERVER_ADDR0 192
|
#define configECHO_SERVER_ADDR0 192
|
||||||
#define configECHO_SERVER_ADDR1 168
|
#define configECHO_SERVER_ADDR1 168
|
||||||
#define configECHO_SERVER_ADDR2 0
|
#define configECHO_SERVER_ADDR2 26
|
||||||
#define configECHO_SERVER_ADDR3 11
|
#define configECHO_SERVER_ADDR3 100
|
||||||
|
|
||||||
/* Default MAC address configuration. The demo creates a virtual network
|
/* Default MAC address configuration. The demo creates a virtual network
|
||||||
connection that uses this MAC address by accessing the raw Ethernet/WiFi data
|
connection that uses this MAC address by accessing the raw Ethernet/WiFi data
|
||||||
|
@ -159,31 +159,31 @@ configure the real network connection to use. */
|
||||||
|
|
||||||
/* Default IP address configuration. Used in ipconfigUSE_DNS is set to 0, or
|
/* Default IP address configuration. Used in ipconfigUSE_DNS is set to 0, or
|
||||||
ipconfigUSE_DNS is set to 1 but a DNS server cannot be contacted. */
|
ipconfigUSE_DNS is set to 1 but a DNS server cannot be contacted. */
|
||||||
#define configIP_ADDR0 10
|
#define configIP_ADDR0 192
|
||||||
#define configIP_ADDR1 10
|
#define configIP_ADDR1 168
|
||||||
#define configIP_ADDR2 10
|
#define configIP_ADDR2 1
|
||||||
#define configIP_ADDR3 200
|
#define configIP_ADDR3 51
|
||||||
|
|
||||||
/* Default gateway IP address configuration. Used in ipconfigUSE_DNS is set to
|
/* Default gateway IP address configuration. Used in ipconfigUSE_DNS is set to
|
||||||
0, or ipconfigUSE_DNS is set to 1 but a DNS server cannot be contacted. */
|
0, or ipconfigUSE_DNS is set to 1 but a DNS server cannot be contacted. */
|
||||||
#define configGATEWAY_ADDR0 10
|
#define configGATEWAY_ADDR0 192
|
||||||
#define configGATEWAY_ADDR1 10
|
#define configGATEWAY_ADDR1 168
|
||||||
#define configGATEWAY_ADDR2 10
|
#define configGATEWAY_ADDR2 1
|
||||||
#define configGATEWAY_ADDR3 1
|
#define configGATEWAY_ADDR3 1
|
||||||
|
|
||||||
/* Default DNS server configuration. OpenDNS addresses are 208.67.222.222 and
|
/* Default DNS server configuration. OpenDNS addresses are 208.67.222.222 and
|
||||||
208.67.220.220. Used in ipconfigUSE_DNS is set to 0, or ipconfigUSE_DNS is set
|
208.67.220.220. Used in ipconfigUSE_DNS is set to 0, or ipconfigUSE_DNS is set
|
||||||
to 1 but a DNS server cannot be contacted.*/
|
to 1 but a DNS server cannot be contacted.*/
|
||||||
#define configDNS_SERVER_ADDR0 208
|
#define configDNS_SERVER_ADDR0 8
|
||||||
#define configDNS_SERVER_ADDR1 67
|
#define configDNS_SERVER_ADDR1 8
|
||||||
#define configDNS_SERVER_ADDR2 222
|
#define configDNS_SERVER_ADDR2 8
|
||||||
#define configDNS_SERVER_ADDR3 222
|
#define configDNS_SERVER_ADDR3 8
|
||||||
|
|
||||||
/* Default netmask configuration. Used in ipconfigUSE_DNS is set to 0, or
|
/* Default netmask configuration. Used in ipconfigUSE_DNS is set to 0, or
|
||||||
ipconfigUSE_DNS is set to 1 but a DNS server cannot be contacted. */
|
ipconfigUSE_DNS is set to 1 but a DNS server cannot be contacted. */
|
||||||
#define configNET_MASK0 255
|
#define configNET_MASK0 255
|
||||||
#define configNET_MASK1 0
|
#define configNET_MASK1 255
|
||||||
#define configNET_MASK2 0
|
#define configNET_MASK2 255
|
||||||
#define configNET_MASK3 0
|
#define configNET_MASK3 0
|
||||||
|
|
||||||
/* The UDP port to which print messages are sent. */
|
/* The UDP port to which print messages are sent. */
|
||||||
|
|
|
@ -146,7 +146,7 @@ stack will revert to using the static IP address even when ipconfigUSE_DHCP is
|
||||||
set to 1 if a valid configuration cannot be obtained from a DHCP server for any
|
set to 1 if a valid configuration cannot be obtained from a DHCP server for any
|
||||||
reason. The static configuration used is that passed into the stack by the
|
reason. The static configuration used is that passed into the stack by the
|
||||||
FreeRTOS_IPInit() function call. */
|
FreeRTOS_IPInit() function call. */
|
||||||
#define ipconfigUSE_DHCP 1
|
#define ipconfigUSE_DHCP 0
|
||||||
|
|
||||||
/* When ipconfigUSE_DHCP is set to 1, DHCP requests will be sent out at
|
/* When ipconfigUSE_DHCP is set to 1, DHCP requests will be sent out at
|
||||||
increasing time intervals until either a reply is received from a DHCP server
|
increasing time intervals until either a reply is received from a DHCP server
|
||||||
|
|
|
@ -353,3 +353,12 @@ void vApplicationGetTimerTaskMemory( StaticTask_t** ppxTimerTaskTCBBuffer, Stack
|
||||||
*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;
|
*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -19,13 +19,11 @@
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
<UseOfMfc>false</UseOfMfc>
|
<UseOfMfc>false</UseOfMfc>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
<PlatformToolset>v140</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
<UseOfMfc>false</UseOfMfc>
|
<UseOfMfc>false</UseOfMfc>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
<PlatformToolset>v140</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
<ImportGroup Label="ExtensionSettings">
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
|
|
@ -371,3 +371,14 @@ extern uint32_t ulApplicationGetNextSequenceNumber( uint32_t ulSourceAddress,
|
||||||
return uxRand();
|
return uxRand();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Supply a random number to FreeRTOS+TCP stack.
|
||||||
|
* THIS IS ONLY A DUMMY IMPLEMENTATION THAT RETURNS A PSEUDO RANDOM NUMBER
|
||||||
|
* SO IS NOT INTENDED FOR USE IN PRODUCTION SYSTEMS.
|
||||||
|
*/
|
||||||
|
BaseType_t xApplicationGetRandomNumber(uint32_t* pulNumber)
|
||||||
|
{
|
||||||
|
*(pulNumber) = uxRand();
|
||||||
|
return pdTRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -86,6 +86,7 @@
|
||||||
#include "xscutimer.h"
|
#include "xscutimer.h"
|
||||||
#include "xscugic.h"
|
#include "xscugic.h"
|
||||||
#include "xil_exception.h"
|
#include "xil_exception.h"
|
||||||
|
#include "xuartps_hw.h"
|
||||||
|
|
||||||
/* mainSELECTED_APPLICATION is used to select between three demo applications,
|
/* mainSELECTED_APPLICATION is used to select between three demo applications,
|
||||||
* as described at the top of this file.
|
* as described at the top of this file.
|
||||||
|
@ -208,6 +209,12 @@ XScuGic_Config *pxGICConfig;
|
||||||
FreeRTOS_asm_vectors.S, which is part of this project. Switch to use the
|
FreeRTOS_asm_vectors.S, which is part of this project. Switch to use the
|
||||||
FreeRTOS vector table. */
|
FreeRTOS vector table. */
|
||||||
vPortInstallFreeRTOSVectorTable();
|
vPortInstallFreeRTOSVectorTable();
|
||||||
|
|
||||||
|
/* Initialise UART for use with QEMU. */
|
||||||
|
XUartPs_ResetHw( 0xE0000000 );
|
||||||
|
XUartPs_WriteReg(0xE0000000, XUARTPS_CR_OFFSET,
|
||||||
|
((u32)XUARTPS_CR_RX_DIS | (u32)XUARTPS_CR_TX_EN |
|
||||||
|
(u32)XUARTPS_CR_STOPBRK));
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,7 @@
|
||||||
<LExpSel>0</LExpSel>
|
<LExpSel>0</LExpSel>
|
||||||
</OPTXL>
|
</OPTXL>
|
||||||
<OPTFL>
|
<OPTFL>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>1</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<IsCurrentTarget>1</IsCurrentTarget>
|
<IsCurrentTarget>1</IsCurrentTarget>
|
||||||
</OPTFL>
|
</OPTFL>
|
||||||
|
@ -103,7 +103,7 @@
|
||||||
<bEvRecOn>1</bEvRecOn>
|
<bEvRecOn>1</bEvRecOn>
|
||||||
<bSchkAxf>0</bSchkAxf>
|
<bSchkAxf>0</bSchkAxf>
|
||||||
<bTchkAxf>0</bTchkAxf>
|
<bTchkAxf>0</bTchkAxf>
|
||||||
<nTsel>15</nTsel>
|
<nTsel>16</nTsel>
|
||||||
<sDll></sDll>
|
<sDll></sDll>
|
||||||
<sDllPa></sDllPa>
|
<sDllPa></sDllPa>
|
||||||
<sDlgDll></sDlgDll>
|
<sDlgDll></sDlgDll>
|
||||||
|
@ -120,7 +120,7 @@
|
||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Key>DLGTARM</Key>
|
<Key>DLGTARM</Key>
|
||||||
<Name>(6010=70,43,547,639,0)(6018=1091,145,1280,478,0)(6019=1091,137,1280,457,0)(6008=-1,-1,-1,-1,0)(6009=-1,-1,-1,-1,0)(6014=1022,0,1280,731,0)(6015=777,40,1035,662,1)(6003=207,84,780,620,1)(6000=-1,-1,-1,-1,0)</Name>
|
<Name>(6010=70,43,547,639,0)(6018=1091,145,1280,478,0)(6019=1091,137,1280,457,0)(6008=-1,-1,-1,-1,0)(6009=-1,-1,-1,-1,0)(6014=1022,0,1280,731,0)(6015=2837,586,3095,1208,1)(6003=2678,41,3260,577,1)(6000=-1,-1,-1,-1,0)</Name>
|
||||||
</SetRegEntry>
|
</SetRegEntry>
|
||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
|
@ -143,7 +143,40 @@
|
||||||
<Name>UL2V8M(-S0 -C0 -P0 -FD20000000 -FC1000)</Name>
|
<Name>UL2V8M(-S0 -C0 -P0 -FD20000000 -FC1000)</Name>
|
||||||
</SetRegEntry>
|
</SetRegEntry>
|
||||||
</TargetDriverDllRegistry>
|
</TargetDriverDllRegistry>
|
||||||
<Breakpoint/>
|
<Breakpoint>
|
||||||
|
<Bp>
|
||||||
|
<Number>0</Number>
|
||||||
|
<Type>0</Type>
|
||||||
|
<LineNumber>105</LineNumber>
|
||||||
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
<Address>2116472</Address>
|
||||||
|
<ByteObject>0</ByteObject>
|
||||||
|
<HtxType>0</HtxType>
|
||||||
|
<ManyObjects>0</ManyObjects>
|
||||||
|
<SizeOfObject>0</SizeOfObject>
|
||||||
|
<BreakByAccess>0</BreakByAccess>
|
||||||
|
<BreakIfRCount>1</BreakIfRCount>
|
||||||
|
<Filename><2>.\main_ns.c</Filename>
|
||||||
|
<ExecCommand></ExecCommand>
|
||||||
|
<Expression>\\FreeRTOSDemo_ns\main_ns.c\105</Expression>
|
||||||
|
</Bp>
|
||||||
|
<Bp>
|
||||||
|
<Number>1</Number>
|
||||||
|
<Type>0</Type>
|
||||||
|
<LineNumber>67</LineNumber>
|
||||||
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
<Address>2044</Address>
|
||||||
|
<ByteObject>0</ByteObject>
|
||||||
|
<HtxType>0</HtxType>
|
||||||
|
<ManyObjects>0</ManyObjects>
|
||||||
|
<SizeOfObject>0</SizeOfObject>
|
||||||
|
<BreakByAccess>0</BreakByAccess>
|
||||||
|
<BreakIfRCount>1</BreakIfRCount>
|
||||||
|
<Filename><1>.\main_s.c</Filename>
|
||||||
|
<ExecCommand></ExecCommand>
|
||||||
|
<Expression>\\FreeRTOSDemo_s\main_s.c\67</Expression>
|
||||||
|
</Bp>
|
||||||
|
</Breakpoint>
|
||||||
<Tracepoint>
|
<Tracepoint>
|
||||||
<THDelay>0</THDelay>
|
<THDelay>0</THDelay>
|
||||||
</Tracepoint>
|
</Tracepoint>
|
||||||
|
@ -439,7 +472,7 @@
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>User</GroupName>
|
<GroupName>User</GroupName>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>1</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
|
|
|
@ -10,13 +10,13 @@
|
||||||
<TargetName>FVP Simulation Model</TargetName>
|
<TargetName>FVP Simulation Model</TargetName>
|
||||||
<ToolsetNumber>0x4</ToolsetNumber>
|
<ToolsetNumber>0x4</ToolsetNumber>
|
||||||
<ToolsetName>ARM-ADS</ToolsetName>
|
<ToolsetName>ARM-ADS</ToolsetName>
|
||||||
<pCCUsed>6070000::V6.7::.\ARMCLANG</pCCUsed>
|
<pCCUsed>6130001::V6.13.1::.\ARMCLANG</pCCUsed>
|
||||||
<uAC6>1</uAC6>
|
<uAC6>1</uAC6>
|
||||||
<TargetOption>
|
<TargetOption>
|
||||||
<TargetCommonOption>
|
<TargetCommonOption>
|
||||||
<Device>ARMCM33_DSP_FP_TZ</Device>
|
<Device>ARMCM33_DSP_FP_TZ</Device>
|
||||||
<Vendor>ARM</Vendor>
|
<Vendor>ARM</Vendor>
|
||||||
<PackID>ARM.CMSIS.5.5.1</PackID>
|
<PackID>ARM.CMSIS.5.6.0</PackID>
|
||||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||||
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x20200000,0x00020000) IROM(0x00000000,0x00200000) IROM2(0x00200000,0x00200000) CPUTYPE("Cortex-M33") FPU3(SFPU) DSP TZ CLOCK(12000000) ESEL ELITTLE</Cpu>
|
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x20200000,0x00020000) IROM(0x00000000,0x00200000) IROM2(0x00200000,0x00200000) CPUTYPE("Cortex-M33") FPU3(SFPU) DSP TZ CLOCK(12000000) ESEL ELITTLE</Cpu>
|
||||||
<FlashUtilSpec></FlashUtilSpec>
|
<FlashUtilSpec></FlashUtilSpec>
|
||||||
|
@ -133,7 +133,7 @@
|
||||||
<UseExternalTool>0</UseExternalTool>
|
<UseExternalTool>0</UseExternalTool>
|
||||||
<RunIndependent>0</RunIndependent>
|
<RunIndependent>0</RunIndependent>
|
||||||
<UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
|
<UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
|
||||||
<Capability>1</Capability>
|
<Capability>0</Capability>
|
||||||
<DriverSelection>4099</DriverSelection>
|
<DriverSelection>4099</DriverSelection>
|
||||||
</Flash1>
|
</Flash1>
|
||||||
<bUseTDR>1</bUseTDR>
|
<bUseTDR>1</bUseTDR>
|
||||||
|
@ -540,24 +540,24 @@
|
||||||
</file>
|
</file>
|
||||||
<file attr="config" category="header" condition="ARMv8-M TZ Device" name="Device\ARM\ARMCM33\Include\Template\partition_ARMCM33.h" version="1.1.0">
|
<file attr="config" category="header" condition="ARMv8-M TZ Device" name="Device\ARM\ARMCM33\Include\Template\partition_ARMCM33.h" version="1.1.0">
|
||||||
<instance index="0">RTE\Device\ARMCM33_DSP_FP_TZ\partition_ARMCM33.h</instance>
|
<instance index="0">RTE\Device\ARMCM33_DSP_FP_TZ\partition_ARMCM33.h</instance>
|
||||||
<component Cclass="Device" Cgroup="Startup" Cvendor="ARM" Cversion="1.1.0" condition="ARMCM33 CMSIS"/>
|
<component Cclass="Device" Cgroup="Startup" Cvendor="ARM" Cversion="1.2.0" condition="ARMCM33 CMSIS"/>
|
||||||
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.5.1"/>
|
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.6.0"/>
|
||||||
<targetInfos>
|
<targetInfos>
|
||||||
<targetInfo name="FVP Simulation Model"/>
|
<targetInfo name="FVP Simulation Model"/>
|
||||||
</targetInfos>
|
</targetInfos>
|
||||||
</file>
|
</file>
|
||||||
<file attr="config" category="sourceAsm" condition="ARMCC" name="Device\ARM\ARMCM33\Source\ARM\startup_ARMCM33.s" version="1.0.0">
|
<file attr="config" category="sourceAsm" condition="ARMCC" name="Device\ARM\ARMCM33\Source\ARM\startup_ARMCM33.s" version="1.0.0">
|
||||||
<instance index="0">RTE\Device\ARMCM33_DSP_FP_TZ\startup_ARMCM33.s</instance>
|
<instance index="0">RTE\Device\ARMCM33_DSP_FP_TZ\startup_ARMCM33.s</instance>
|
||||||
<component Cclass="Device" Cgroup="Startup" Cvendor="ARM" Cversion="1.1.0" condition="ARMCM33 CMSIS"/>
|
<component Cclass="Device" Cgroup="Startup" Cvendor="ARM" Cversion="1.2.0" condition="ARMCM33 CMSIS"/>
|
||||||
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.5.1"/>
|
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.6.0"/>
|
||||||
<targetInfos>
|
<targetInfos>
|
||||||
<targetInfo name="FVP Simulation Model"/>
|
<targetInfo name="FVP Simulation Model"/>
|
||||||
</targetInfos>
|
</targetInfos>
|
||||||
</file>
|
</file>
|
||||||
<file attr="config" category="sourceC" name="Device\ARM\ARMCM33\Source\system_ARMCM33.c" version="1.0.0">
|
<file attr="config" category="sourceC" name="Device\ARM\ARMCM33\Source\system_ARMCM33.c" version="1.0.0">
|
||||||
<instance index="0">RTE\Device\ARMCM33_DSP_FP_TZ\system_ARMCM33.c</instance>
|
<instance index="0">RTE\Device\ARMCM33_DSP_FP_TZ\system_ARMCM33.c</instance>
|
||||||
<component Cclass="Device" Cgroup="Startup" Cvendor="ARM" Cversion="1.1.0" condition="ARMCM33 CMSIS"/>
|
<component Cclass="Device" Cgroup="Startup" Cvendor="ARM" Cversion="1.2.0" condition="ARMCM33 CMSIS"/>
|
||||||
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.5.1"/>
|
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.6.0"/>
|
||||||
<targetInfos>
|
<targetInfos>
|
||||||
<targetInfo name="FVP Simulation Model"/>
|
<targetInfo name="FVP Simulation Model"/>
|
||||||
</targetInfos>
|
</targetInfos>
|
||||||
|
|
|
@ -103,7 +103,7 @@
|
||||||
<bEvRecOn>1</bEvRecOn>
|
<bEvRecOn>1</bEvRecOn>
|
||||||
<bSchkAxf>0</bSchkAxf>
|
<bSchkAxf>0</bSchkAxf>
|
||||||
<bTchkAxf>0</bTchkAxf>
|
<bTchkAxf>0</bTchkAxf>
|
||||||
<nTsel>15</nTsel>
|
<nTsel>16</nTsel>
|
||||||
<sDll></sDll>
|
<sDll></sDll>
|
||||||
<sDllPa></sDllPa>
|
<sDllPa></sDllPa>
|
||||||
<sDlgDll></sDlgDll>
|
<sDlgDll></sDlgDll>
|
||||||
|
|
|
@ -10,13 +10,13 @@
|
||||||
<TargetName>FVP Simulation Model</TargetName>
|
<TargetName>FVP Simulation Model</TargetName>
|
||||||
<ToolsetNumber>0x4</ToolsetNumber>
|
<ToolsetNumber>0x4</ToolsetNumber>
|
||||||
<ToolsetName>ARM-ADS</ToolsetName>
|
<ToolsetName>ARM-ADS</ToolsetName>
|
||||||
<pCCUsed>6070000::V6.7::.\ARMCLANG</pCCUsed>
|
<pCCUsed>6130001::V6.13.1::.\ARMCLANG</pCCUsed>
|
||||||
<uAC6>1</uAC6>
|
<uAC6>1</uAC6>
|
||||||
<TargetOption>
|
<TargetOption>
|
||||||
<TargetCommonOption>
|
<TargetCommonOption>
|
||||||
<Device>ARMCM33_DSP_FP_TZ</Device>
|
<Device>ARMCM33_DSP_FP_TZ</Device>
|
||||||
<Vendor>ARM</Vendor>
|
<Vendor>ARM</Vendor>
|
||||||
<PackID>ARM.CMSIS.5.5.1</PackID>
|
<PackID>ARM.CMSIS.5.6.0</PackID>
|
||||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||||
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x20200000,0x00020000) IROM(0x00000000,0x00200000) IROM2(0x00200000,0x00200000) CPUTYPE("Cortex-M33") FPU3(SFPU) DSP TZ CLOCK(12000000) ESEL ELITTLE</Cpu>
|
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x20200000,0x00020000) IROM(0x00000000,0x00200000) IROM2(0x00200000,0x00200000) CPUTYPE("Cortex-M33") FPU3(SFPU) DSP TZ CLOCK(12000000) ESEL ELITTLE</Cpu>
|
||||||
<FlashUtilSpec></FlashUtilSpec>
|
<FlashUtilSpec></FlashUtilSpec>
|
||||||
|
@ -488,24 +488,24 @@
|
||||||
<files>
|
<files>
|
||||||
<file attr="config" category="header" condition="ARMv8-M TZ Device" name="Device\ARM\ARMCM33\Include\Template\partition_ARMCM33.h" version="1.1.0">
|
<file attr="config" category="header" condition="ARMv8-M TZ Device" name="Device\ARM\ARMCM33\Include\Template\partition_ARMCM33.h" version="1.1.0">
|
||||||
<instance index="0">RTE\Device\ARMCM33_DSP_FP_TZ\partition_ARMCM33.h</instance>
|
<instance index="0">RTE\Device\ARMCM33_DSP_FP_TZ\partition_ARMCM33.h</instance>
|
||||||
<component Cclass="Device" Cgroup="Startup" Cvendor="ARM" Cversion="1.1.0" condition="ARMCM33 CMSIS"/>
|
<component Cclass="Device" Cgroup="Startup" Cvendor="ARM" Cversion="1.2.0" condition="ARMCM33 CMSIS"/>
|
||||||
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.5.1"/>
|
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.6.0"/>
|
||||||
<targetInfos>
|
<targetInfos>
|
||||||
<targetInfo name="FVP Simulation Model"/>
|
<targetInfo name="FVP Simulation Model"/>
|
||||||
</targetInfos>
|
</targetInfos>
|
||||||
</file>
|
</file>
|
||||||
<file attr="config" category="sourceAsm" condition="ARMCC" name="Device\ARM\ARMCM33\Source\ARM\startup_ARMCM33.s" version="1.0.0">
|
<file attr="config" category="sourceAsm" condition="ARMCC" name="Device\ARM\ARMCM33\Source\ARM\startup_ARMCM33.s" version="1.0.0">
|
||||||
<instance index="0">RTE\Device\ARMCM33_DSP_FP_TZ\startup_ARMCM33.s</instance>
|
<instance index="0">RTE\Device\ARMCM33_DSP_FP_TZ\startup_ARMCM33.s</instance>
|
||||||
<component Cclass="Device" Cgroup="Startup" Cvendor="ARM" Cversion="1.1.0" condition="ARMCM33 CMSIS"/>
|
<component Cclass="Device" Cgroup="Startup" Cvendor="ARM" Cversion="1.2.0" condition="ARMCM33 CMSIS"/>
|
||||||
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.5.1"/>
|
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.6.0"/>
|
||||||
<targetInfos>
|
<targetInfos>
|
||||||
<targetInfo name="FVP Simulation Model"/>
|
<targetInfo name="FVP Simulation Model"/>
|
||||||
</targetInfos>
|
</targetInfos>
|
||||||
</file>
|
</file>
|
||||||
<file attr="config" category="sourceC" name="Device\ARM\ARMCM33\Source\system_ARMCM33.c" version="1.0.0">
|
<file attr="config" category="sourceC" name="Device\ARM\ARMCM33\Source\system_ARMCM33.c" version="1.0.0">
|
||||||
<instance index="0">RTE\Device\ARMCM33_DSP_FP_TZ\system_ARMCM33.c</instance>
|
<instance index="0">RTE\Device\ARMCM33_DSP_FP_TZ\system_ARMCM33.c</instance>
|
||||||
<component Cclass="Device" Cgroup="Startup" Cvendor="ARM" Cversion="1.1.0" condition="ARMCM33 CMSIS"/>
|
<component Cclass="Device" Cgroup="Startup" Cvendor="ARM" Cversion="1.2.0" condition="ARMCM33 CMSIS"/>
|
||||||
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.5.1"/>
|
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.6.0"/>
|
||||||
<targetInfos>
|
<targetInfos>
|
||||||
<targetInfo name="FVP Simulation Model"/>
|
<targetInfo name="FVP Simulation Model"/>
|
||||||
</targetInfos>
|
</targetInfos>
|
||||||
|
|
|
@ -101,6 +101,8 @@
|
||||||
<sRunDeb>0</sRunDeb>
|
<sRunDeb>0</sRunDeb>
|
||||||
<sLrtime>0</sLrtime>
|
<sLrtime>0</sLrtime>
|
||||||
<bEvRecOn>1</bEvRecOn>
|
<bEvRecOn>1</bEvRecOn>
|
||||||
|
<bSchkAxf>0</bSchkAxf>
|
||||||
|
<bTchkAxf>0</bTchkAxf>
|
||||||
<nTsel>0</nTsel>
|
<nTsel>0</nTsel>
|
||||||
<sDll></sDll>
|
<sDll></sDll>
|
||||||
<sDllPa></sDllPa>
|
<sDllPa></sDllPa>
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
<TargetCommonOption>
|
<TargetCommonOption>
|
||||||
<Device>ARMCM4_FP</Device>
|
<Device>ARMCM4_FP</Device>
|
||||||
<Vendor>ARM</Vendor>
|
<Vendor>ARM</Vendor>
|
||||||
<PackID>ARM.CMSIS.5.5.1</PackID>
|
<PackID>ARM.CMSIS.5.6.0</PackID>
|
||||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||||
<Cpu>IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ESEL ELITTLE</Cpu>
|
<Cpu>IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ESEL ELITTLE</Cpu>
|
||||||
<FlashUtilSpec></FlashUtilSpec>
|
<FlashUtilSpec></FlashUtilSpec>
|
||||||
|
@ -184,6 +184,7 @@
|
||||||
<hadXRAM>0</hadXRAM>
|
<hadXRAM>0</hadXRAM>
|
||||||
<uocXRam>0</uocXRam>
|
<uocXRam>0</uocXRam>
|
||||||
<RvdsVP>2</RvdsVP>
|
<RvdsVP>2</RvdsVP>
|
||||||
|
<RvdsMve>0</RvdsMve>
|
||||||
<hadIRAM2>0</hadIRAM2>
|
<hadIRAM2>0</hadIRAM2>
|
||||||
<hadIROM2>0</hadIROM2>
|
<hadIROM2>0</hadIROM2>
|
||||||
<StupSel>8</StupSel>
|
<StupSel>8</StupSel>
|
||||||
|
@ -324,6 +325,7 @@
|
||||||
<uThumb>0</uThumb>
|
<uThumb>0</uThumb>
|
||||||
<uSurpInc>0</uSurpInc>
|
<uSurpInc>0</uSurpInc>
|
||||||
<uC99>0</uC99>
|
<uC99>0</uC99>
|
||||||
|
<uGnu>0</uGnu>
|
||||||
<useXO>0</useXO>
|
<useXO>0</useXO>
|
||||||
<v6Lang>0</v6Lang>
|
<v6Lang>0</v6Lang>
|
||||||
<v6LangP>0</v6LangP>
|
<v6LangP>0</v6LangP>
|
||||||
|
|
|
@ -778,7 +778,7 @@ static void prvTaskToDelete( void *pvParameters )
|
||||||
configASSERT( uxTaskGetStackHighWaterMark2( NULL ) > 0 );
|
configASSERT( uxTaskGetStackHighWaterMark2( NULL ) > 0 );
|
||||||
/* Run time stats are not being gathered - this is just to exercise
|
/* Run time stats are not being gathered - this is just to exercise
|
||||||
API. */
|
API. */
|
||||||
configASSERT( xTaskGetIdleRunTimeCounter() == 0 );
|
configASSERT( ulTaskGetIdleRunTimeCounter() == 0 );
|
||||||
vTaskSuspend( NULL );
|
vTaskSuspend( NULL );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
@ -149,10 +149,6 @@ uint32_t ulTestToPerform = abtNOTIFY_WAIT_ABORTS;
|
||||||
TickType_t xTimeAtStart;
|
TickType_t xTimeAtStart;
|
||||||
const TickType_t xStartMargin = 2UL;
|
const TickType_t xStartMargin = 2UL;
|
||||||
|
|
||||||
/* Used to control whether to use xTaskAbortDelay() or xTaskAbortDelayFromISR() so
|
|
||||||
both are used with all the tests. */
|
|
||||||
BaseType_t xUseFromISRVersion = pdFALSE, xHigherPriorityTaskWoken;
|
|
||||||
|
|
||||||
/* Just to remove compiler warnings. */
|
/* Just to remove compiler warnings. */
|
||||||
( void ) pvParameters;
|
( void ) pvParameters;
|
||||||
|
|
||||||
|
@ -177,46 +173,10 @@ BaseType_t xUseFromISRVersion = pdFALSE, xHigherPriorityTaskWoken;
|
||||||
raise the priority of the controlling task to that of the blocking
|
raise the priority of the controlling task to that of the blocking
|
||||||
task to minimise discrepancies. */
|
task to minimise discrepancies. */
|
||||||
vTaskPrioritySet( NULL, abtBLOCKING_PRIORITY );
|
vTaskPrioritySet( NULL, abtBLOCKING_PRIORITY );
|
||||||
|
|
||||||
vTaskDelay( xMaxBlockTime + xHalfMaxBlockTime + xStartMargin );
|
vTaskDelay( xMaxBlockTime + xHalfMaxBlockTime + xStartMargin );
|
||||||
|
if( xTaskAbortDelay( xBlockingTask ) != pdPASS )
|
||||||
/* For test coverage sometimes xTaskAbortDelay() is used and sometimes
|
|
||||||
xTaskAbortDelayFromISR() is used. */
|
|
||||||
if( xUseFromISRVersion == pdFALSE )
|
|
||||||
{
|
{
|
||||||
if( xTaskAbortDelay( xBlockingTask ) != pdPASS )
|
xErrorOccurred = pdTRUE;
|
||||||
{
|
|
||||||
xErrorOccurred = pdTRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
xHigherPriorityTaskWoken = pdFALSE;
|
|
||||||
|
|
||||||
/* For test coverage, sometimes xHigherPriorityTaskWoken is used, and
|
|
||||||
sometimes NULL is used. */
|
|
||||||
|
|
||||||
if( ( xControllingCycles % 2 ) == 0 )
|
|
||||||
{
|
|
||||||
if( xTaskAbortDelayFromISR( xBlockingTask, &xHigherPriorityTaskWoken ) != pdPASS )
|
|
||||||
{
|
|
||||||
xErrorOccurred = pdTRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if( xTaskAbortDelayFromISR( xBlockingTask, NULL ) != pdPASS )
|
|
||||||
{
|
|
||||||
xErrorOccurred = pdTRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The tasks have the same priority so xHigherPriorityTaskWoken should
|
|
||||||
never get set. */
|
|
||||||
if( xHigherPriorityTaskWoken != pdFALSE )
|
|
||||||
{
|
|
||||||
xErrorOccurred = pdTRUE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Reset the priority to the normal controlling priority. */
|
/* Reset the priority to the normal controlling priority. */
|
||||||
|
@ -241,13 +201,6 @@ BaseType_t xUseFromISRVersion = pdFALSE, xHigherPriorityTaskWoken;
|
||||||
|
|
||||||
/* To indicate this task is still executing. */
|
/* To indicate this task is still executing. */
|
||||||
xControllingCycles++;
|
xControllingCycles++;
|
||||||
|
|
||||||
if( ( xControllingCycles % abtMAX_TESTS ) == 0 )
|
|
||||||
{
|
|
||||||
/* Looped through all the tests. Switch between using xTaskAbortDelay()
|
|
||||||
and xTaskAbortDelayFromISR() for the next round of tests. */
|
|
||||||
xUseFromISRVersion = !xUseFromISRVersion;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
@ -335,12 +288,6 @@ BaseType_t xReturned;
|
||||||
{
|
{
|
||||||
xErrorOccurred = pdTRUE;
|
xErrorOccurred = pdTRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
xReturned = xTaskAbortDelayFromISR( xThisTask, NULL );
|
|
||||||
if( xReturned != pdFALSE )
|
|
||||||
{
|
|
||||||
xErrorOccurred = pdTRUE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -218,7 +218,7 @@ QueueHandle_t xQueue;
|
||||||
for( ;; )
|
for( ;; )
|
||||||
{
|
{
|
||||||
/* The queue is empty, so sending an item to the back of the queue
|
/* The queue is empty, so sending an item to the back of the queue
|
||||||
should have the same efect as sending it to the front of the queue.
|
should have the same effect as sending it to the front of the queue.
|
||||||
|
|
||||||
First send to the front and check everything is as expected. */
|
First send to the front and check everything is as expected. */
|
||||||
ulLoopCounterSnapshot = ulLoopCounter;
|
ulLoopCounterSnapshot = ulLoopCounter;
|
||||||
|
|
|
@ -971,8 +971,10 @@ BaseType_t xErrorDetected = pdFALSE;
|
||||||
else if( xTriggerLevel < xReadBlockTime )
|
else if( xTriggerLevel < xReadBlockTime )
|
||||||
{
|
{
|
||||||
/* Trigger level was less than the block time so we expect to
|
/* Trigger level was less than the block time so we expect to
|
||||||
have received the trigger level number of bytes. */
|
have received the trigger level number of bytes - could be more
|
||||||
if( ( xTriggerLevel - xBytesReceived ) > xAllowableMargin )
|
though depending on other activity between the task being
|
||||||
|
unblocked and the task reading the number of bytes received. */
|
||||||
|
if( ( xBytesReceived - xTriggerLevel ) > xAllowableMargin )
|
||||||
{
|
{
|
||||||
xErrorDetected = pdTRUE;
|
xErrorDetected = pdTRUE;
|
||||||
}
|
}
|
||||||
|
@ -983,7 +985,7 @@ BaseType_t xErrorDetected = pdFALSE;
|
||||||
receive no greater than the block time, but one or two less is
|
receive no greater than the block time, but one or two less is
|
||||||
ok due to variations in how far through the time slice the
|
ok due to variations in how far through the time slice the
|
||||||
functions get executed. */
|
functions get executed. */
|
||||||
if( xBytesReceived > xReadBlockTime )
|
if( ( xBytesReceived - xReadBlockTime ) > xAllowableMargin )
|
||||||
{
|
{
|
||||||
xErrorDetected = pdTRUE;
|
xErrorDetected = pdTRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/freertos_source/include}""/>
|
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/freertos_source/include}""/>
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/freertos_source/portable/GCC/RISC-V}""/>
|
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/freertos_source/portable/GCC/RISC-V}""/>
|
||||||
</option>
|
</option>
|
||||||
<option id="gnu.c.compiler.option.misc.other.1598749994" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 -march=rv32imac -mabi=ilp32 -mcmodel=medlow -ffunction-sections -fdata-sections --specs=nano.specs -fno-builtin-printf" valueType="string"/>
|
<option id="gnu.c.compiler.option.misc.other.1598749994" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 -march=rv32imac -mabi=ilp32 -mcmodel=medlow -ffunction-sections -fdata-sections --specs=nano.specs -fno-builtin-printf -Wno-unused-parameter" valueType="string"/>
|
||||||
<option id="gnu.c.compiler.option.warnings.extrawarn.527816261" name="Extra warnings (-Wextra)" superClass="gnu.c.compiler.option.warnings.extrawarn" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
<option id="gnu.c.compiler.option.warnings.extrawarn.527816261" name="Extra warnings (-Wextra)" superClass="gnu.c.compiler.option.warnings.extrawarn" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
<option id="gnu.c.compiler.option.dialect.std.1770102192" name="Language standard" superClass="gnu.c.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.c.compiler.dialect.default" valueType="enumerated"/>
|
<option id="gnu.c.compiler.option.dialect.std.1770102192" name="Language standard" superClass="gnu.c.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.c.compiler.dialect.default" valueType="enumerated"/>
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.preprocessor.def.symbols.252676358" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols">
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.preprocessor.def.symbols.252676358" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols">
|
||||||
|
|
|
@ -95,11 +95,14 @@
|
||||||
* See http://www.freertos.org/a00110.html.
|
* See http://www.freertos.org/a00110.html.
|
||||||
*----------------------------------------------------------*/
|
*----------------------------------------------------------*/
|
||||||
|
|
||||||
#define configCLINT_BASE_ADDRESS CLINT_CTRL_ADDR
|
/* See https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html */
|
||||||
|
#define configMTIME_BASE_ADDRESS ( ( CLINT_CTRL_ADDR ) + 0xBFF8UL )
|
||||||
|
#define configMTIMECMP_BASE_ADDRESS ( ( CLINT_CTRL_ADDR ) + 0x4000UL )
|
||||||
|
|
||||||
#define configUSE_PREEMPTION 1
|
#define configUSE_PREEMPTION 1
|
||||||
#define configUSE_IDLE_HOOK 0
|
#define configUSE_IDLE_HOOK 0
|
||||||
#define configUSE_TICK_HOOK 1
|
#define configUSE_TICK_HOOK 1
|
||||||
#define configCPU_CLOCK_HZ ( 10000000 ) /*QEMU*/
|
#define configCPU_CLOCK_HZ ( 1000000 )
|
||||||
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
|
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
|
||||||
#define configMAX_PRIORITIES ( 7 )
|
#define configMAX_PRIORITIES ( 7 )
|
||||||
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 105 )
|
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 105 )
|
||||||
|
@ -125,7 +128,7 @@
|
||||||
/* Software timer definitions. */
|
/* Software timer definitions. */
|
||||||
#define configUSE_TIMERS 1
|
#define configUSE_TIMERS 1
|
||||||
#define configTIMER_TASK_PRIORITY ( configMAX_PRIORITIES - 1 )
|
#define configTIMER_TASK_PRIORITY ( configMAX_PRIORITIES - 1 )
|
||||||
#define configTIMER_QUEUE_LENGTH 4
|
#define configTIMER_QUEUE_LENGTH 6
|
||||||
#define configTIMER_TASK_STACK_DEPTH ( 110 )
|
#define configTIMER_TASK_STACK_DEPTH ( 110 )
|
||||||
|
|
||||||
/* Task priorities. Allow these to be overridden. */
|
/* Task priorities. Allow these to be overridden. */
|
||||||
|
|
|
@ -74,7 +74,7 @@
|
||||||
|
|
||||||
/* Set mainCREATE_SIMPLE_BLINKY_DEMO_ONLY to one to run the simple blinky demo,
|
/* Set mainCREATE_SIMPLE_BLINKY_DEMO_ONLY to one to run the simple blinky demo,
|
||||||
or 0 to run the more comprehensive test and demo application. */
|
or 0 to run the more comprehensive test and demo application. */
|
||||||
#define mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 0
|
#define mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* main_blinky() is used when mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1.
|
* main_blinky() is used when mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1.
|
||||||
|
@ -83,6 +83,7 @@ or 0 to run the more comprehensive test and demo application. */
|
||||||
#if mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1
|
#if mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1
|
||||||
extern void main_blinky( void );
|
extern void main_blinky( void );
|
||||||
#else
|
#else
|
||||||
|
#warning At the time of writing the QEMU MTIME behaviour is erratic, resulting in test failures.
|
||||||
extern void main_full( void );
|
extern void main_full( void );
|
||||||
#endif /* #if mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1 */
|
#endif /* #if mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1 */
|
||||||
|
|
||||||
|
|
|
@ -181,9 +181,6 @@
|
||||||
</tool>
|
</tool>
|
||||||
</toolChain>
|
</toolChain>
|
||||||
</folderInfo>
|
</folderInfo>
|
||||||
<fileInfo id="ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.debug.2124579326.468406560" name="fsl_lpuart.c" rcbsApplicability="disable" resourcePath="common/rv32m1_sdk_riscv/devices/RV32M1/drivers/fsl_lpuart.c" toolsToInvoke="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler.906968630.2006953853">
|
|
||||||
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler.906968630.2006953853" name="GNU RISC-V Cross C Compiler" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler.906968630"/>
|
|
||||||
</fileInfo>
|
|
||||||
<sourceEntries>
|
<sourceEntries>
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
|
||||||
</sourceEntries>
|
</sourceEntries>
|
||||||
|
|
|
@ -85,8 +85,9 @@
|
||||||
* See http://www.freertos.org/a00110.html.
|
* See http://www.freertos.org/a00110.html.
|
||||||
*----------------------------------------------------------*/
|
*----------------------------------------------------------*/
|
||||||
|
|
||||||
#define configCLINT_BASE_ADDRESS 0 /* There is no CLINT so the base address must be set to 0. */
|
/* See https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html */
|
||||||
|
#define configMTIME_BASE_ADDRESS ( 0 )
|
||||||
|
#define configMTIMECMP_BASE_ADDRESS ( 0 )
|
||||||
|
|
||||||
|
|
||||||
#define configUSE_PREEMPTION 1
|
#define configUSE_PREEMPTION 1
|
||||||
|
|
|
@ -74,6 +74,11 @@
|
||||||
#include "hw_platform.h"
|
#include "hw_platform.h"
|
||||||
#include "riscv_plic.h"
|
#include "riscv_plic.h"
|
||||||
|
|
||||||
|
/* See https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html */
|
||||||
|
#define configMTIME_BASE_ADDRESS ( ( PRCI_BASE ) + 0xBFF8UL )
|
||||||
|
#define configMTIMECMP_BASE_ADDRESS ( ( PRCI_BASE ) + 0x4000UL )
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------
|
/*-----------------------------------------------------------
|
||||||
* Application specific definitions.
|
* Application specific definitions.
|
||||||
*
|
*
|
||||||
|
@ -85,7 +90,7 @@
|
||||||
*
|
*
|
||||||
* See http://www.freertos.org/a00110.html.
|
* See http://www.freertos.org/a00110.html.
|
||||||
*----------------------------------------------------------*/
|
*----------------------------------------------------------*/
|
||||||
#define configCLINT_BASE_ADDRESS PRCI_BASE
|
|
||||||
#define configUSE_PREEMPTION 1
|
#define configUSE_PREEMPTION 1
|
||||||
#define configUSE_IDLE_HOOK 1
|
#define configUSE_IDLE_HOOK 1
|
||||||
#define configUSE_TICK_HOOK 1
|
#define configUSE_TICK_HOOK 1
|
||||||
|
|
|
@ -52,7 +52,7 @@
|
||||||
|
|
||||||
/* Set mainCREATE_SIMPLE_BLINKY_DEMO_ONLY to one to run the simple blinky demo,
|
/* Set mainCREATE_SIMPLE_BLINKY_DEMO_ONLY to one to run the simple blinky demo,
|
||||||
or 0 to run the more comprehensive test and demo application. */
|
or 0 to run the more comprehensive test and demo application. */
|
||||||
#define mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 0
|
#define mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* main_blinky() is used when mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1.
|
* main_blinky() is used when mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1.
|
||||||
|
|
|
@ -3,5 +3,5 @@ mach create "Mi-V"
|
||||||
machine LoadPlatformDescription @platforms/boards/miv-board.repl
|
machine LoadPlatformDescription @platforms/boards/miv-board.repl
|
||||||
peripherals
|
peripherals
|
||||||
showAnalyzer sysbus.uart
|
showAnalyzer sysbus.uart
|
||||||
sysbus.cpu StartGdbServer 3333 true
|
machine StartGdbServer 3333 true
|
||||||
log "Renode has been started successfully and is ready for a gdb connection. (This is not an error)" 3
|
log "Renode has been started successfully and is ready for a gdb connection. (This is not an error)" 3
|
||||||
|
|
|
@ -23,19 +23,19 @@
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
<UseOfMfc>false</UseOfMfc>
|
<UseOfMfc>false</UseOfMfc>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
<PlatformToolset>v140</PlatformToolset>
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
<UseOfMfc>false</UseOfMfc>
|
<UseOfMfc>false</UseOfMfc>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
<PlatformToolset>v140</PlatformToolset>
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Optimised|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Optimised|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
<UseOfMfc>false</UseOfMfc>
|
<UseOfMfc>false</UseOfMfc>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
<PlatformToolset>v140</PlatformToolset>
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
<ImportGroup Label="ExtensionSettings">
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
|
|
@ -627,8 +627,8 @@ static portBASE_TYPE xPerformedOneShotTests = pdFALSE;
|
||||||
TaskHandle_t xTestTask;
|
TaskHandle_t xTestTask;
|
||||||
TaskStatus_t xTaskInfo;
|
TaskStatus_t xTaskInfo;
|
||||||
extern StackType_t uxTimerTaskStack[];
|
extern StackType_t uxTimerTaskStack[];
|
||||||
static TickType_t xLastIdleExecutionTime = 0;
|
static uint32_t ulLastIdleExecutionTime = 0;
|
||||||
TickType_t xIdleExecutionTime;
|
uint32_t ulIdleExecutionTime;
|
||||||
|
|
||||||
/* Demonstrate the use of the xTimerGetTimerDaemonTaskHandle() and
|
/* Demonstrate the use of the xTimerGetTimerDaemonTaskHandle() and
|
||||||
xTaskGetIdleTaskHandle() functions. Also try using the function that sets
|
xTaskGetIdleTaskHandle() functions. Also try using the function that sets
|
||||||
|
@ -728,12 +728,12 @@ TickType_t xIdleExecutionTime;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
xIdleExecutionTime = xTaskGetIdleRunTimeCounter();
|
ulIdleExecutionTime = ulTaskGetIdleRunTimeCounter();
|
||||||
if( xIdleExecutionTime == xLastIdleExecutionTime )
|
if( ulIdleExecutionTime == ulLastIdleExecutionTime )
|
||||||
{
|
{
|
||||||
pcStatusMessage = "Error: Total amount of Idle task execution time did not change";
|
pcStatusMessage = "Error: Total amount of Idle task execution time did not change";
|
||||||
}
|
}
|
||||||
xLastIdleExecutionTime = xIdleExecutionTime;
|
ulLastIdleExecutionTime = ulIdleExecutionTime;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -26,11 +26,13 @@ Changes since the last release:
|
||||||
ports.
|
ports.
|
||||||
+ Updated the behaviour of the ARMv7-M MPU (Memory Protection Unit) ports to
|
+ Updated the behaviour of the ARMv7-M MPU (Memory Protection Unit) ports to
|
||||||
match that of the ARMv8-M ports whereby privilege escalations can only
|
match that of the ARMv8-M ports whereby privilege escalations can only
|
||||||
originate from within the kernel's own memory segment.
|
originate from within the kernel's own memory segment. Added
|
||||||
|
configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY configuration constant.
|
||||||
|
+ Update existing MPU ports to correctly disable the MPU before it is
|
||||||
|
updated.
|
||||||
+ Added LPC51U68 Cortex-M0+ port for GCC (MCUXpresso), Keil and IAR
|
+ Added LPC51U68 Cortex-M0+ port for GCC (MCUXpresso), Keil and IAR
|
||||||
compilers.
|
compilers.
|
||||||
+ Added CORTEX_MPU_STM32L4_Discovery_Keil_STM32Cube demo.
|
+ Added CORTEX_MPU_STM32L4_Discovery_Keil_STM32Cube demo.
|
||||||
+ Added xTaskAbortDelayFromISR() API function.
|
|
||||||
+ Added xTaskNotifyValueClear() API function.
|
+ Added xTaskNotifyValueClear() API function.
|
||||||
+ Improve timing accuracy (reduce clock slippage when compared to real time)
|
+ Improve timing accuracy (reduce clock slippage when compared to real time)
|
||||||
in the Windows simulator port by using a waitable timer to determine the
|
in the Windows simulator port by using a waitable timer to determine the
|
||||||
|
@ -38,6 +40,8 @@ Changes since the last release:
|
||||||
+ Added T-Head demo.
|
+ Added T-Head demo.
|
||||||
+ Added LPC54018 MPU demo.
|
+ Added LPC54018 MPU demo.
|
||||||
+ Added uxTimerGetReloadMode() API function.
|
+ Added uxTimerGetReloadMode() API function.
|
||||||
|
+ Rename xTaskGetIdleRunTimeCounter() to ulTaskGetIdleRunTimeCounter().
|
||||||
|
+ Added RISC-V port for IAR compiler.
|
||||||
|
|
||||||
|
|
||||||
Changes between FreeRTOS V10.2.1 and FreeRTOS V10.2.0 released May 13 2019:
|
Changes between FreeRTOS V10.2.1 and FreeRTOS V10.2.0 released May 13 2019:
|
||||||
|
|
|
@ -953,6 +953,7 @@ V8 if desired. */
|
||||||
#define pcTimerGetTimerName pcTimerGetName
|
#define pcTimerGetTimerName pcTimerGetName
|
||||||
#define pcQueueGetQueueName pcQueueGetName
|
#define pcQueueGetQueueName pcQueueGetName
|
||||||
#define vTaskGetTaskInfo vTaskGetInfo
|
#define vTaskGetTaskInfo vTaskGetInfo
|
||||||
|
#define xTaskGetIdleRunTimeCounter ulTaskGetIdleRunTimeCounter
|
||||||
|
|
||||||
/* 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. */
|
||||||
|
|
|
@ -831,6 +831,11 @@ void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xT
|
||||||
* task will leave the Blocked state, and return from whichever function call
|
* task will leave the Blocked state, and return from whichever function call
|
||||||
* placed the task into the Blocked state.
|
* placed the task into the Blocked state.
|
||||||
*
|
*
|
||||||
|
* There is no 'FromISR' version of this function as an interrupt would need to
|
||||||
|
* know which object a task was blocked on in order to know which actions to
|
||||||
|
* take. For example, if the task was blocked on a queue the interrupt handler
|
||||||
|
* would then need to know if the queue was locked.
|
||||||
|
*
|
||||||
* @param xTask The handle of the task to remove from the Blocked state.
|
* @param xTask The handle of the task to remove from the Blocked state.
|
||||||
*
|
*
|
||||||
* @return If the task referenced by xTask was not in the Blocked state then
|
* @return If the task referenced by xTask was not in the Blocked state then
|
||||||
|
@ -841,39 +846,6 @@ void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xT
|
||||||
*/
|
*/
|
||||||
BaseType_t xTaskAbortDelay( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
BaseType_t xTaskAbortDelay( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
|
||||||
* task. h
|
|
||||||
* <pre>BaseType_t xTaskAbortDelayFromISR( TaskHandle_t xTask, BaseType_t * const pxHigherPriorityTaskWoken )</pre>
|
|
||||||
*
|
|
||||||
* INCLUDE_xTaskAbortDelay must be defined as 1 in FreeRTOSConfig.h for this
|
|
||||||
* function to be available.
|
|
||||||
*
|
|
||||||
* A version of xTaskAbortDelay() that can be used from an interrupt service routine.
|
|
||||||
*
|
|
||||||
* A task will enter the Blocked state when it is waiting for an event. The
|
|
||||||
* event it is waiting for can be a temporal event (waiting for a time), such
|
|
||||||
* as when vTaskDelay() is called, or an event on an object, such as when
|
|
||||||
* xQueueReceive() or ulTaskNotifyTake() is called. If the handle of a task
|
|
||||||
* that is in the Blocked state is used in a call to xTaskAbortDelay() then the
|
|
||||||
* task will leave the Blocked state, and return from whichever function call
|
|
||||||
* placed the task into the Blocked state.
|
|
||||||
*
|
|
||||||
* @param xTask The handle of the task to remove from the Blocked state.
|
|
||||||
*
|
|
||||||
* @param pxHigherPriorityTaskWoken xTaskAbortDelayFromISR() will set
|
|
||||||
* *pxHigherPriorityTaskWoken to pdTRUE if a task was removed from the Blocked state,
|
|
||||||
* and the task that was removed from the Blocked state has a priority higher than the
|
|
||||||
* currently running task. If xTaskAbortDelayFromISR() sets this value to pdTRUE then
|
|
||||||
* a context switch should be requested before the interrupt is exited.
|
|
||||||
*
|
|
||||||
* @return If the task referenced by xTask was not in the Blocked state then
|
|
||||||
* pdFAIL is returned. Otherwise pdPASS is returned.
|
|
||||||
*
|
|
||||||
* \defgroup xTaskAbortDelay xTaskAbortDelayFromISR
|
|
||||||
* \ingroup TaskCtrl
|
|
||||||
*/
|
|
||||||
BaseType_t xTaskAbortDelayFromISR( TaskHandle_t xTask, BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
* <pre>UBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask );</pre>
|
* <pre>UBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask );</pre>
|
||||||
|
|
|
@ -295,7 +295,7 @@ portFORCE_INLINE static void vPortSetBASEPRI( uint32_t ulNewMaskValue )
|
||||||
#define portMEMORY_BARRIER() __asm volatile( "" ::: "memory" )
|
#define portMEMORY_BARRIER() __asm volatile( "" ::: "memory" )
|
||||||
|
|
||||||
#ifndef configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY
|
#ifndef configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY
|
||||||
#warning "configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY is not defined. We recommend defining it to 1 in FreeRTOSConfig.h for better security."
|
#warning "configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY is not defined. We recommend defining it to 1 in FreeRTOSConfig.h for better security. https://www.freertos.org/FreeRTOS-V10.3.x.html"
|
||||||
#define configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY 0
|
#define configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY 0
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
@ -295,7 +295,7 @@ portFORCE_INLINE static void vPortSetBASEPRI( uint32_t ulNewMaskValue )
|
||||||
#define portMEMORY_BARRIER() __asm volatile( "" ::: "memory" )
|
#define portMEMORY_BARRIER() __asm volatile( "" ::: "memory" )
|
||||||
|
|
||||||
#ifndef configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY
|
#ifndef configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY
|
||||||
#warning "configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY is not defined. We recommend defining it to 1 in FreeRTOSConfig.h for better security."
|
#warning "configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY is not defined. We recommend defining it to 1 in FreeRTOSConfig.h for better security. https://www.freertos.org/FreeRTOS-V10.3.x.html"
|
||||||
#define configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY 0
|
#define configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY 0
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
@ -53,6 +53,7 @@
|
||||||
#ifndef __FREERTOS_RISC_V_EXTENSIONS_H__
|
#ifndef __FREERTOS_RISC_V_EXTENSIONS_H__
|
||||||
#define __FREERTOS_RISC_V_EXTENSIONS_H__
|
#define __FREERTOS_RISC_V_EXTENSIONS_H__
|
||||||
|
|
||||||
|
#define portasmHAS_SIFIVE_CLINT 1
|
||||||
#define portasmHAS_MTIME 1
|
#define portasmHAS_MTIME 1
|
||||||
#define portasmADDITIONAL_CONTEXT_SIZE 0 /* Must be even number on 32-bit cores. */
|
#define portasmADDITIONAL_CONTEXT_SIZE 0 /* Must be even number on 32-bit cores. */
|
||||||
|
|
||||||
|
@ -60,7 +61,6 @@
|
||||||
/* No additional registers to save, so this macro does nothing. */
|
/* No additional registers to save, so this macro does nothing. */
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
/* Restore the additional registers found on the Pulpino. */
|
|
||||||
.macro portasmRESTORE_ADDITIONAL_REGISTERS
|
.macro portasmRESTORE_ADDITIONAL_REGISTERS
|
||||||
/* No additional registers to restore, so this macro does nothing. */
|
/* No additional registers to restore, so this macro does nothing. */
|
||||||
.endm
|
.endm
|
||||||
|
|
|
@ -38,15 +38,15 @@
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
|
|
||||||
#ifdef configCLINT_BASE_ADDRESS
|
#ifdef configCLINT_BASE_ADDRESS
|
||||||
#warning The configCLINT_BASE_ADDRESS constant has been deprecated. configMTIME_BASE_ADDRESS and configMTIMECMP_BASE_ADDRESS are currently being derived from the (possibly 0) configCLINT_BASE_ADDRESS setting. Please update to define configMTIME_BASE_ADDRESS and configMTIMECMP_BASE_ADDRESS dirctly in place of configCLINT_BASE_ADDRESS.
|
#warning The configCLINT_BASE_ADDRESS constant has been deprecated. configMTIME_BASE_ADDRESS and configMTIMECMP_BASE_ADDRESS are currently being derived from the (possibly 0) configCLINT_BASE_ADDRESS setting. Please update to define configMTIME_BASE_ADDRESS and configMTIMECMP_BASE_ADDRESS dirctly in place of configCLINT_BASE_ADDRESS. See https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef configMTIME_BASE_ADDRESS
|
#ifndef configMTIME_BASE_ADDRESS
|
||||||
#warning configMTIME_BASE_ADDRESS must be defined in FreeRTOSConfig.h. If the target chip includes a memory-mapped mtime register then set configMTIME_BASE_ADDRESS to the mapped address. Otherwise set configMTIME_BASE_ADDRESS to 0.
|
#warning configMTIME_BASE_ADDRESS must be defined in FreeRTOSConfig.h. If the target chip includes a memory-mapped mtime register then set configMTIME_BASE_ADDRESS to the mapped address. Otherwise set configMTIME_BASE_ADDRESS to 0. See https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef configMTIMECMP_BASE_ADDRESS
|
#ifndef configMTIMECMP_BASE_ADDRESS
|
||||||
#warning configMTIMECMP_BASE_ADDRESS must be defined in FreeRTOSConfig.h. If the target chip includes a memory-mapped mtimecmp register then set configMTIMECMP_BASE_ADDRESS to the mapped address. Otherwise set configMTIMECMP_BASE_ADDRESS to 0.
|
#warning configMTIMECMP_BASE_ADDRESS must be defined in FreeRTOSConfig.h. If the target chip includes a memory-mapped mtimecmp register then set configMTIMECMP_BASE_ADDRESS to the mapped address. Otherwise set configMTIMECMP_BASE_ADDRESS to 0. See https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* 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
|
||||||
|
|
|
@ -72,20 +72,25 @@
|
||||||
/* Check the freertos_risc_v_chip_specific_extensions.h and/or command line
|
/* Check the freertos_risc_v_chip_specific_extensions.h and/or command line
|
||||||
definitions. */
|
definitions. */
|
||||||
#if defined( portasmHAS_CLINT ) && defined( portasmHAS_MTIME )
|
#if defined( portasmHAS_CLINT ) && defined( portasmHAS_MTIME )
|
||||||
#error The portasmHAS_CLINT constant has been depracted. Please replace it with portasmHAS_CLINT. portasmHAS_CLINT and portasmHAS_MTIME cannot both be defined at once.
|
#error The portasmHAS_CLINT constant has been deprecated. Please replace it with portasmHAS_MTIME. portasmHAS_CLINT and portasmHAS_MTIME cannot both be defined at once. See https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef portasmHAS_CLINT
|
#ifdef portasmHAS_CLINT
|
||||||
#warning The portasmHAS_CLINT constant has been depracted. Please replace it with portasmHAS_CLINT. For now portasmHAS_MTIME is derived from portasmHAS_CLINT.
|
#warning The portasmHAS_CLINT constant has been deprecated. Please replace it with portasmHAS_MTIME and portasmHAS_SIFIVE_CLINT. For now portasmHAS_MTIME and portasmHAS_SIFIVE_CLINT are derived from portasmHAS_CLINT. See https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html
|
||||||
#define portasmHAS_MTIME portasmHAS_CLINT
|
#define portasmHAS_MTIME portasmHAS_CLINT
|
||||||
|
#define portasmHAS_SIFIVE_CLINT portasmHAS_CLINT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef portasmHAS_MTIME
|
#ifndef portasmHAS_MTIME
|
||||||
#error freertos_risc_v_chip_specific_extensions.h must define portasmHAS_MTIME to either 1 (MTIME clock present) or 0 (MTIME clock not present).
|
#error freertos_risc_v_chip_specific_extensions.h must define portasmHAS_MTIME to either 1 (MTIME clock present) or 0 (MTIME clock not present). See https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef portasmHANDLE_INTERRUPT
|
#ifndef portasmHANDLE_INTERRUPT
|
||||||
#error portasmHANDLE_INTERRUPT must be defined to the function to be called to handle external/peripheral interrupts. portasmHANDLE_INTERRUPT can be defined on the assmbler command line or in the appropriate freertos_risc_v_chip_specific_extensions.h header file.
|
#error portasmHANDLE_INTERRUPT must be defined to the function to be called to handle external/peripheral interrupts. portasmHANDLE_INTERRUPT can be defined on the assembler command line or in the appropriate freertos_risc_v_chip_specific_extensions.h header file. https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef portasmHAS_SIFIVE_CLINT
|
||||||
|
#define portasmHAS_SIFIVE_CLINT 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Only the standard core registers are stored by default. Any additional
|
/* Only the standard core registers are stored by default. Any additional
|
||||||
|
@ -293,7 +298,7 @@ processed_source:
|
||||||
.func
|
.func
|
||||||
xPortStartFirstTask:
|
xPortStartFirstTask:
|
||||||
|
|
||||||
#if( portasmHAS_MTIME != 0 )
|
#if( portasmHAS_SIFIVE_CLINT != 0 )
|
||||||
/* If there is a clint then interrupts can branch directly to the FreeRTOS
|
/* If there is a clint then interrupts can branch directly to the FreeRTOS
|
||||||
trap handler. Otherwise the interrupt controller will need to be configured
|
trap handler. Otherwise the interrupt controller will need to be configured
|
||||||
outside of this file. */
|
outside of this file. */
|
||||||
|
|
|
@ -246,7 +246,7 @@ extern void vResetPrivilege( void );
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY
|
#ifndef configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY
|
||||||
#warning "configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY is not defined. We recommend defining it to 1 in FreeRTOSConfig.h for better security."
|
#warning "configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY is not defined. We recommend defining it to 1 in FreeRTOSConfig.h for better security. https://www.freertos.org/FreeRTOS-V10.3.x.html"
|
||||||
#define configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY 0
|
#define configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY 0
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
@ -53,6 +53,7 @@
|
||||||
#ifndef __FREERTOS_RISC_V_EXTENSIONS_H__
|
#ifndef __FREERTOS_RISC_V_EXTENSIONS_H__
|
||||||
#define __FREERTOS_RISC_V_EXTENSIONS_H__
|
#define __FREERTOS_RISC_V_EXTENSIONS_H__
|
||||||
|
|
||||||
|
#define portasmHAS_SIFIVE_CLINT 1
|
||||||
#define portasmHAS_MTIME 1
|
#define portasmHAS_MTIME 1
|
||||||
#define portasmADDITIONAL_CONTEXT_SIZE 0 /* Must be even number on 32-bit cores. */
|
#define portasmADDITIONAL_CONTEXT_SIZE 0 /* Must be even number on 32-bit cores. */
|
||||||
|
|
||||||
|
@ -60,7 +61,6 @@ portasmSAVE_ADDITIONAL_REGISTERS MACRO
|
||||||
/* No additional registers to save, so this macro does nothing. */
|
/* No additional registers to save, so this macro does nothing. */
|
||||||
ENDM
|
ENDM
|
||||||
|
|
||||||
/* Restore the additional registers found on the Pulpino. */
|
|
||||||
portasmRESTORE_ADDITIONAL_REGISTERS MACRO
|
portasmRESTORE_ADDITIONAL_REGISTERS MACRO
|
||||||
/* No additional registers to restore, so this macro does nothing. */
|
/* No additional registers to restore, so this macro does nothing. */
|
||||||
ENDM
|
ENDM
|
||||||
|
|
|
@ -38,15 +38,15 @@
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
|
|
||||||
#ifdef configCLINT_BASE_ADDRESS
|
#ifdef configCLINT_BASE_ADDRESS
|
||||||
#warning The configCLINT_BASE_ADDRESS constant has been deprecated. configMTIME_BASE_ADDRESS and configMTIMECMP_BASE_ADDRESS are currently being derived from the (possibly 0) configCLINT_BASE_ADDRESS setting. Please update to define configMTIME_BASE_ADDRESS and configMTIMECMP_BASE_ADDRESS dirctly in place of configCLINT_BASE_ADDRESS.
|
#warning The configCLINT_BASE_ADDRESS constant has been deprecated. configMTIME_BASE_ADDRESS and configMTIMECMP_BASE_ADDRESS are currently being derived from the (possibly 0) configCLINT_BASE_ADDRESS setting. Please update to define configMTIME_BASE_ADDRESS and configMTIMECMP_BASE_ADDRESS dirctly in place of configCLINT_BASE_ADDRESS. See https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef configMTIME_BASE_ADDRESS
|
#ifndef configMTIME_BASE_ADDRESS
|
||||||
#warning configMTIME_BASE_ADDRESS must be defined in FreeRTOSConfig.h. If the target chip includes a memory-mapped mtime register then set configMTIME_BASE_ADDRESS to the mapped address. Otherwise set configMTIME_BASE_ADDRESS to 0.
|
#warning configMTIME_BASE_ADDRESS must be defined in FreeRTOSConfig.h. If the target chip includes a memory-mapped mtime register then set configMTIME_BASE_ADDRESS to the mapped address. Otherwise set configMTIME_BASE_ADDRESS to 0. See https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef configMTIMECMP_BASE_ADDRESS
|
#ifndef configMTIMECMP_BASE_ADDRESS
|
||||||
#warning configMTIMECMP_BASE_ADDRESS must be defined in FreeRTOSConfig.h. If the target chip includes a memory-mapped mtimecmp register then set configMTIMECMP_BASE_ADDRESS to the mapped address. Otherwise set configMTIMECMP_BASE_ADDRESS to 0.
|
#warning configMTIMECMP_BASE_ADDRESS must be defined in FreeRTOSConfig.h. If the target chip includes a memory-mapped mtimecmp register then set configMTIMECMP_BASE_ADDRESS to the mapped address. Otherwise set configMTIMECMP_BASE_ADDRESS to 0. See https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* 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
|
||||||
|
|
|
@ -72,20 +72,26 @@
|
||||||
/* Check the freertos_risc_v_chip_specific_extensions.h and/or command line
|
/* Check the freertos_risc_v_chip_specific_extensions.h and/or command line
|
||||||
definitions. */
|
definitions. */
|
||||||
#if defined( portasmHAS_CLINT ) && defined( portasmHAS_MTIME )
|
#if defined( portasmHAS_CLINT ) && defined( portasmHAS_MTIME )
|
||||||
#error The portasmHAS_CLINT constant has been depracted. Please replace it with portasmHAS_CLINT. portasmHAS_CLINT and portasmHAS_MTIME cannot both be defined at once.
|
#error The portasmHAS_CLINT constant has been deprecated. Please replace it with portasmHAS_MTIME. portasmHAS_CLINT and portasmHAS_MTIME cannot both be defined at once. See https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef portasmHAS_CLINT
|
#ifdef portasmHAS_CLINT
|
||||||
#warning The portasmHAS_CLINT constant has been depracted. Please replace it with portasmHAS_CLINT. For now portasmHAS_MTIME is derived from portasmHAS_CLINT.
|
#warning The portasmHAS_CLINT constant has been deprecated. Please replace it with portasmHAS_MTIME and portasmHAS_SIFIVE_CLINT. For now portasmHAS_MTIME and portasmHAS_SIFIVE_CLINT are derived from portasmHAS_CLINT. See https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html
|
||||||
#define portasmHAS_MTIME portasmHAS_CLINT
|
#define portasmHAS_MTIME portasmHAS_CLINT
|
||||||
|
#define portasmHAS_SIFIVE_CLINT portasmHAS_CLINT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef portasmHAS_MTIME
|
#ifndef portasmHAS_MTIME
|
||||||
#error freertos_risc_v_chip_specific_extensions.h must define portasmHAS_MTIME to either 1 (MTIME clock present) or 0 (MTIME clock not present).
|
#error freertos_risc_v_chip_specific_extensions.h must define portasmHAS_MTIME to either 1 (MTIME clock present) or 0 (MTIME clock not present). See https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef portasmHANDLE_INTERRUPT
|
#ifndef portasmHANDLE_INTERRUPT
|
||||||
#error portasmHANDLE_INTERRUPT must be defined to the function to be called to handle external/peripheral interrupts. portasmHANDLE_INTERRUPT can be defined on the assmbler command line or in the appropriate freertos_risc_v_chip_specific_extensions.h header file.
|
#error portasmHANDLE_INTERRUPT must be defined to the function to be called to handle external/peripheral interrupts. portasmHANDLE_INTERRUPT can be defined on the assembler command line or in the appropriate freertos_risc_v_chip_specific_extensions.h header file. https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef portasmHAS_SIFIVE_CLINT
|
||||||
|
#define portasmHAS_SIFIVE_CLINT 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* CSR definitions. */
|
/* CSR definitions. */
|
||||||
|
@ -299,7 +305,7 @@ processed_source:
|
||||||
|
|
||||||
xPortStartFirstTask:
|
xPortStartFirstTask:
|
||||||
|
|
||||||
#if( portasmHAS_MTIME != 0 )
|
#if( portasmHAS_SIFIVE_CLINT != 0 )
|
||||||
/* If there is a clint then interrupts can branch directly to the FreeRTOS
|
/* If there is a clint then interrupts can branch directly to the FreeRTOS
|
||||||
trap handler. Otherwise the interrupt controller will need to be configured
|
trap handler. Otherwise the interrupt controller will need to be configured
|
||||||
outside of this file. */
|
outside of this file. */
|
||||||
|
|
|
@ -248,11 +248,11 @@ void vPortEnterCritical( void )
|
||||||
void vPortExitCritical( void )
|
void vPortExitCritical( void )
|
||||||
{
|
{
|
||||||
configASSERT( uxCriticalNesting );
|
configASSERT( uxCriticalNesting );
|
||||||
uxCriticalNesting--;
|
uxCriticalNesting--;
|
||||||
if( uxCriticalNesting == 0 )
|
if( uxCriticalNesting == 0 )
|
||||||
{
|
{
|
||||||
portENABLE_INTERRUPTS();
|
portENABLE_INTERRUPTS();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -268,8 +268,8 @@ uint32_t ulReg, ulPC;
|
||||||
case portSVC_RAISE_PRIVILEGE : /* Only raise the privilege, if the
|
case portSVC_RAISE_PRIVILEGE : /* Only raise the privilege, if the
|
||||||
* svc was raised from any of the
|
* svc was raised from any of the
|
||||||
* system calls. */
|
* system calls. */
|
||||||
if( ulPC >= ( uint32_t ) __syscalls_flash_start__ &&
|
if( ( ulPC >= ( uint32_t ) __syscalls_flash_start__ ) &&
|
||||||
ulPC <= ( uint32_t ) __syscalls_flash_end__ )
|
( ulPC <= ( uint32_t ) __syscalls_flash_end__ ) )
|
||||||
{
|
{
|
||||||
__asm
|
__asm
|
||||||
{
|
{
|
||||||
|
|
|
@ -303,7 +303,7 @@ BaseType_t xReturn;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY
|
#ifndef configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY
|
||||||
#warning "configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY is not defined. We recommend defining it to 1 in FreeRTOSConfig.h for better security."
|
#warning "configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY is not defined. We recommend defining it to 1 in FreeRTOSConfig.h for better security. https://www.freertos.org/FreeRTOS-V10.3.x.html"
|
||||||
#define configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY 0
|
#define configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY 0
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
@ -2195,7 +2195,6 @@ BaseType_t xTaskResumeAll( void )
|
||||||
{
|
{
|
||||||
TCB_t *pxTCB = NULL;
|
TCB_t *pxTCB = NULL;
|
||||||
BaseType_t xAlreadyYielded = pdFALSE;
|
BaseType_t xAlreadyYielded = pdFALSE;
|
||||||
TickType_t xTicksToNextUnblockTime;
|
|
||||||
|
|
||||||
/* If uxSchedulerSuspended is zero then this function does not match a
|
/* If uxSchedulerSuspended is zero then this function does not match a
|
||||||
previous call to vTaskSuspendAll(). */
|
previous call to vTaskSuspendAll(). */
|
||||||
|
@ -2250,51 +2249,30 @@ TickType_t xTicksToNextUnblockTime;
|
||||||
they should be processed now. This ensures the tick count does
|
they should be processed now. This ensures the tick count does
|
||||||
not slip, and that any delayed tasks are resumed at the correct
|
not slip, and that any delayed tasks are resumed at the correct
|
||||||
time. */
|
time. */
|
||||||
while( xPendedTicks > ( TickType_t ) 0 )
|
|
||||||
{
|
{
|
||||||
/* Calculate how far into the future the next task will
|
TickType_t xPendedCounts = xPendedTicks; /* Non-volatile copy. */
|
||||||
leave the Blocked state because its timeout expired. If
|
|
||||||
there are no tasks due to leave the blocked state between
|
|
||||||
the time now and the time at which the tick count overflows
|
|
||||||
then xNextTaskUnblockTime will the tick overflow time.
|
|
||||||
This means xNextTaskUnblockTime can never be less than
|
|
||||||
xTickCount, and the following can therefore not
|
|
||||||
underflow. */
|
|
||||||
configASSERT( xNextTaskUnblockTime >= xTickCount );
|
|
||||||
xTicksToNextUnblockTime = xNextTaskUnblockTime - xTickCount;
|
|
||||||
|
|
||||||
/* Don't want to move the tick count more than the number
|
if( xPendedCounts > ( TickType_t ) 0U )
|
||||||
of ticks that are pending, so cap if necessary. */
|
|
||||||
if( xTicksToNextUnblockTime > xPendedTicks )
|
|
||||||
{
|
{
|
||||||
xTicksToNextUnblockTime = xPendedTicks;
|
do
|
||||||
}
|
{
|
||||||
|
if( xTaskIncrementTick() != pdFALSE )
|
||||||
|
{
|
||||||
|
xYieldPending = pdTRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mtCOVERAGE_TEST_MARKER();
|
||||||
|
}
|
||||||
|
--xPendedCounts;
|
||||||
|
} while( xPendedCounts > ( TickType_t ) 0U );
|
||||||
|
|
||||||
if( xTicksToNextUnblockTime == 0 )
|
xPendedTicks = 0;
|
||||||
{
|
|
||||||
/* xTicksToNextUnblockTime could be zero if the tick
|
|
||||||
count is about to overflow and xTicksToNetUnblockTime
|
|
||||||
holds the time at which the tick count will overflow
|
|
||||||
(rather than the time at which the next task will
|
|
||||||
unblock). Set to 1 otherwise xPendedTicks won't be
|
|
||||||
decremented below. */
|
|
||||||
xTicksToNextUnblockTime = ( TickType_t ) 1;
|
|
||||||
}
|
}
|
||||||
else if( xTicksToNextUnblockTime > ( TickType_t ) 1 )
|
else
|
||||||
{
|
{
|
||||||
/* Move the tick count one short of the next unblock
|
mtCOVERAGE_TEST_MARKER();
|
||||||
time, then call xTaskIncrementTick() to move the tick
|
|
||||||
count up to the next unblock time to unblock the task,
|
|
||||||
if any. This will also swap the blocked task and
|
|
||||||
overflow blocked task lists if necessary. */
|
|
||||||
xTickCount += ( xTicksToNextUnblockTime - ( TickType_t ) 1 );
|
|
||||||
}
|
}
|
||||||
xYieldPending |= xTaskIncrementTick();
|
|
||||||
|
|
||||||
/* Adjust for the number of ticks just added to
|
|
||||||
xTickCount and go around the loop again if
|
|
||||||
xTicksToCatchUp is still greater than 0. */
|
|
||||||
xPendedTicks -= xTicksToNextUnblockTime;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( xYieldPending != pdFALSE )
|
if( xYieldPending != pdFALSE )
|
||||||
|
@ -2646,91 +2624,6 @@ BaseType_t xYieldRequired = pdFALSE;
|
||||||
}
|
}
|
||||||
/*----------------------------------------------------------*/
|
/*----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( INCLUDE_xTaskAbortDelay == 1 )
|
|
||||||
|
|
||||||
BaseType_t xTaskAbortDelayFromISR( TaskHandle_t xTask, BaseType_t * const pxHigherPriorityTaskWoken )
|
|
||||||
{
|
|
||||||
TCB_t *pxTCB = xTask;
|
|
||||||
BaseType_t xReturn;
|
|
||||||
UBaseType_t uxSavedInterruptStatus;
|
|
||||||
|
|
||||||
configASSERT( pxTCB );
|
|
||||||
|
|
||||||
/* RTOS ports that support interrupt nesting have the concept of a maximum
|
|
||||||
system call (or maximum API call) interrupt priority. Interrupts that are
|
|
||||||
above the maximum system call priority are kept permanently enabled, even
|
|
||||||
when the RTOS kernel is in a critical section, but cannot make any calls to
|
|
||||||
FreeRTOS API functions. If configASSERT() is defined in FreeRTOSConfig.h
|
|
||||||
then portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion
|
|
||||||
failure if a FreeRTOS API function is called from an interrupt that has been
|
|
||||||
assigned a priority above the configured maximum system call priority.
|
|
||||||
Only FreeRTOS functions that end in FromISR can be called from interrupts
|
|
||||||
that have been assigned a priority at or (logically) below the maximum
|
|
||||||
system call interrupt priority. FreeRTOS maintains a separate interrupt
|
|
||||||
safe API to ensure interrupt entry is as fast and as simple as possible.
|
|
||||||
More information (albeit Cortex-M specific) is provided on the following
|
|
||||||
link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */
|
|
||||||
portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
|
|
||||||
|
|
||||||
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
|
|
||||||
{
|
|
||||||
/* A task can only be prematurely removed from the Blocked state if
|
|
||||||
it is actually in the Blocked state. */
|
|
||||||
if( eTaskGetState( xTask ) == eBlocked )
|
|
||||||
{
|
|
||||||
xReturn = pdPASS;
|
|
||||||
|
|
||||||
/* Remove the reference to the task from the blocked list. A higher
|
|
||||||
priority interrupt won't touch the xStateListItem because of the
|
|
||||||
critical section. */
|
|
||||||
( void ) uxListRemove( &( pxTCB->xStateListItem ) );
|
|
||||||
|
|
||||||
/* Is the task waiting on an event also? If so remove it from
|
|
||||||
the event list too. */
|
|
||||||
if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL )
|
|
||||||
{
|
|
||||||
( void ) uxListRemove( &( pxTCB->xEventListItem ) );
|
|
||||||
|
|
||||||
/* This lets the task know it was forcibly removed from the
|
|
||||||
blocked state so it should not re-evaluate its block time and
|
|
||||||
then block again. */
|
|
||||||
pxTCB->ucDelayAborted = pdTRUE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mtCOVERAGE_TEST_MARKER();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Place the unblocked task into the appropriate ready list. */
|
|
||||||
prvAddTaskToReadyList( pxTCB );
|
|
||||||
|
|
||||||
if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )
|
|
||||||
{
|
|
||||||
if( pxHigherPriorityTaskWoken != NULL )
|
|
||||||
{
|
|
||||||
/* Pend the yield to be performed when the scheduler
|
|
||||||
is unsuspended. */
|
|
||||||
*pxHigherPriorityTaskWoken = pdTRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mtCOVERAGE_TEST_MARKER();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
xReturn = pdFAIL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
|
|
||||||
|
|
||||||
return xReturn;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
/*----------------------------------------------------------*/
|
|
||||||
|
|
||||||
#if ( INCLUDE_xTaskAbortDelay == 1 )
|
#if ( INCLUDE_xTaskAbortDelay == 1 )
|
||||||
|
|
||||||
BaseType_t xTaskAbortDelay( TaskHandle_t xTask )
|
BaseType_t xTaskAbortDelay( TaskHandle_t xTask )
|
||||||
|
|
Loading…
Reference in a new issue