timesync i2c lock fixing

This commit is contained in:
Verkehrsrot committed 2019-07-24 12:37:02 +02:00
1 parent 1982959314
commit d35f1d97cd
3 files changed
+8 -10

No files matched your search

-3
View File
@@ -41,9 +41,6 @@ IDLE 1 0 ESP32 arduino scheduler -> runs wifi channel rotator
Low priority numbers denote low priority tasks.
Tasks using i2c bus all must have same priority, because using mutex semaphore
(irqhandler, bmeloop)
NOTE: Changing any timings will have impact on time accuracy of whole code.
So don't do it if you do not own a digital oscilloscope.
+7 -6
View File
@@ -65,6 +65,7 @@ void process_timesync_req(void *taskparameter) {
// wait until we are joined if we are not
while (!LMIC.devaddr) {
vTaskDelay(pdMS_TO_TICKS(3000));
}
// collect timestamp samples
for (uint8_t i = 0; i < TIME_SYNC_SAMPLES; i++) {
@@ -111,11 +112,11 @@ void process_timesync_req(void *taskparameter) {
// lock I2C bus and application irq to ensure accurate timing
mask_user_IRQ();
if (!I2C_MUTEX_LOCK()) {
ESP_LOGW(TAG, "[%0.3f] Timesync handshake error: i2c bus locking failed",
millis() / 1000.0);
goto finish; // failure
}
//if (!I2C_MUTEX_LOCK()) {
// ESP_LOGW(TAG, "[%0.3f] Timesync handshake error: i2c bus locking failed",
// millis() / 1000.0);
// goto finish; // failure
//}
// average time offset over all collected diffs
time_offset_ms /= TIME_SYNC_SAMPLES;
@@ -136,7 +137,7 @@ void process_timesync_req(void *taskparameter) {
finish:
// end of time critical section: release I2C bus and app irq
I2C_MUTEX_UNLOCK();
//I2C_MUTEX_UNLOCK();
unmask_user_IRQ();
timeSyncPending = false;