Wątek przeniesiony 2018-11-30 15:04 z Newbie przez furious programming.

Przekazanie adresu tablicy funkcji w funkcji

0

Witam
Gdy przekazuję adres bufora do funkcji ląduję w hard_falout. Sprawa wygląda tak:
moja funkcja:

void ReadRegisterMulti(uint8_t reg, uint8_t *data, uint8_t count) {
	reg=REGISTER_MASK(reg);
	CS_LOW;
	HAL_SPI_Transmit(&hspi1, &reg, 1, 500); // wysłanie komendy 
	HAL_SPI_TransmitReceive(&hspi1, (uint8_t*)NRF24L01_NOP_MASK, data, count, 500); // wysyłam NOPE (0xFF), dane mają być zapisywane w buforze data. PO WEJŚCIU W TĄ FUNKCJĘ I WYKONANIU KILKU LINIJEST ZOSTAJE PRZENIESIONY DO HARD_FALLOUT
	CS_HIGH;
}

funkcja z gotowej biblioteki:

HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size,
                                          uint32_t Timeout);
#define REGISTER_MASK				0x1F
#define READ_REGISTER_MASK(reg)	(0x00 | (REGISTER_MASK & reg))
#define NRF24L01_NOP_MASK					0xFF
uint8_t daneIn[4], daneOut[4];
uint8_t buff1[50];
int main(void)
{
ReadRegisterMulti(0x0B, &daneIn, 4);
x=sprintf((char*)buff1, "%02x %02x %02x %02x\n", daneIn[0], daneIn[1], daneIn[2], daneIn[3]);
HAL_UART_Transmit(&huart2, buff1, x, 500);
HAL_Delay(1000);
}

Podejrzewam, że namieszałem coś z przekazywaniem adresu mojego bufora do funkcji, tylko nie wiem co.

1

Nie znam sygnatur tych funkcji, ale Twój bufor ma 50 znaków, a przekazujesz 500 - czy to może mieć związek z problemem?

0

500 to timeout. Chyba znalazłem problem. Wywala się podczas transmisji 2 bajtu

HAL_SPI_TransmitReceive(&hspi1, (uint8_t*)NRF24L01_NOP_MASK, data, count, 500);

Zamiast tego parametru będę musiał wstawić jakąś tablicę bo dla transmisji 1 bajtu działa, a dla większej ilości już nie.
spróbuje zrobić tak:

void ReadRegisterMulti(uint8_t reg, uint8_t *data, uint8_t count) {
uint8_t tablica_nope[count]
for(int x=0; x<cout; x++) {
tablica_nope[x]=0xff;
}
 reg=REGISTER_MASK(reg);
    CS_LOW;
    HAL_SPI_Transmit(&hspi1, &reg, 1, 500); // wysłanie komendy 
    HAL_SPI_TransmitReceive(&hspi1, tablica_nope, data, count, 500);
    CS_HIGH;
}

Tak udało się chyba wyjście na dwór i przewietrzenie się sporo daje, pół dnia nad tym siedziałem..

1 użytkowników online, w tym zalogowanych: 0, gości: 1