Инициализация массива структур - C (СИ)
Формулировка задачи:
Подскажите как инициализировать целый массив со структурами.
Вот пример инициализации структуры. Тут вроде понятно.
Мне нужно целый массив и сразу вписать значения.
Я пишу программку для микроконтроллера stm32 в keil uvision 5.
Есть надежда что я смогу дописать ключевое слово const или другую приблуду и эта информация окажется в памяти программ (flash). Эти данные не будут изменяться и хочется разместить их в flash.
struct gasket {
float weight;
unsigned height;
unsigned diameter;
};
struct gasket obj = { 12.f, 120, 30 };struct EffectFeature {
enum Direction Dir;
uint32_t Start;
uint32_t End;
uint32_t FrameRate;
};
struct EffectFeature Effects[2]; // Этот массив нужно инициализировать сразу, сделать const и вообще записать на flash.Решение задачи: «Инициализация массива структур»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
enum Direction
{
ONE,
TWO
};
struct EffectFeature{
enum Direction Dir;
uint32_t Start;
uint32_t End;
uint32_t FrameRate;
}const effect[2] = {{ONE,0,10,30},{TWO,10,20,50}};
void Print(const struct EffectFeature* my_struct)
{
printf("Direction:%d\n",my_struct->Dir);
printf("Start:%u\n",my_struct->Start);
printf("End:%u\n",my_struct->End);
printf("FrameRate:%u\n\n",my_struct->FrameRate);
}
int main()
{
Print(&effect[0]);
Print(&effect[1]);
return 0;
}
Объяснение кода листинга программы
- Подключаются необходимые заголовочные файлы
- Определяется перечисление Direction
- Определяется структура EffectFeature, содержащая перечисление Dir, типы данных uint32_t для Start, End и FrameRate
- Определяется массив структур effect, инициализированный значениями, соответствующими перечтению Direction
- Определяется функция Print, принимающая указатель на структуру EffectFeature и выводящая значения полей структуры
- В функции main создается и инициализируется указатель на первый элемент массива effect
- Вызывается функция Print с указателем на первый элемент массива effect
- Создается и инициализируется указатель на второй элемент массива effect
- Вызывается функция Print с указателем на второй элемент массива effect
- Функция main возвращает 0, завершая работу программы