Hi,
I am using the STM32 L1 Discovery Board (256KB).
I am trying to create two semaphores using the below code:
osSemaphoreDef(SEM1);
osSemaphoreDef(SEM2);
/* Create the semaphore used by the two threads */
// osSemaphore = osSemaphoreCreate(osSemaphore(SEM) , 1);
osSemaphoreProducer = osSemaphoreCreate(osSemaphore(SEM1) , 1);
osSemaphoreConsumer = osSemaphoreCreate(osSemaphore(SEM2) , 1);
osThreadDef(SEM1_Thread1, Sem_Thread1, osPriorityLow, 0, semtstSTACK_SIZE);
osThreadDef(SEM2_Thread2, Sem_Thread2, osPriorityIdle, 0, semtstSTACK_SIZE);
/* Start thread */
semThreadHandle1 = osThreadCreate(osThread(SEM1_Thread1), NULL);
semThreadHandle2 = osThreadCreate(osThread(SEM2_Thread2), NULL);
/* Start scheduler */
osKernelStart();
/* We should never get here as control is now taken by the scheduler */
for (;;);
But I am reaching the infinite for (;;) loop.
I debugged and found that the code is not able to create the IDLE Thread.
Below is the trace for the failure:
osKernelStart()
vTaskStartScheduler()
xTaskCreate( prvIdleTask, "IDLE", ...)
xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY;
Then I created just one semaphore and the code works perfectly fine.
So is there any stack / heap limitation for creating 2 or more semaphores ?
If there is any solution, then please do let me know.
Awaiting your reply.
Thanks,
Sunny