Re: STM32, Atolic TrueStudio, CubeMX
Є такий шмат коду:
//Функція відображення інформації на індикатор
void ShowScreen(uint8_t* number, uint8_t number_of_digits)
{
uint16_t digitPin[] = {D0_Pin,D1_Pin,D2_Pin,D3_Pin};
for(int i = 0; i < number_of_digits; i++)
{
IND_PORT -> BRR = (D0_Pin|D1_Pin|D2_Pin|D3_Pin);//Вимикаємо всі розряди
IND_PORT -> BSRR = digitPin[i];//Вмикаємо потрібний розряд індикатора
DigitToPort(*(number+i));//Виводимо цифру у потрібний розряд
HAL_Delay(1);//Невеличка затримка. Хай цифра світиться якийсь час
}
}
Де number це одномірний масив з однорозрядними цифрами.
Чув що за глобальні змінні розстріл чи там 15 років з конфіскацією
Тому в функцію передається вказівник на масив і кількість елементів масиву.
Це все чудово працює. Але є маленьке питання. В рядку 4 оголошую масив, де перераховую дефайни які містять відповідні регистри. А потім зручно в циклі підсовувати змінну "i" замість "D0_Pin...D3_Pin", щоб не копіпастити код. Тепер питання, а чи це нормальний спосіб? Чи може є більш елегантніший/професійний спосіб? Чи взагалі якісь варіанти є?
Тепер глобальне питання!
Створив структуру:
typedef struct
{
int current;
int previous;
bool flag_visible;
}CounterTypeDef;
Потім оголосив і ініціалізував масив з структур:
CounterTypeDef AI_Counter[16] = {}; // Масив з 16 структур для лічильників
І з-за того що оголосив масив структур в глобальних змінних, то теж все працює, маю доступ до елементів масиву структур звідусіль таким чином:
AI_Counter[0].current = 19990;
AI_Counter[0].previous = 0;
AI_Counter[0].flag_visible = false;
Але ж хочеться позбавитись глобальних змінних. Передати функції вказівник на масив структур виходить, так як і на звичайний масив:
void anyFunc(CounterTypeDef* AI_Counter);
Але як далі в функції обробляти? Я не розумію. Як би поодинока структура, то зрозуміло.
Наприклад там:
AI_Counter->current++;
Але це ж масив структур. Треба якось вказати не тільки елемент структури, а і елемент масиву структур. І я не знаю як з цим впоратись. По пошуку нічого підходящого не знаходжу.
Допоможіть.