Перейти к содержанию
    

Metallist64

Участник
  • Постов

    117
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Metallist64

  • Звание
    Частый гость
    Частый гость
  • День рождения 03.12.1983

Контакты

  • Сайт
    Array
  • ICQ
    Array

Посетители профиля

2 223 просмотра профиля
  1. Здравствуйте, heap увеличил сразу в два раза. Но это не решило проблему. Покопался в RTX и оказалось, при создании мьютекса проверяется следующее условие: if (IsIrqMode() || IsIrqMasked()) А функция IsIrqMasked проверяет регистр Priority Mask. В котором, в моем случае, был установлен 0-ой бит. Т.е. прерывания были запрещены. После разрешения прерываний ошибка ушла.
  2. Всем доброго времени суток! Имею неприятность в виде ошибки "osRtxErrorClibMutex" (Standard C/C++ library mutex initialization failed). Конфигурация Real-Time Environment следующая в основной программе: CMSIS -> Core CMSIS -> RTOS2(API)->Keil RTX5 CMSIS Driver -> Flash -> AT45DB642D CMSIS Driver -> SPI(API) -> SPI Compiler -> Event Recorder Compiler -> I/O -> File Device -> Startup Device -> STM32Cube Framework (API) -> STM32CubeMX ( SPI #1 activated Full Duplex Mode) Device -> STM32Cube HAL -> Common Device -> STM32Cube HAL -> Cortex Device -> STM32Cube HAL -> DMA Device -> STM32Cube HAL -> GPIO Device -> STM32Cube HAL -> MDMA Device -> STM32Cube HAL -> PWR Device -> STM32Cube HAL -> RCC Device -> STM32Cube HAL -> SPI File System -> CORE File System -> Drive ->NOR ( 1 pcs) В микроконтроллере есть самопальный бут, который прыгает к нужному адресу основной программы. В нем используется та же конфигурация Real-Time Environment. И функции для работы с файлами EFS (Embedded File System). Вот пример из бута: FILE *fo; stat = finit ("F0:"); stat = fmount ("F0:"); stat = fcheck("F0:"); fopen ("format.dat","w"); fwrite(format_array, 1, 16, fo); fclose (fo); Ситуация заключается в том, что при использовании этого же кода в основной программе - возникает ошибка osRtxErrorClibMutex(функция osRtxErrorNotify). Ноги растут из этой функции: int _mutex_initialize(mutex *m); int _mutex_initialize(mutex *m) { int result; *m = osMutexNew(NULL); if (*m != NULL) { result = 1; } else { result = 0; (void)osRtxErrorNotify(osRtxErrorClibMutex, m); } return result; } Есть ощущение, что в буте создаются мьютексы, которые мешают созданию других мьютексов в основной программе(бред конечно...) Беда в том, что EFS использует RTX и отказаться от нее никак нельзя. Может кто сталкивался, подскажите пожалуйста, куда капнуть?
  3. Всем привет! Достиг определенного успеха в работе с EFS. Оказалось, для AT45DB161D лучше использовать шаблон от AT45DB642D.с А так пришлось поправить функцию ReadData (); Нужно было посылать 4 пустых байта, а не два. В даташите есть такой момент: To perform a continuous read from the standard DataFlash page size (528 bytes), an opcode of E8H must be clocked into the device followed by three address bytes (which comprise the 24-bit page and byte address sequence) and 4 don’t care bytes. В шаблоне AT45DB642D.с этот нюанс учтен. А format("F0:","") нормально пока не заработал.
  4. Всем привет! Потихоньку продвигаюсь в решении вопроса. Для нормальной работы необходимо выполнить запуск следующих функций. stat = finit ("F0:"); stat = fmount ("F0:"); stat = fcheck("F0:"); Но теперь возникла загвоздка с форматированием. stat = fformat("F0:",""); Форматирование завершается через 3 сек. С ошибкой fsMediaError (0x09). Нормальное время ChipErease для AT45DB161D ~ 30 sec. Фокус заключается в том, что команда на форматирование отправляется. И начинаются попытки чтения статусного регистра. Но затем попытки чтения статуса прекращаются. И выдается ошибка fsMediaError. Может таймер какой-то срабатывает? P.S. При снижении частоты SPI (~ 100кГц). функция fcheck() возвращает ошибку: 0x08 (fsDriverError) Буду признателен за любую информацию по данным вопросам.
  5. Так и делаю. После нажатия F11 переходит к следующей строке, в функцию не заходит. Это видимо библиотечная функция, внутренности закрыты.
  6. Уважаемые знатоки, может у кого есть проект для Keil 5 с поддержкой SPI - флэшек ? Никак не могу заставить обращаться драйвер к AT45DB641E.
  7. Стараюсь, копаю... Как бы мне в этот fcheck () зайти и посмотреть что внутри происходит. Понять, откуда так сказать, ноги растут. А ту сразу бац и fsAccessDenied.
  8. Большое спасибо за помощь! Насколько я понял, DRIVER_SPI_NUM=1 указывает номер SPI интерфейса. Т.е. для SPI интерфейса №4 надо указать DRIVER_SPI_NUM=4. Компиляция проходит успешно. Но дальше опять ступор. if (finit ("F0:") == fsOK) Здесь все хорошо, драйвер инициализируется. if (fcheck ("F0:") == fsAccessDenied ) { while(0); } А далее fcheck("F0:") возвращает ошибку fsAccessDenied. Что означает "Resource access denied". В документе, такого состояния не должно возвращаться. http://www.keil.com/pack/doc/MW/FileSystem/html/group__utility__routines.html Немного копнув нашел драйвере AT45DB641E.c Есть следующие функции: static int32_t Initialize (ARM_Flash_SignalEvent_t cb_event) static bool SendCommand (uint8_t cmd, uint32_t addr, const uint8_t *data, uint32_t size) static int32_t ReadData (uint32_t addr, void *data, uint32_t cnt) ... При отладке успешно вызывается функция Initialize(). Но остальные функции не вызываются. Подскажите пожалуйста, куда можно копнуть? P.S. Подключил библиотеку для отладки FS_Dbg_lfn_cm3.lib. В файле FS_Debug.c отметил все пункты Errors+API. Но ничего не происходит. В функции fcheck() и finit() зайти не получается , они просто выполняются и происходит переход к следующей строке. Кто знаком с подобной ситуацией, подскажите пожалуйста как это должно работать?
  9. Здравствуйте, загрузил проект. git clone https://[email protected]/Metallist_64/flash.git Среда Keil5.24. Возможно придется подгрузить паки. Но, скорее всего, среда сама знает, что нужно. Если что-то не срастется, могу сказать какие паки устанавливал.
  10. Спасибо за подсказку. Собрал проект с нуля. Действительно, кое-что изменилось. При компиляции теперь появляется ошибка: .\Objects\1.axf: Error: L6218E: Undefined symbol Driver_SPI0 (referred from at45db641e.o). Перерыл весь проект, в RTE вроде все драйвера подключены. Проект выложить не могу. Он весит почти 100 Мб. Не совсем понятное, что такое Driver_SPI0, в файлах эта сущность вроде есть, а факту нет )). Проясните пожалуйста ситуацию.
  11. STM32H743ZI + AT45DB161D

    Всем доброго времени суток! Раньше использовал LPC1778 + AT45DB161D. В Keil 4.5xx была библиотека FS_CM3.lib. С помощью нее можно было на флешке создавать файлы и работать с ними, как на жестком диске. Было очень удобно. Волею судеб перешел на STM32. В частности, использую проц.STM32H743ZI. Познакомился к HAL )). К процу опять подключил внешнюю flash память - AT45DB161D. Поставил IDE - Keil 5.24. Изучил примеры, которые можно подкачать прямо из IDE. Во всех примерах используется внешняя карта памяти. А при попытке использовать SPI память получаю следующую ошибку от компилятора: "Initial Current ::File System:Drive is not enabled in FS_Config.c" На сайте кейла есть мануал: https://www.keil.com/pack/doc/mw/FileSystem/html/fs_create_app.html Если делать по нему, то по какой-то печали у меня не создается файл "RTE_Device.h". А при компиляции возникает та же ошибка. Пробовал подобную манипуляцию с процом серии STM32F. В этом случае файл "RTE_Device.h" создается, но компиляция опять дает ошибку "Initial Current ::File System:Drive is not enabled in FS_Config.c" Странно, в мануале есть явный намек на использование SPI флэши "AT45DB642D". Если кто сталкивался, подскажите пожалуйста где собака зарыта!
  12. Подскажите пожалуйста, куда отладчиком программа загружается? ОЗУ, как вы говорите, очень небольшое.
  13. Очень интересно. Поделитесь пожалуйста каким софтом и железом пользовались? Какие трудозатраты получились? Интрересует, как в случае с А9 выглядит клацанье портами и к примеру, работа с Ethernet. Еще интересно, как можно поработать с HDMI на низком уровне. И самый страшный вопрос: как запускается/записывается и отлажывается программа ? В этих процах нет же встроенной флэши и SRAM ...
  14. Всем привет! В связи с большим разнообразием мощных ARM контроллеров(ARM9 , A7, A9), есть идея применить их во встраиваемых решениях. В связи с этим возникли вопросы: 1. Программируют ли их люди их без операционной системы? 2. Насколько трудно найти отладчик и IDE для данных контроллеров? В частности интересуют, как программируют и отлажывают готовые одноплатные компьютеры вроде Raspberry PI, Orange PI. Или системы на ARM9 или A7. Насколько я понял, что KEIL данные процы не поддерживает. С IAR вроде лучше, но что-то типа Raspberry PI на ней тоже не поотлаживаешь.
  15. LPC1788 и EMC

    Письмо я вам на почту отдельное писал, странно, что долго шло. В общем и целом не в этом дело. Я с EMC не работал, поэтому сразу извиняюсь за глупые вопросы. Для меня вообще загадка как он работает. Поясните пожалуйста как дело обстоит на самом деле? Вот мы создали структуру, двум элементам присвоили значения. ALCD static struct { volatile uint16_t nc; volatile uint16_t reg; volatile uint16_t data; }lcd; /// FMC_A19 LCD_RS lcd.reg = 0xC1; lcd.data = 0x41; И как же запустить наш EMC? После запуска он отошлет наши данные 1 раз или будет без конца молотить?
×
×
  • Создать...