This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Application keep restarting after scheduler is not firing more queue events

Hi there devs,

### I UPDATED and reformulate the whole question after some finds ####

I am having an issue with my application which is really hard to replicate it could happens after 12 hours, 8 days, 1 month, 30s... 

My software Diagram:

After some time when the unknown issues happens, the queue get filled then my module resets because the scheduler is out of memory to queue more events

The symtom looks like app_sched_execute() is not being called in the main loop, it makes me believe my code gets stuck on a loop somewhere.

I was digging on my code looking for loops, then I have only 2 loops

1) I made a low Power Delay where I use a loop and sd_app_evt_wait() 

devzone.nordicsemi.com/.../creating-my-own-low-power-delay-using-app_timer

//source FILE

bool LowPowerDelay::delay;

LowPowerDelay::LowPowerDelay()
{
	app_timer_create(&LPDelay, APP_TIMER_MODE_SINGLE_SHOT, &LowPowerDelay::DelayCb);
}

void LowPowerDelay::DelayCb(void *p_context){	
	LowPowerDelay::delay = true;
}

void LowPowerDelay::Delay(uint32_t ms)
{
	LowPowerDelay::delay = false;
	app_timer_start(LPDelay, APP_TIMER_TICKS(ms), NULL);
	
	while (!LowPowerDelay::delay){
			APP_ERROR_CHECK(sd_app_evt_wait());
	}
}


//HEADER

ifndef _LOWPOWERDELAY
#define _LOWPOWERDELAY
#include "Headers.h"
#include "Timer.h"

APP_TIMER_DEF(LPDelay);

class LowPowerDelay
{
	public:
	LowPowerDelay();
	
		static LowPowerDelay * Instance()
		{
			static LowPowerDelay instance;
			return &instance;
		}	
	
	static void DelayCb(void *p_context);
	void Delay(uint32_t ms);
		
	static bool delay;
};
#endif

I used J-Scope to verified my code exits from this delay loop after I used RTT as well, then the issue is not here.

2) When perform TWI Write and Reads I have another loop where I wait for the transfer ends

void Twi::WaitForTransfer()
{
	while (Twi::GetInstance()->transferComplete)
	{	
	if(NRF_LOG_PROCESS() == false){     
			APP_ERROR_CHECK(sd_app_evt_wait());
		}
	}
}

now I am aiming the root of my issue could be the TWI loop, but I cant no replicate it, because randomly happens, for example after my device working after 26 hours it is ok at the moment

3) when the issue happens and the queue gets totally filled it  generate an error out of memory, app_error_fault_handler is called then calling  NVIC_SystemReset() after this software reset, the module restarts then the queue gets filled since the beginning generating another software reset and keep resetting because the queue get filled again, and again (please look my RTT log below in the replies)

software reset wont solves it

hardware reset solves it temporally until this unknown behavior happens again, and again

When the issue happens, the neither BLE or TWI sensor works because both depend on the scheduler for my application

Possible causes:

a) TWI hangs and wont fire a handler event with TX or RX (TWI IRQs disabled because the frequency initialization/uninitialization?)

b) External Module unresponsive (?)

Details:

Queue Size 80

SCHED_MAX_EVENT_DATA_SIZE = BLE_STACK_EVT_MSG_BUF_SIZE + 247 (MTU)

SDK 13, nRF52832

Regards,

