Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Программная инженерия > Микроконтроллеры, робототехника, схемотехника, 3D принтеры
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2019, 15:01   #1
ilya909
Новичок
Джуниор
 
Регистрация: 02.08.2019
Сообщений: 2
По умолчанию STM32F407 и огромный массив в отдельном файле

Доброго дня форумчане, нужна помощь по написанию части кода
Есть микроконтроллер STM32F407 с 192КБ ОЗУ
Есть SD карта с записанным файлом с массивом внутри оного
Часть кода я смог написать а вот по другой части у меня ступор - нужно чтобы из файла через определенный интервал считывался элемент массива n и выбрасывался по порту наружу

файл выглядит так(сократил)

Код:
uint32_t wData_size=5532923;
unsigned char wData[] = 
{0x73,0x81,0x94,0x64,0x85,0x94,0x5e,0x84,0x8a,0x7a,0x72,0x72,0x8e,0x5e,0x6e,
0x91,0x57,0x6c,0x79,0x65,0x63,0x5d,0x80,0x5c,0x55,0x82,0x4d,0x56,0x72,0x61,
0x5f,0x51,0x75,0x5d,0x48,0x7f,0x4e,0x4a,0x74,0x64,0x6a,0x5d,0x7f,0x76,0x51,
0x84,0x68,0x4f,0x75,0x68,0x6a,0x56,0x69,0x75,0x49,0x7a,0x74,0x54,0x77,0x70,
0x74,0x67,0x77,0x8f,0x5f,0x84,0x99,0x66,0x7f,0x7d,0x7b,0x70,0x70,0x91,0x66,
0x7a,0x99,0x70,0x81,0x82,0x8a,0x8a,0x84,0xb0,0x91,0x8d,0xba,0x88,0x83,0x90,
...........................................................................
0x72,0x87,0x83,0x74,0x87,0x7b,0x8c,0x8d,0x7f,0x89,0x71,0x82,0x89,0x77,0x85};
wData_size - это колво элементов массива, то есть это число нужно запихнуть в счетчик цикла, размеры файла не позволяют его полностью загрузить в ОЗУ контроллера так как это обычно 250-600 Мб которые хранятся на карте памяти что подключается к контроллеру

считывание должно выглядеть так: берется 1-й элемент массива, сосчитался в буфер(пусть будет masBuff), дальше содержимое буфера отправляется наружу через
GPIOB->ODR = masBuff, затем проходит некоторое время - 8 мс и считывается 2-й элемент массива и выбрасывается наружу через буфер и так до конца массива

Помогите с написанием кода, пробовал шаманство через fgetc, lseek но Keil на такое реагирует страшным матом при компиляции

я примерно так это представляю
Код:
if(f_open(&MyFile, "wdata.txt", FA_READ) != FR_OK)
{
   Error_Handler();
}
else
{
   //здесь счетчик
   size = //тут должно быть число из файла из строки uint32_t wData_size
   for(d<size;d++)
   {
      //тут как-то считывается элемент и пишется в masBuff
      GPIOB->ODR = masBuff;
      delay_ms(8);
   }
   f_close(&MyFile)
}

Последний раз редактировалось ilya909; 02.08.2019 в 15:10. Причина: дописал код, как примерно его представляю
ilya909 вне форума Ответить с цитированием
Старый 02.08.2019, 15:41   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Генерите бинарный файл, счетчик определяется размер_файла/размер элемента и т.д.
p51x вне форума Ответить с цитированием
Старый 02.08.2019, 16:50   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Цитата:
Сообщение от ilya909 Посмотреть сообщение
Код:
for(d<size;d++)
- а где инициализация d?
Cuprum5 вне форума Ответить с цитированием
Старый 02.08.2019, 17:03   #4
ilya909
Новичок
Джуниор
 
Регистрация: 02.08.2019
Сообщений: 2
По умолчанию

d инициализировал выше, просто в фрагменте кода не показано, щас пробую вариант который посоветовал товарищ р51х хотя там тоже заморочки(я сам виноват что мало знаю)
ilya909 вне форума Ответить с цитированием
Старый 02.08.2019, 18:23   #5
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

не понял а в чем проблема то??
Сделали таймер и по прерыванию читаете символ с вашей карты и кидаете куда хотите. и причем тут fgetc ... у вас же SPI протокол.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 02.08.2019, 19:41   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от WorldMaster Посмотреть сообщение
причем тут fgetc ... у вас же SPI протокол.
Когда SPI научился читать файлы с sd-карты?
p51x вне форума Ответить с цитированием
Старый 02.08.2019, 21:03   #7
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Когда SPI научился читать файлы с sd-карты?
Ничего не понимаю. Это протокол взаимодействия с картами. может конечно в кеил и реализована fgets через спи но .. а как же файловая система карты. Или мы о разных вещах говорим?
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 02.08.2019, 22:27   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

http://www.keil.com/support/man/docs...fs_flashfs.htm
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перечисление в отдельном заголовочном файле Базиля Помощь студентам 5 20.02.2014 14:30
Сохранение введённых данных в отдельном файле mephistophel Общие вопросы по Java, Java SE, Kotlin 1 04.05.2012 00:36
шаблон в отдельном файле Форсировка PHP 4 02.01.2011 21:56
сохранение листа Excel в отдельном файле mmzzmm Microsoft Office Excel 2 07.10.2010 15:51
Как создать огромный массив? fatesmile Общие вопросы Delphi 17 18.01.2010 14:19