Page 1 of 1

Compiler generate wrong binary file

Posted: Fri Oct 06, 2023 5:00 pm
by dalmat
Hello
I am new to the ESP32 platform, but I have a lot of experience with other microcontrollers. I use VisualStudio2022 and VisualGDB as IDE. I'm trying to make a binary file to download to the ESP32C3 using the OTA bootloader. I took a simple blink example, and it doesn't work. I looked at the resulting blink.bin file. It seems that the file I get is not a pure bin file. I opened the file with a text editor and I see some things related to the project. How do I get a clean bin file???
Below is a part of the bin file that contains some information about the project and directories.

0UL //IDF/components/freertos/FreeRTOS-Kernel/portable/riscv/port.c ***ERROR*** A stack overflow in task has been detected. [0;32mI (%lu) %s: Starting scheduler. [0m
_prvTaskExitError esp_task_wdt_init(&twdt_config) /IDF/components/freertos/FreeRTOS-Kernel/portable/port_common.c main res == pdTRUE //IDF/components/freertos/FreeRTOS-Kernel/portable/port_common.c pxTCBBufferTemp != NULL pxStackBufferTemp != NULL vApplicationGetIdleTaskMemory main_task esp_startup_start_app_common esp_intr_alloc(ETS_SYSTIMER_TARGET0_EDGE_INTR_SOURCE + cpuid, ESP_INTR_FLAG_IRAM | level, SysTickIsrHandler, &systimer_hal, NULL) /IDF/components/freertos/FreeRTOS-Kernel/portable/port_systick.c vPortSetupTimer pxQueueSetContainer //IDF/components/freertos/FreeRTOS-Kernel/queue.c pxQueueSetContainer->uxMessagesWaiting < pxQueueSetContainer->uxLength pxQueue uxQueueLength > ( UBaseType_t ) 0 pxStaticQueue != ((void *)0) !( ( pucQueueStorage != ((void *)0) ) && ( uxItemSize == 0 ) ) !( ( pucQueueStorage == ((void *)0) ) && ( uxItemSize != 0 ) ) xSize == sizeof( Queue_t ) ( uxItemSize == 0 ) || ( uxQueueLength == ( xQueueSizeInBytes / uxItemSize ) ) ( sizeof( Queue_t ) + xQueueSizeInBytes ) > xQueueSizeInBytes !( ( pvItemToQueue == ((void *)0) ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) !( ( xCopyPosition == ( ( BaseType_t ) 2 ) ) && ( pxQueue->uxLength != 1 ) ) !( ( xTaskGetSchedulerState() == ( ( BaseType_t ) 0 ) ) && ( xTicksToWait != 0 ) ) pxQueue->pcHead != ((void *)0) || pxQueue->u.xSemaphore.xMutexHolder == ((void *)0) || pxQueue->u.xSemaphore.xMutexHolder == xTaskGetCurrentTaskHandle() pxMutex pxQueue->uxItemSize == 0 !( ( pxQueue->pcHead == ((void *)0) ) && ( pxQueue->u.xSemaphore.xMutexHolder != ((void *)0) ) ) ( pxQueue ) !( ( ( pvBuffer ) == ((void *)0) ) && ( ( pxQueue )->uxItemSize != ( UBaseType_t ) 0U ) ) xInheritanceOccurred == ( ( BaseType_t ) 0 ) !( ( pvBuffer == ((void *)0) ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U )

Re: Compiler generate wrong binary file

Posted: Sat Oct 07, 2023 8:28 am
by ESP_Sprite
Those are bits of the text that get printed out when an assert hits; they're part of the binary. It's similar to if you would do a printf("Hello world!") in a project; if you inspect the binary you would find the plain-text string "Hello world!" in there. In other words, there's no such thing as a 'clean' bin file; the bin file you have is as clean as they get.

Re: Compiler generate wrong binary file

Posted: Sat Oct 07, 2023 12:22 pm
by MicroController
See also https://en.cppreference.com/w/c/error/assert :
assert outputs implementation-specific diagnostic information on the standard error output and calls abort(). The diagnostic information is required to include the text of expression, as well as the values of the predefined variable __func__ and of (since C99) the predefined macros __FILE__ and __LINE__.
That's why this information is included as constant string data in the binary.