Meli

  • Below log using RTT where I call app_sched_event_put() every 1 second

    The output starts with ModuleStarts, when I initialize my module,

    QueueSize the Queue size just after calling app_sched_event_put

    QueueEvent when the queue is proceeded 

    Then when I start receive errors at app_sched_event_put

    The messages are 

    app_sched_queue_utilization_get(), Error code from app_sched_event_put(), and timelife in seconds from my app

     it shows the queue utilization after some time starts to increase and return error until my device restarts, how can I solve it?

    # SEGGER J-Link RTT Viewer V6.44h Terminal Log File
    # Compiled: 17:39:12 on May  3 2019
    # Logging started @ 14 Jul 2020 15:36:44
    00> ModuleStarts!!
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> QueueSize[3] 
    00> QueueSize[4] 
    00> QueueSize[5] 
    00> QueueSize[6] 
    00> QueueSize[7] 
    00> QueueSize[8] 
    00> QueueSize[9] 
    00> QueueSize[10] 
    00> QueueSize[11] 
    00> QueueSize[12] 
    00> QueueSize[13] 
    00> QueueSize[14] 
    00> QueueSize[15] 
    00> QueueSize[16] 
    00> QueueSize[17] 
    00> QueueSize[18] 
    00> QueueSize[19] 
    00> QueueSize[20] 
    00> QueueSize[21] 
    00> QueueSize[22] 
    00> QueueSize[23] 
    00> QueueSize[24] 
    00> QueueSize[25] 
    00> QueueSize[26] 
    00> QueueSize[27] 
    00> QueueSize[28] 
    00> QueueSize[29] 
    00> QueueSize[30] 
    00> QueueSize[31] 
    00> QueueSize[32] 
    00> QueueSize[33] 
    00> QueueSize[34] 
    00> QueueSize[35] 
    00> QueueSize[36] 
    00> QueueSize[37] 
    00> QueueSize[38] 
    00> QueueSize[39] 
    00> QueueSize[40] 
    00> QueueSize[41] 
    00> QueueSize[42] 
    00> QueueSize[43] 
    00> QueueSize[44] 
    00> QueueSize[45] 
    00> QueueSize[46] 
    00> QueueSize[47] 
    00> QueueSize[48] 
    00> QueueSize[49] 
    00> QueueSize[50] 
    00> QueueSize[51] 
    00> QueueSize[52] 
    00> QueueSize[53] 
    00> QueueSize[54] 
    00> QueueSize[55] 
    00> QueueSize[56] 
    00> QueueSize[57] 
    00> QueueSize[58] 
    00> QueueSize[59] 
    00> QueueSize[60] 
    00> QueueSize[61] 
    00> QueueSize[62] 
    00> QueueSize[63] 
    00> QueueSize[64] 
    00> QueueSize[65] 
    00> QueueSize[66] 
    00> QueueSize[67] 
    00> QueueSize[68] 
    00> QueueSize[69] 
    00> QueueSize[70] 
    00> QueueSize[71] 
    00> QueueSize[72] 
    00> QueueSize[73] 
    00> QueueSize[74] 
    00> QueueSize[75] 
    00> QueueSize[76] 
    00> QueueSize[77] 
    00> QueueSize[78] 
    00> QueueSize[79] 
    00> QueueSize[80] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[176] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[177]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[178] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[179] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[180] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[181] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[182]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[183]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[184] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[185]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[186] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[187]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[188]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[189]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[190]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[191]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[192]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[193]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[194]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[195]
    00> ModuleStarts!!		/// MODULE RESTARTED
    00> QueueSize[1] 
    00> QueueSize[2] 
    00> QueueSize[3] 
    00> QueueSize[4] 
    00> QueueSize[5] 
    00> QueueSize[6] 
    00> QueueSize[7] 
    00> QueueSize[8] 
    00> QueueSize[9] 
    00> QueueSize[10] 
    00> QueueSize[11] 
    00> QueueSize[12] 
    00> QueueSize[13] 
    00> QueueSize[14] 
    00> QueueSize[15] 
    00> QueueSize[16] 
    00> QueueSize[17] 
    00> QueueSize[18] 
    00> QueueSize[19] 
    00> QueueSize[20] 
    00> QueueSize[21] 
    00> QueueSize[22] 
    00> QueueSize[23] 
    00> QueueSize[24] 
    00> QueueSize[25] 
    00> QueueSize[26] 
    00> QueueSize[27] 
    00> QueueSize[28] 
    00> QueueSize[29] 
    00> QueueSize[30] 
    00> QueueSize[31] 
    00> QueueSize[32] 
    00> QueueSize[33] 
    00> QueueSize[34] 
    00> QueueSize[35] 
    00> QueueSize[36] 
    00> QueueSize[37] 
    00> QueueSize[38] 
    00> QueueSize[39] 
    00> QueueSize[40] 
    00> QueueSize[41] 
    00> QueueSize[42] 
    00> QueueSize[43] 
    00> QueueSize[44] 
    00> QueueSize[45] 
    00> QueueSize[46] 
    00> QueueSize[47] 
    00> QueueSize[48] 
    00> QueueSize[49] 
    00> QueueSize[50] 
    00> QueueSize[51] 
    00> QueueSize[52] 
    00> QueueSize[53] 
    00> QueueSize[54] 
    00> QueueSize[55] 
    00> QueueSize[56] 
    00> QueueSize[57] 
    00> QueueSize[58] 
    00> QueueSize[59] 
    00> QueueSize[60] 
    00> QueueSize[62] 
    00> QueueSize[63] 
    00> QueueSize[64] 
    00> QueueSize[65] 
    00> QueueSize[66] 
    00> QueueSize[67] 
    00> QueueSize[68] 
    00> QueueSize[69] 
    00> QueueSize[70] 
    00> QueueSize[71] 
    00> QueueSize[72] 
    00> QueueSize[73] 
    00> QueueSize[74] 
    00> QueueSize[75] 
    00> QueueSize[76] 
    00> QueueSize[77] 
    00> QueueSize[78] 
    00> QueueSize[79] 
    00> QueueSize[80] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[81]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[82]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[83] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[84]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[85] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[86] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[87]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[88]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[89]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[90]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[91]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[92]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[93]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[94]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[95]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[96]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[97]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[98]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[99]
    00> ModuleStarts!!		/// MODULE RESTARTED
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[1] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> 	QueueEvent!! 
    00> QueueSize[2] 
    00> QueueSize[3] 
    00> QueueSize[4] 
    00> QueueSize[5] 
    00> QueueSize[6] 
    00> QueueSize[7] 
    00> QueueSize[8] 
    00> QueueSize[9] 
    00> QueueSize[10] 
    00> QueueSize[11] 
    00> QueueSize[12] 
    00> QueueSize[13] 
    00> QueueSize[14] 
    00> QueueSize[15] 
    00> QueueSize[16] 
    00> QueueSize[17] 
    00> QueueSize[18] 
    00> QueueSize[19] 
    00> QueueSize[20] 
    00> QueueSize[21] 
    00> QueueSize[22] 
    00> QueueSize[23] 
    00> QueueSize[24] 
    00> QueueSize[25] 
    00> QueueSize[26] 
    00> QueueSize[27] 
    00> QueueSize[28] 
    00> QueueSize[29] 
    00> QueueSize[30] 
    00> QueueSize[31] 
    00> QueueSize[32] 
    00> QueueSize[33] 
    00> QueueSize[34] 
    00> QueueSize[35] 
    00> QueueSize[36] 
    00> QueueSize[37] 
    00> QueueSize[38] 
    00> QueueSize[39] 
    00> QueueSize[40] 
    00> QueueSize[41] 
    00> QueueSize[42] 
    00> QueueSize[43] 
    00> QueueSize[44] 
    00> QueueSize[45] 
    00> QueueSize[46] 
    00> QueueSize[47] 
    00> QueueSize[48] 
    00> QueueSize[49] 
    00> QueueSize[50] 
    00> QueueSize[51] 
    00> QueueSize[52] 
    00> QueueSize[53] 
    00> QueueSize[54] 
    00> QueueSize[55] 
    00> QueueSize[56] 
    00> QueueSize[57] 
    00> QueueSize[58] 
    00> QueueSize[59] 
    00> QueueSize[60] 
    00> QueueSize[61] 
    00> QueueSize[62] 
    00> QueueSize[63] 
    00> QueueSize[64] 
    00> QueueSize[65] 
    00> QueueSize[66] 
    00> QueueSize[67] 
    00> QueueSize[68] 
    00> QueueSize[69] 
    00> QueueSize[70] 
    00> QueueSize[71] 
    00> QueueSize[72] 
    00> QueueSize[73] 
    00> QueueSize[74] 
    00> QueueSize[75] 
    00> QueueSize[76] 
    00> QueueSize[77] 
    00> QueueSize[78] 
    00> QueueSize[79] 
    00> QueueSize[80] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[141] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[142]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[143] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[144] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[145]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[146] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[147] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[148]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[149]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[150] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[151]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[152]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[153] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[154] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[155] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[156] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[157] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[158] 
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[159]
    00> QueueSize[80] | app_sched_event_put ERROR  [4] | Lifetime[160] 
    00> ModuleStarts!!		/// MODULE RESTARTED

    what can cause that the scheduler event/queue event wont fire anymore?

  • MeliodasD said:
    what can cause that the scheduler event/queue event wont fire anymore?
    •  Deadlock caused by a race condition with a dependency of a flag
    • corrupt stack
    • driver being stuck and not releasing loop

    It is hard to say at this point. What is the state of the context the CPU is executing when the scheduler seems stuck. Can you try increasing the scheduler queue size? 

  • It is at main context at the moment scheduler gets stuck

    I intentionally cut the SCL line to simulate an unresponsive TWI sensor and I had the same behavior or almost it looks like the same.

    Then, I added a timeout to the loop where I wait for TWi transfers in case the sensor gets unresponsive to exit from that infinite loop. At the moment  it seems working. More later

  • Hey Meliodas, I've taken your case while Susheel is on vacation.

    Why do you use TWI in polling mode when it will trigger an event when it's done anyways?

  • Hi I am not using TWI pooling, I just wait for a NRF_DRV_TWI_EVT_DONE or any other event to exit from the loop before call the next TWI write/read. recently I added a timeout when entering in the loop, which I am not sure if it is working yet because the issue I am having is pretty hard to replicate

Related