uint8_t FP_RBf[2];
Хочу прочитать этот буфер и вызвать функцию по значению первого байта, и значение второго байта передать в функцию, как int32_t.
Код
uint32_t KeyNum = (uint32_t)FPI.FP_RBf[0];
int32_t KeyCnt = (int32_t) FPI.FP_RBf[1];
FpKey_hand[KeyNum](KeyCnt);
int32_t KeyCnt = (int32_t) FPI.FP_RBf[1];
FpKey_hand[KeyNum](KeyCnt);
Однако заметил, что при считывании RBf[1] компилятор использует команду LDRB, а не LDRSB
Код
;;;295 int32_t KeyCnt = (int32_t) FPI.FP_RBf[1];
0001a4 78c0 LDRB r0,[r0,#3] ; FPI
0001a4 78c0 LDRB r0,[r0,#3] ; FPI
Т.е. не происходит знакового расширения байта. Как сделать правильно?
Заменил тип в буфере на int8_t. Получилось следующее:
Код
;;;294 uint32_t KeyNum = (uint32_t)FPI.FP_RBf[0];
0001a4 f9901002 LDRSB r1,[r0,#2] ; FPI
;;;295 int32_t KeyCnt = (int32_t)FPI.FP_RBf[1];
0001a8 f9900003 LDRSB r0,[r0,#3] ; FPI
0001a4 f9901002 LDRSB r1,[r0,#2] ; FPI
;;;295 int32_t KeyCnt = (int32_t)FPI.FP_RBf[1];
0001a8 f9900003 LDRSB r0,[r0,#3] ; FPI
Так оно работает, но непонятки остались... Теперь обе переменные размножили знак.