Задать вопрос
@shadrap

Как правильно передать указатель на массив внутри структуры в функцию С (Ардуино)?

Застрял на вроде простом моменте. Скетч под Ардуиновскую платформу, компилирую в Платформио. Сам скетч очень большой, постараюсь описать вкратце.

Есть структура объявленная глобально (хранит данные в RTC памяти микросхемы):
#define ARRAY_SIZE 20
struct {
 .........
  uint32_t TimeStampData[ARRAY_SIZE];       // 80 byte
  uint16_t HumData[ARRAY_SIZE];             // 40 byte
  uint16_t TempData[ARRAY_SIZE];            // 40 byte
  uint16_t PresData[ARRAY_SIZE];            // 40 byte
  .................
   } MyRtcData;


есть функция CalculateTrend(?????????) // предназначена для выполнения одинаковых вычислений с одинаковыми массивами из структуры MyRtcData
{
int difference[11]={0,};
difference[0]=(MyRtcData.??????[0] - MyRtcData.&????[1])*1.5;
 difference[1]=(MyRtcData.?????[0] - MyRtcData.&????[2]);
................
}


есть функция unsigned int PrecipitationLikelihood(void) // из которой я передаю вышеуказанной функции указатель на массив из структуры, который нужно обработать.
{
....
int trend = CalculateTrend(MyRtcData.PresData);
}

Вопрос - я могу передавать указатель сразу на элемент структуры(если она описана глобально)? или мне нужно сначала передать указатель на структуру, а потом указатель на элемент структуры? Как мне обратиться внутри функции к элементам массива?
Конечно тут можно рассматривать только передачу через указатели, не целиком данные, т.к. стек маленький...
  • Вопрос задан
  • 991 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
@User700
Да, можно:
а) передать указатель на uint16_t. В treyd обработывайте его как массив (известной из define длины)
б) это си или си++? В последнем можно передать ссылку на сам тип uint16_t[число]. Возможно получится это сделать и как указатель на такой тип
в) объявить тип структуры. есть такое понятие как указатель на поле структуры. Если она глобальная, то указатель на неё можно и не передавать в функцию, а там обращаться к ней непосредственно. Смогу показать на примере.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Как-то так
int CalculateTrend(MyRtcData* rcData)
{
   if(rcData != 0)
   {
        return rcData->PresData[0];
   }
  return -1;
}
Ответ написан
@shadrap Автор вопроса
Да , так я и написал в начале, компилер говорит , что не знает MyRtcData ('MyRtcData' was not declared in this scope
) хотя я использую структуру эту везде в скетче.
пролог функции то же не помогает.... и это не все что хочется!) Хочется что бы вместо
/cpp
return rcData->PresData[0]; // хочется что бы вместо PresData здесь был вариабельный указатель, т.е. и HumData ,TempData
/cpp
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы