mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-03-16 08:29:15 +01:00
LP-536 Timeout parameter for PIOS_COM_ReceiveBuffer() should be in milliseconds. No need to convert to ticks.
Changed the int xDelay to a define and put the define next to the other major delay in the GPS task. Increased the time we wait for PIOS_COM_ReceiveBuffer from 5 to 20 ms.
This commit is contained in:
parent
6f3fefd650
commit
a6aeb11a56
@ -105,7 +105,27 @@ void updateGpsSettings(__attribute__((unused)) UAVObjEvent *ev);
|
|||||||
// the new location with Set = true.
|
// the new location with Set = true.
|
||||||
#define GPS_HOMELOCATION_SET_DELAY 5000
|
#define GPS_HOMELOCATION_SET_DELAY 5000
|
||||||
|
|
||||||
#define GPS_LOOP_DELAY_MS 6
|
// PIOS serial port receive buffer for GPS is set to 32 bytes for the minimal and 128 bytes for the full version.
|
||||||
|
// GPS_READ_BUFFER is defined a few lines below in this file.
|
||||||
|
//
|
||||||
|
// 57600 bps = 5760 bytes per second
|
||||||
|
// For 32 bytes buffer: this is a maximum of 5760/32 = 180 buffers per second
|
||||||
|
// that is 1/180 = 0.0056 seconds per packet
|
||||||
|
// We must never wait more than 5ms since packet was last drained or it may overflow
|
||||||
|
// For 128 bytes buffer: this is a maximum of 5760/128 = 45 buffers per second
|
||||||
|
// that is 1/45 = 0.022 seconds per packet
|
||||||
|
// We must never wait more than 22ms since packet was last drained or it may overflow
|
||||||
|
|
||||||
|
// There are two delays in play for the GPS task:
|
||||||
|
// - GPS_BLOCK_ON_NO_DATA_MS is the time to block while waiting to receive serial data from the GPS
|
||||||
|
// - GPS_LOOP_DELAY_MS is used for a context switch initiated by calling vTaskDelayUntil() to let other tasks run
|
||||||
|
//
|
||||||
|
// The delayMs time is not that critical. It should not be too high so that maintenance actions within this task
|
||||||
|
// are run often enough.
|
||||||
|
// GPS_LOOP_DELAY_MS on the other hand, should be less then 5.55 ms. A value set too high will cause data to be dropped.
|
||||||
|
|
||||||
|
#define GPS_LOOP_DELAY_MS 5
|
||||||
|
#define GPS_BLOCK_ON_NO_DATA_MS 20
|
||||||
|
|
||||||
#ifdef PIOS_GPS_SETS_HOMELOCATION
|
#ifdef PIOS_GPS_SETS_HOMELOCATION
|
||||||
// Unfortunately need a good size stack for the WMM calculation
|
// Unfortunately need a good size stack for the WMM calculation
|
||||||
@ -116,10 +136,10 @@ void updateGpsSettings(__attribute__((unused)) UAVObjEvent *ev);
|
|||||||
|
|
||||||
#ifdef PIOS_INCLUDE_GPS_NMEA_PARSER
|
#ifdef PIOS_INCLUDE_GPS_NMEA_PARSER
|
||||||
#define STACK_SIZE_BYTES 580 // NMEA
|
#define STACK_SIZE_BYTES 580 // NMEA
|
||||||
#else
|
#else // PIOS_INCLUDE_GPS_NMEA_PARSER
|
||||||
#define STACK_SIZE_BYTES 440 // UBX
|
#define STACK_SIZE_BYTES 440 // UBX
|
||||||
#endif // PIOS_INCLUDE_GPS_NMEA_PARSER
|
#endif // PIOS_INCLUDE_GPS_NMEA_PARSER
|
||||||
#else
|
#else // PIOS_GPS_MINIMAL
|
||||||
#define STACK_SIZE_BYTES 650
|
#define STACK_SIZE_BYTES 650
|
||||||
#endif // PIOS_GPS_MINIMAL
|
#endif // PIOS_GPS_MINIMAL
|
||||||
#endif // PIOS_GPS_SETS_HOMELOCATION
|
#endif // PIOS_GPS_SETS_HOMELOCATION
|
||||||
@ -284,13 +304,7 @@ MODULE_INITCALL(GPSInitialize, GPSStart);
|
|||||||
|
|
||||||
static void gpsTask(__attribute__((unused)) void *parameters)
|
static void gpsTask(__attribute__((unused)) void *parameters)
|
||||||
{
|
{
|
||||||
// 57600 baud = 5760 bytes per second
|
|
||||||
// PIOS serial buffers appear to be 32 bytes long
|
|
||||||
// that is a maximum of 5760/32 = 180 buffers per second
|
|
||||||
// that is 1/180 = 0.005555556 seconds per packet
|
|
||||||
// we must never wait more than 5ms since packet was last drained or it may overflow
|
|
||||||
// 100ms is way slow too, considering we do everything possible to make the sensor data as contemporary as possible
|
|
||||||
portTickType xDelay = 5 / portTICK_RATE_MS;
|
|
||||||
uint32_t timeNowMs = xTaskGetTickCount() * portTICK_RATE_MS;
|
uint32_t timeNowMs = xTaskGetTickCount() * portTICK_RATE_MS;
|
||||||
|
|
||||||
#ifdef PIOS_GPS_SETS_HOMELOCATION
|
#ifdef PIOS_GPS_SETS_HOMELOCATION
|
||||||
@ -353,8 +367,8 @@ static void gpsTask(__attribute__((unused)) void *parameters)
|
|||||||
|
|
||||||
uint16_t cnt;
|
uint16_t cnt;
|
||||||
int res;
|
int res;
|
||||||
// This blocks the task until there is something on the buffer (or 100ms? passes)
|
// This blocks the task until there is something in the buffer (or GPS_BLOCK_ON_NO_DATA_MS passes)
|
||||||
cnt = PIOS_COM_ReceiveBuffer(gpsPort, c, GPS_READ_BUFFER, xDelay);
|
cnt = PIOS_COM_ReceiveBuffer(gpsPort, c, GPS_READ_BUFFER, GPS_BLOCK_ON_NO_DATA_MS);
|
||||||
res = PARSER_INCOMPLETE;
|
res = PARSER_INCOMPLETE;
|
||||||
if (cnt > 0) {
|
if (cnt > 0) {
|
||||||
PERF_TIMED_SECTION_START(counterParse);
|
PERF_TIMED_SECTION_START(counterParse);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user