CubeIDE компилятор выкидывает функции из листинга

Почему “кубовый” компилястр выкидывает функции из листинга?
attribute((used)) пробовал - найн!
volatile глобальную в функцию вставлял - нихьт!
оптимизация -O0 - не канает!
Чо делать то?

(функции работают в пробном проекте на протеусе и на реальном железе.
единственное, что сделал - вынес в отдельные .c и .h файлы для удобства.
функций 3 штуки, одинаковые, одна работает а две выкидывает компилятор.
я - в - ступоре)

Пздц ты как юнец. Где код?

Потому, что вы их не используете.

Использую!
Специально прописывал туда всякие attribute и прочие фишки по совету программистов из С форумов = ноль эффэкту!

Если вы их используете, то их код обязан быть в листинге.

Я до вчерашнего вечера то-же так думал и даже был в этом уверен… но…
А можно каким-либо образом “сломать” куб? Я там из настроек интерфейса много чего поменял, но только цвета, подсветки всякие. Настройки компилятора особо не менял, хотя пробовал разные версии и разные опции. Такое ощущение - что компилятор их просто не видит. Но если специалино сделать ошибку - ругается. Это я так сколько “мудохаться” буду? Написал - а в коде нету…

Его нет пока, есть только кусочки.
Попытаюсь объяснить: - нужно продлить фронт сигнала на 10-40 мс. Три одинаковых функции обернутые в конечный автомат вида void(foo)int , дергают пины через HAL. Ну все там просто. Запихал их в main loop для проверки таймингов осциллом = а там БОЛТ. Что я зделал не правильно то???

Надо еще посмотреть на разных форумах решение данной проблемы. Вы пишите, у кого есть мысли какие. Я то-же буду искать решение.

попробовать

void inline __attribute__((always_inline)) 

Не знаю как другие - лично я не видя код что-либо советовать не могу, так как не понял проблемы. Не может компилятор выкидывать ИСПОЛЬЗУЕМЫЕ участки кода. Просто не может. Ни разу такого не было - ни на AVR, ни на PIC, и на STM тоже !

я б еще вот так попробовал

__attribute__((unused)) 

но обычно это для переменных, не знаю как это на функции влияет

Пришлите два кода - тот, который вы скармливаете компилятору и дизассемлер

Это можно будет узнать после того, как вы принесете пациента. Тяжело вскрытием заниматься, когда трупа нет

А потом опять будет жаловаться, что его аксакалы форума троллят.
И закончится все снова баном.

Если компилятор не шибко древний, то можно

[[maybe_unused]]

попробовать. Можно перед функцией ставить и перед переменной. Везде, короче, включая enum и прочие typedef.

Но я думаю, у ТС проблема не в этом. У него код работает, функции используются, а функций этих в листинге нет. Мистика чистой воды.

#include <stdio.h>

static void hello([[maybe_unused]] const char *name)
{
    puts("Hello, world!");
}

[[maybe_unused]]
static void debug([[maybe_unused]] int level)
{
    // Пока ничего не делает.
}

int main(void)
{
    hello("world");
    return 0;
}

Больше того:

Как можно утверждать, что что-то выкидывается компилятором, если кода нет?

Компилятор его выкинул. Теперь кода нет, остались только кусочки по словам ТС. Что ж тут непонятного то ?! :0)

вот тут 100%
У ТС проблема в том, что он, … , очень переживает что про него другие скажут. И потому не показывает свой код, типа стесняется

А как вы вообще определили факт того, что компилятор что-то там выкинул? Вы листинг-то откуда взяли? Попробуйте сделать нормальный честный листинг командой objdump -S my_firmware.o (или .elf) или что там у вас.


Hse_16_low.elf:     file format elf32-littlearm

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .isr_vector   0000010c  08000000  08000000  00010000  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  1 .text         00001574  0800010c  0800010c  0001010c  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .rodata       00000028  08001680  08001680  00011680  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  3 .ARM.extab    00000000  080016a8  080016a8  0002000c  2**0
                  CONTENTS
  4 .ARM          00000000  080016a8  080016a8  0002000c  2**0
                  CONTENTS
  5 .preinit_array 00000000  080016a8  080016a8  0002000c  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  6 .init_array   00000004  080016a8  080016a8  000116a8  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  7 .fini_array   00000004  080016ac  080016ac  000116ac  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  8 .data         0000000c  20000000  080016b0  00020000  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  9 .bss          00000064  2000000c  080016bc  0002000c  2**2
                  ALLOC
 10 ._user_heap_stack 00000600  20000070  080016bc  00020070  2**0
                  ALLOC
 11 .ARM.attributes 00000029  00000000  00000000  0002000c  2**0
                  CONTENTS, READONLY
 12 .comment      00000053  00000000  00000000  00020035  2**0
                  CONTENTS, READONLY
 13 .debug_line   00000084  00000000  00000000  00020088  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 14 .debug_info   00000022  00000000  00000000  0002010c  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 15 .debug_abbrev 00000012  00000000  00000000  0002012e  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 16 .debug_aranges 00000028  00000000  00000000  00020140  2**3
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 17 .debug_str    0000004e  00000000  00000000  00020168  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 18 .debug_ranges 00000020  00000000  00000000  000201b8  2**3
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 19 .debug_frame  0000004c  00000000  00000000  000201d8  2**2
                  CONTENTS, READONLY, DEBUGGING, OCTETS

Disassembly of section .text:

