Hello!
Thank you very much for your support!
Yes, strarting using your port files in another project for MIPS32
Previous problem I have solved by sbss section initializzation
Now I have to continue launch FreeRTOS based project which contain already FreeRTOS porting on MIPS64 by another person
As result I have only one task launch from several and in practice I see that after one task lauching happens the following loop:
/* Is there room on the queue now? The running task must be the
highest priority task wanting to access the queue. If the head item
in the queue is to be overwritten then it does not matter if the
queue is full. */
if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) )
ffffffffb5015c60: dfc20008 ld $2,8($30)
ffffffffb5015c64: dc430070 ld $3,112($2)
ffffffffb5015c68: dfc20008 ld $2,8($30)
ffffffffb5015c6c: 0040a025 or $20,$2,$0
ffffffffb5015c70: de820078 ld $2,120($20)
ffffffffb5015c74: 0062102b sltu $2,$3,$2
ffffffffb5015c78: 14400007 bnez $2,ffffffffb5015c98 <xQueueGenericSend+0x194>
ffffffffb5015c7c: 00000000 sll $0,$0,0x0
ffffffffb5015c80: 00000000 sll $0,$0,0x0
ffffffffb5015c84: dfc30048 ld $3,72($30)
ffffffffb5015c88: 24020002 addiu $2,$0,2
ffffffffb5015c8c: 1462002e bne $3,$2,ffffffffb5015d48 <xQueueGenericSend+0x244>
ffffffffb5015c90: 00000000 sll $0,$0,0x0
ffffffffb5015c94: 00000000 sll $0,$0,0x0
{
traceQUEUE_SEND( pxQueue );
xYieldRequired = prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );
ffffffffb5015c98: dfc60048 ld $6,72($30)
ffffffffb5015c9c: dfc50038 ld $5,56($30)
ffffffffb5015ca0: dfc40008 ld $4,8($30)
ffffffffb5015ca4: 0d405d18 jal ffffffffb5017460 <prvCopyDataToQueue>
ffffffffb5015ca8: 00000000 sll $0,$0,0x0
ffffffffb5015cac: 00000000 sll $0,$0,0x0
ffffffffb5015cb0: ffc20010 sd $2,16($30)
}
#else /* configUSE_QUEUE_SETS */
{
/* If there was a task waiting for data to arrive on the
queue then unblock it now. */
if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
ffffffffb5015cb4: dfc20008 ld $2,8($30)
ffffffffb5015cb8: 0040a025 or $20,$2,$0
ffffffffb5015cbc: de820048 ld $2,72($20)
ffffffffb5015cc0: 10400012 beqz $2,ffffffffb5015d0c <xQueueGenericSend+0x208>
ffffffffb5015cc4: 00000000 sll $0,$0,0x0
ffffffffb5015cc8: 00000000 sll $0,$0,0x0
{
if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
ffffffffb5015ccc: dfc20008 ld $2,8($30)
ffffffffb5015cd0: 64420048 daddiu $2,$2,72
ffffffffb5015cd4: 00402025 or $4,$2,$0
ffffffffb5015cd8: 0d404ea0 jal ffffffffb5013a80 <xTaskRemoveFromEventList>
ffffffffb5015cdc: 00000000 sll $0,$0,0x0
ffffffffb5015ce0: 00000000 sll $0,$0,0x0
ffffffffb5015ce4: 10400011 beqz $2,ffffffffb5015d2c <xQueueGenericSend+0x228>
ffffffffb5015ce8: 00000000 sll $0,$0,0x0
ffffffffb5015cec: 00000000 sll $0,$0,0x0
{
/* The unblocked task has a priority higher than
our own so yield immediately. Yes it is ok to do
this from within the critical section - the kernel
takes care of that. */
queueYIELD_IF_USING_PREEMPTION();
ffffffffb5015cf0: 24040001 addiu $4,$0,1
ffffffffb5015cf4: 0d4046a5 jal ffffffffb5011a94 <mips_eic0_seticureq>
ffffffffb5015cf8: 00000000 sll $0,$0,0x0
ffffffffb5015cfc: 00000000 sll $0,$0,0x0
ffffffffb5015d00: 1000000a beqz $0,ffffffffb5015d2c <xQueueGenericSend+0x228>
ffffffffb5015d04: 00000000 sll $0,$0,0x0
ffffffffb5015d08: 00000000 sll $0,$0,0x0
else
{
mtCOVERAGE_TEST_MARKER();
}
}
else if( xYieldRequired != pdFALSE )
ffffffffb5015d0c: dfc20010 ld $2,16($30)
ffffffffb5015d10: 10400006 beqz $2,ffffffffb5015d2c <xQueueGenericSend+0x228>
ffffffffb5015d14: 00000000 sll $0,$0,0x0
ffffffffb5015d18: 00000000 sll $0,$0,0x0
{
/* This path is a special case that will only get
executed if the task was holding multiple mutexes and
the mutexes were given back in an order that is
different to that in which they were taken. */
queueYIELD_IF_USING_PREEMPTION();
ffffffffb5015d1c: 24040001 addiu $4,$0,1
ffffffffb5015d20: 0d4046a5 jal ffffffffb5011a94 <mips_eic0_seticureq>
ffffffffb5015d24: 00000000 sll $0,$0,0x0
ffffffffb5015d28: 00000000 sll $0,$0,0x0
mtCOVERAGE_TEST_MARKER();
}
}
#endif /* configUSE_QUEUE_SETS */
taskEXIT_CRITICAL();
ffffffffb5015d2c: 0d40514a jal ffffffffb5014528 <vTaskExitCritical>
ffffffffb5015d30: 00000000 sll $0,$0,0x0
ffffffffb5015d34: 00000000 sll $0,$0,0x0
return pdPASS;
ffffffffb5015d38: 24020001 addiu $2,$0,1
ffffffffb5015d3c: 10000074 beqz $0,ffffffffb5015f10 <xQueueGenericSend+0x40c>
ffffffffb5015d40: 00000000 sll $0,$0,0x0
ffffffffb5015d44: 00000000 sll $0,$0,0x0
}
else
{
if( xTicksToWait == ( TickType_t ) 0 )
ffffffffb5015d48: 8fc20040 lw $2,64($30)
ffffffffb5015d4c: 14400009 bnez $2,ffffffffb5015d74 <xQueueGenericSend+0x270>
ffffffffb5015d50: 00000000 sll $0,$0,0x0
ffffffffb5015d54: 00000000 sll $0,$0,0x0
{
/* The queue was full and no block time is specified (or
the block time has expired) so leave now. */
taskEXIT_CRITICAL();
.....
....
...
#if( configUSE_TASK_NOTIFICATIONS == 1 )
uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait )
{
ffffffffb50145f4: 67bdffd0 daddiu $29,$29,-48
ffffffffb50145f8: ffbf0028 sd $31,40($29)
ffffffffb50145fc: ffbe0020 sd $30,32($29)
ffffffffb5014600: 03a0f025 or $30,$29,$0
ffffffffb5014604: ffc40010 sd $4,16($30)
ffffffffb5014608: 00a01025 or $2,$5,$0
ffffffffb501460c: 00021000 sll $2,$2,0x0
ffffffffb5014610: afc20018 sw $2,24($30)
uint32_t ulReturn;
taskENTER_CRITICAL();
ffffffffb5014614: 0d405136 jal ffffffffb50144d8 <vTaskEnterCritical>
ffffffffb5014618: 00000000 sll $0,$0,0x0
ffffffffb501461c: 00000000 sll $0,$0,0x0
{
/* Only block if the notification count is not already non-zero. */
if( pxCurrentTCB->ulNotifiedValue == 0UL )
ffffffffb5014620: df828040 ld $2,-32704($28)
ffffffffb5014624: 0040a025 or $20,$2,$0
ffffffffb5014628: 8e820080 lw $2,128($20)
ffffffffb501462c: 14400013 bnez $2,ffffffffb501467c <ulTaskNotifyTake+0x88>
ffffffffb5014630: 00000000 sll $0,$0,0x0
ffffffffb5014634: 00000000 sll $0,$0,0x0
{
/* Mark this task as waiting for a notification. */
pxCurrentTCB->ucNotifyState = taskWAITING_NOTIFICATION;
ffffffffb5014638: df828040 ld $2,-32704($28)
ffffffffb501463c: 24030001 addiu $3,$0,1
ffffffffb5014640: a0430084 sb $3,132($2)
if( xTicksToWait > ( TickType_t ) 0 )
ffffffffb5014644: 8fc20018 lw $2,24($30)
ffffffffb5014648: 1040000c beqz $2,ffffffffb501467c <ulTaskNotifyTake+0x88>
ffffffffb501464c: 00000000 sll $0,$0,0x0
ffffffffb5014650: 00000000 sll $0,$0,0x0
{
prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE );
ffffffffb5014654: 8fc20018 lw $2,24($30)
ffffffffb5014658: 24050001 addiu $5,$0,1
ffffffffb501465c: 00402025 or $4,$2,$0
ffffffffb5014660: 0d40548e jal ffffffffb5015238 <prvAddCurrentTaskToDelayedList>
ffffffffb5014664: 00000000 sll $0,$0,0x0
ffffffffb5014668: 00000000 sll $0,$0,0x0
/* All ports are written to allow a yield in a critical
section (some will yield immediately, others wait until the
critical section exits) - but it is not something that
application code should ever do. */
portYIELD_WITHIN_API();
ffffffffb501466c: 24040001 addiu $4,$0,1
ffffffffb5014670: 0d4046a5 jal ffffffffb5011a94 <mips_eic0_seticureq>
ffffffffb5014674: 00000000 sll $0,$0,0x0
ffffffffb5014678: 00000000 sll $0,$0,0x0
else
{
mtCOVERAGE_TEST_MARKER();
}
}
taskEXIT_CRITICAL();
ffffffffb501467c: 0d40514a jal ffffffffb5014528 <vTaskExitCritical>
ffffffffb5014680: 00000000 sll $0,$0,0x0
ffffffffb5014684: 00000000 sll $0,$0,0x0
That project is here:
I can lauch only “FillTask” task, receive(CheckTask) task doesnt execute
Can somebody check the proting and prompt the reason of context switching absence?, please