Первое: я унаследовал этот проект от того, кто не смог его завершить из-за нехватки времени.
Код содержит чуть более 100 объявленных массивов, каждый из которых содержит набор INT. Все массивы уникальны.
byte arr_foo[] = {2, 5, 6, 8, 3};
byte arr_bar[] = {1, 7};
byte arr_baz[] = {6, 10, 9, 11, 7, 8, 3};
Эти INT относятся к определенному светодиоду на плате - всего их 11. И массивы представляют собой определенную последовательность, в которой эти светодиоды должны загораться.
То, что они пытались сделать, это написать подпрограмму, которая, если ей дать имя массива, затем пошла бы для извлечения содержимого этого массива и обработки INT. Что ж, передача имени массива в виде строки для сопоставления с переменной не работает. И вот, где они передали это, говоря, что у них нет времени, чтобы понять это.
Итак, я смотрю на это и думаю, почему не двумерный массив? Я быстро столкнулся с проблемой там.
byte seqs[][7] = {
{2, 5, 6, 8, 3},
{1, 7},
{6, 10, 9, 11, 7, 8, 3}
}
Хотя в принципе это работает, проблема заключается в том, что он дополняет каждый массив завершающими нулями, потому что я сказал, что у каждого есть [7] элементов. Это приводит к потере большого количества памяти и исчерпанию памяти.
Так что я застрял. Я не уверен, как обращаться со 100+ отдельными массивами, кроме как написать более 100 отдельных подпрограмм для последующего вызова. Также я не могу понять, как сделать его более эффективным.
Тогда возникает проблема: мне может все еще не хватить памяти, когда будет добавлено больше последовательностей. И что тогда? Добавить внешнюю флеш-память i2c, и засунуть туда вещи? Никогда не сталкиваясь с этим, я не уверен, как это реализовать, в каком формате хранить значения и как это сделать. Верно ли, что нужно сначала написать программу, которая загружает все данные в память, загрузить ее и запустить, а затем поместить на микроконтроллер реальную программу, которая будет обрабатывать эти данные?
Так что, я полагаю, я спрашиваю о двух вещах: как лучше обрабатывать множество-много (маленьких) массивов и иметь возможность использовать их в рутине, которая их вызывает, и если мне лучше отложить это данные во внешнюю флэш-память, в каком формате они должны храниться?