0800010c <__do_global_dtors_aux>:
 800010c:	b510      	push	{r4, lr}
 800010e:	4c05      	ldr	r4, [pc, #20]	; (8000124 <__do_global_dtors_aux+0x18>)
 8000110:	7823      	ldrb	r3, [r4, #0]
 8000112:	b933      	cbnz	r3, 8000122 <__do_global_dtors_aux+0x16>
 8000114:	4b04      	ldr	r3, [pc, #16]	; (8000128 <__do_global_dtors_aux+0x1c>)
 8000116:	b113      	cbz	r3, 800011e <__do_global_dtors_aux+0x12>
 8000118:	4804      	ldr	r0, [pc, #16]	; (800012c <__do_global_dtors_aux+0x20>)
 800011a:	f3af 8000 	nop.w
 800011e:	2301      	movs	r3, #1
 8000120:	7023      	strb	r3, [r4, #0]
 8000122:	bd10      	pop	{r4, pc}
 8000124:	2000000c 	.word	0x2000000c
 8000128:	00000000 	.word	0x00000000
 800012c:	08001668 	.word	0x08001668

08000130 <frame_dummy>:
 8000130:	b508      	push	{r3, lr}
 8000132:	4b03      	ldr	r3, [pc, #12]	; (8000140 <frame_dummy+0x10>)
 8000134:	b11b      	cbz	r3, 800013e <frame_dummy+0xe>
 8000136:	4903      	ldr	r1, [pc, #12]	; (8000144 <frame_dummy+0x14>)
 8000138:	4803      	ldr	r0, [pc, #12]	; (8000148 <frame_dummy+0x18>)
 800013a:	f3af 8000 	nop.w
 800013e:	bd08      	pop	{r3, pc}
 8000140:	00000000 	.word	0x00000000
 8000144:	20000010 	.word	0x20000010
 8000148:	08001668 	.word	0x08001668

0800014c <main>:
 800014c:	b580      	push	{r7, lr}
 800014e:	af00      	add	r7, sp, #0
 8000150:	f000 fa14 	bl	800057c <HAL_Init>
 8000154:	f000 f805 	bl	8000162 <SystemClock_Config>
 8000158:	f000 f876 	bl	8000248 <MX_GPIO_Init>
 800015c:	f000 f848 	bl	80001f0 <MX_USART1_UART_Init>
 8000160:	e7fe      	b.n	8000160 <main+0x14>

08000162 <SystemClock_Config>:
 8000162:	b580      	push	{r7, lr}
 8000164:	b090      	sub	sp, #64	; 0x40
 8000166:	af00      	add	r7, sp, #0
 8000168:	f107 0318 	add.w	r3, r7, #24
 800016c:	2228      	movs	r2, #40	; 0x28
 800016e:	2100      	movs	r1, #0
 8000170:	4618      	mov	r0, r3
 8000172:	f001 fa71 	bl	8001658 <memset>
 8000176:	1d3b      	adds	r3, r7, #4
 8000178:	2200      	movs	r2, #0
 800017a:	601a      	str	r2, [r3, #0]
 800017c:	605a      	str	r2, [r3, #4]
 800017e:	609a      	str	r2, [r3, #8]
 8000180:	60da      	str	r2, [r3, #12]
 8000182:	611a      	str	r2, [r3, #16]
 8000184:	2301      	movs	r3, #1
 8000186:	61bb      	str	r3, [r7, #24]
 8000188:	f44f 3380 	mov.w	r3, #65536	; 0x10000
 800018c:	61fb      	str	r3, [r7, #28]
 800018e:	2300      	movs	r3, #0
 8000190:	623b      	str	r3, [r7, #32]
 8000192:	2301      	movs	r3, #1
 8000194:	62bb      	str	r3, [r7, #40]	; 0x28
 8000196:	2302      	movs	r3, #2
 8000198:	637b      	str	r3, [r7, #52]	; 0x34
 800019a:	f44f 3380 	mov.w	r3, #65536	; 0x10000
 800019e:	63bb      	str	r3, [r7, #56]	; 0x38
 80001a0:	2300      	movs	r3, #0
 80001a2:	63fb      	str	r3, [r7, #60]	; 0x3c
 80001a4:	f107 0318 	add.w	r3, r7, #24
 80001a8:	4618      	mov	r0, r3
 80001aa:	f000 fcc9 	bl	8000b40 <HAL_RCC_OscConfig>
 80001ae:	4603      	mov	r3, r0
 80001b0:	2b00      	cmp	r3, #0
 80001b2:	d001      	beq.n	80001b8 <SystemClock_Config+0x56>
 80001b4:	f000 f8da 	bl	800036c <Error_Handler>
 80001b8:	230f      	movs	r3, #15
 80001ba:	607b      	str	r3, [r7, #4]
 80001bc:	2302      	movs	r3, #2
 80001be:	60bb      	str	r3, [r7, #8]
 80001c0:	2300      	movs	r3, #0
 80001c2:	60fb      	str	r3, [r7, #12]
 80001c4:	f44f 63e0 	mov.w	r3, #1792	; 0x700
 80001c8:	613b      	str	r3, [r7, #16]
 80001ca:	f44f 63e0 	mov.w	r3, #1792	; 0x700
 80001ce:	617b      	str	r3, [r7, #20]
 80001d0:	1d3b      	adds	r3, r7, #4
 80001d2:	2100      	movs	r1, #0
 80001d4:	4618      	mov	r0, r3
 80001d6:	f000 ff33 	bl	8001040 <HAL_RCC_ClockConfig>
 80001da:	4603      	mov	r3, r0
 80001dc:	2b00      	cmp	r3, #0
 80001de:	d001      	beq.n	80001e4 <SystemClock_Config+0x82>
 80001e0:	f000 f8c4 	bl	800036c <Error_Handler>
 80001e4:	f001 f816 	bl	8001214 <HAL_RCC_EnableCSS>
 80001e8:	bf00      	nop
 80001ea:	3740      	adds	r7, #64	; 0x40
 80001ec:	46bd      	mov	sp, r7
 80001ee:	bd80      	pop	{r7, pc}