ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
1054010
BlackMorda, мудак (20.11.2020 15:00, просмотров: 3056)
Структуры и указатели с точки зрения практики. 

Вызов функции с одним параметром

LDRB.W R0, [R5],#1

BL LCD_send_data

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

MOVS R1, #1 ; параметр

MOV R0, R4 ; Указатель на структуру

BL GPIO_PinRemapConfig

Никаких лишних телодвижений.

Вызов функции с возвращением одного параметра

BL get_last_menu_func

LDR R0, [R0]

Вызов функции с возвращением результата по указателю

LDR R0, [SP,#8]

BL strlen

LDR R1, [SP,#8]

Одна добавочная команда

Вызов функции с передачей пареметра "указатель на локально созданную структуру"

LDR.W R5, =TIM16_CR1 ; =0x40014400

MOVW R0, #0xFFFF

STRH.W R0, [SP,#4]

MOVS R3, #0

LDR R0, [SP,#0x18]

LDR.W R1, =0xF4240

STRH.W R3, [SP,#6]

UDIV.W R1, R0, R1

SUBS R2, R1, #1

STRH.W R2, [SP]

STRH.W R3, [SP,#2]

MOV R1, SP ; указатель на структуру

MOV R0, R5

BL TIM_TimeBaseInit

Тоже очень красиво, не нужно никакой кучи и malloc()

В стеке формируем структуру, а после вызова функции очищаем стек

Итого как не крути, для структур лучше поморочиться с указателями, а не надеятся на компилятор.

А для "обычных" переменных лучше без указателя.