(xQueueGenericReceive)- assert failed! -Issues after upgrading to latest toolchain version.

Async_Awayt
Posts: 14
Joined: Sun Feb 19, 2017 8:04 pm

(xQueueGenericReceive)- assert failed! -Issues after upgrading to latest toolchain version.

Postby Async_Awayt » Fri Sep 08, 2017 5:20 am

Just upgraded to the latest toolchain version and am facing several issues.
For instance I am getting:

Code: Select all

(xQueueGenericReceive)- assert failed!
This is the code that I believe is causing the issue:

Code: Select all

...

static xQueueHandle DRDY_evt_queue = NULL;
static void IRAM_ATTR gpio_isr_handler(void *arg)
{
	gpio_num_t gpio_num = (gpio_num_t) arg;
	xQueueSendFromISR(DRDY_evt_queue, &gpio_num, NULL);
}

...

while(1)
	{

		if(xQueueReceive(DRDY_evt_queue, &io_num, portMAX_DELAY))
		{
			antal++;
			voltage = Measure(spi2);
			ave_voltage += (voltage - ave_voltage)/antal;
			printf("Volt = %.7f     Ave = %.7f\n", voltage, ave_voltage);
		}
	}
It used to work fine on the older version of the toolchain.
Does anybody know what changes I have to make to get it working on the new version?

permal
Posts: 384
Joined: Sun May 14, 2017 5:36 pm

Re: (xQueueGenericReceive)- assert failed! -Issues after upgrading to latest toolchain version.

Postby permal » Fri Sep 08, 2017 7:04 am

Check what the assert actually complains about.

Based on the code you provided your DRDY_evt_queue is NULL, but since you have left out parts it might be something else.

Async_Awayt
Posts: 14
Joined: Sun Feb 19, 2017 8:04 pm

Re: (xQueueGenericReceive)- assert failed! -Issues after upgrading to latest toolchain version.

Postby Async_Awayt » Fri Sep 08, 2017 10:57 am

permal wrote:Check what the assert actually complains about.
I am not sure how to check what the assert complains about. Do you mean by "core dumping"?
permal wrote:Based on the code you provided your DRDY_evt_queue is NULL, but since you have left out parts it might be something else.
Here are the lines associated with the interrupt:

Code: Select all

...
// Set IO direction for pins used
	gpio_set_direction(PIN_NUM_DRDY, GPIO_MODE_INPUT);
	gpio_set_intr_type(PIN_NUM_DRDY, GPIO_INTR_NEGEDGE);
// Create the queue that will handle the interrupt when DRDY goes low.
	DRDY_evt_queue = xQueueCreate(1, sizeof(uint32_t));
// Install the ISR service
	gpio_install_isr_service(0);
// Declare queue handle
	static xQueueHandle DRDY_evt_queue = NULL;
// Define isr handoing routine
	static void IRAM_ATTR gpio_isr_handler(void *arg)
	{
	   gpio_num_t gpio_num = (gpio_num_t) arg;
	   xQueueSendFromISR(DRDY_evt_queue, &gpio_num, NULL);
	}
...
// Read voltage from the device via SPI when DRDY goes low.
	while(1)
	{
		if(xQueueReceive(DRDY_evt_queue, &io_num, portMAX_DELAY))
   	   	{
     	    		antal++;
     	    		voltage = Measure(spi2);
         		ave_voltage += (voltage - ave_voltage)/antal;
         		printf("Volt = %.7f     Ave = %.7f\n", voltage, ave_voltage);
      		}
   	}
...

permal
Posts: 384
Joined: Sun May 14, 2017 5:36 pm

Re: (xQueueGenericReceive)- assert failed! -Issues after upgrading to latest toolchain version.

Postby permal » Fri Sep 08, 2017 11:03 am

Async_Awayt wrote:
permal wrote:Check what the assert actually complains about.
I am not sure how to check what the assert complains about. Do you mean by "core dumping"?
No, open the source for xQueueReceive/xQueueGenericReceive. It will show you what the asserts are checking.

Async_Awayt
Posts: 14
Joined: Sun Feb 19, 2017 8:04 pm

Re: (xQueueGenericReceive)- assert failed! -Issues after upgrading to latest toolchain version.

Postby Async_Awayt » Fri Sep 08, 2017 11:41 am

permal wrote:
Async_Awayt wrote:
permal wrote:Check what the assert actually complains about.
I am not sure how to check what the assert complains about. Do you mean by "core dumping"?
No, open the source for xQueueReceive/xQueueGenericReceive. It will show you what the asserts are checking.
The exception originates from the standard queue.c file. See the failed assert line below:

Code: Select all

BaseType_t xQueueGenericReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait, const BaseType_t xJustPeeking )									
{									
BaseType_t xEntryTimeSet = pdFALSE;									
TimeOut_t xTimeOut;									
int8_t *pcOriginalReadPosition;									
Queue_t * const pxQueue = ( Queue_t * ) xQueue;									
									
									
	configASSERT( pxQueue );	 // THIS IS WHERE THE EXECUTION STOPS!	//	
	
			
	configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );								
	#if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )								
	{								
		configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );							
	}								
	#endif

permal
Posts: 384
Joined: Sun May 14, 2017 5:36 pm

Re: (xQueueGenericReceive)- assert failed! -Issues after upgrading to latest toolchain version.

Postby permal » Fri Sep 08, 2017 11:46 am

Then your queue pointer is in all likelihood NULL. Recheck your code.

Async_Awayt
Posts: 14
Joined: Sun Feb 19, 2017 8:04 pm

Re: (xQueueGenericReceive)- assert failed! -Issues after upgrading to latest toolchain version.

Postby Async_Awayt » Fri Sep 08, 2017 1:54 pm

permal wrote:Then your queue pointer is in all likelihood NULL. Recheck your code.
You are right! I rearranged my code so it is all inside a single source file and now it working.
I used to have it divided into:
esp32_spi.h
esp32_spi.c
main.c
So I could reuse the SPI later.

Isn't it odd that the same code used to work fine before the toolchain upgrade?
Granted, I had to correct the SPI device and transaction configurations to correct the workarounds needed to get the old SPI driver to work correctly, but I made no changes to the rest of the code.. :?

Thanks!

Who is online

Users browsing this forum: Majestic-12 [Bot] and 260 guests