ATSAM3S4A FRTScore 8.2.3 + freertos-spi interface layer(service) (AtmelStudio 6.2)
Hello, i’m newbie in FreeRTOS. There are ATMEL Studio 6.2 , core FRTOS 8.2.3, board based on ATSAM3S4A (not dev board) . I create new project , then added frm ASF Wizard freertos-spi(UART,TWI) interface layer(service) , replace a core 7.3.0 (wich added automatically ) with FRTOS 8.2.3, and for the first i make up only 1 task wich using uxTaskGetNumberOfTasks, vTaskList and output info to UART0, it’s work fine, then i add SPI func. – freertosspiwritepacket ,it became crashing in xQueueGiveFromISR func. configASSERT( !( ( pxQueue->uxQueueType == queueQUEUEIS_MUTEX ) && ( pxQueue->pxMutexHolder != NULL ) ) );
FreeRTOSconfig: http://textuploader.com/5u50n
simpl. CODE : http://textuploader.com/5u5r6
STACK: http://postimg.org/image/o0znwes4v/
ATSAM3S4A FRTScore 8.2.3 + freertos-spi interface layer(service) (AtmelStudio 6.2)
This is due to a change in the way mutexes can be used. Try updating the ASF code so it creates a binary semaphore (xSemaphoreCreateBinary()) instead of a mutex (xSemaphoreCreateMutex()).
http://www.freertos.org/FreeRTOSSupportForumArchive/April2015/freertos8.2.1queue.cvsASF3.21.0freertosspimaster.c_788182fdj.html
ATSAM3S4A FRTScore 8.2.3 + freertos-spi interface layer(service) (AtmelStudio 6.2)
Ok , i change in 2 places to xSemaphoreCreateBinary(), but now func freertosspiwritepacket return ERRTIMEOUT(-3) in
~~~~
freertosperipheralcontrol.c
freertosobtainperipheralaccessmutex(freertosdmaeventcontrolt dma_event_control,portTickType *max_block_time_ticks)
{status_code_t return_value = STATUS_OK;
xTimeOutType time_out_definition;
if (dma_event_control->peripheral_access_mutex != NULL) {
/ Remember the time on entry. /
vTaskSetTimeOutState(&time_out_definition);
/ Wait to get exclusive access to the peripheral. /
if(xSemaphoreTake(dma_event_control->peripheral_access_mutex,maxblocktimeticks) == pdFAIL) {
returnvalue = ERRTIMEOUT; <– COMING HERE
} else {/* Adjust the time out value in case the task had to block to wait for the semaphore. */
if (xTaskCheckForTimeOut(&timeoutdefinition,maxblocktimeticks) == pdTRUE) {*max_block_time_ticks = 0;}
}
}return return_value;}
~~~~
The same project with FREERTOS 7.3.0 Library Work fine – return Status_OK(0)
ATSAM3S4A FRTScore 8.2.3 + freertos-spi interface layer(service) (AtmelStudio 6.2)
If the 7.3.0 code works with the binary semaphore, but the 8.2.3 doesn’t
then I will need to dig a little deeper…
ATSAM3S4A FRTScore 8.2.3 + freertos-spi interface layer(service) (AtmelStudio 6.2)
Tryed to use version 8.1.2 with default ASF -ALL OK , So I will use it, thanks for fast support!