Jump to content

    

Nikitoc

Участник
  • Content Count

    207
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Nikitoc

  • Rank
    Местный
  • Birthday 06/14/1982

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

1403 profile views
  1. Ясно. Всем спасибо за ответы.
  2. Уважаемые коллеги. Я запутался в некоторых особенностях порта FreeRTOS под Cortex-M3. А именно: в файле freertosconfig.h есть следующие мароопределения: /* This is the raw value as per the Cortex-M3 NVIC. Values can be 255 (lowest) to 0 (1?) (highest). */ #define configKERNEL_INTERRUPT_PRIORITY 255 #define configMAX_SYSCALL_INTERRUPT_PRIORITY 191 /* equivalent to 0xb0, or priority 11. */ /* This is the value being used as per the ST library which permits 16 priority values, 0 to 15. This must correspond to the configKERNEL_INTERRUPT_PRIORITY setting. Here 15 corresponds to the lowest NVIC value of 255. */ Насколько я понимаю, configKERNEL_INTERRUPT_PRIORITY соответствует наименьшему приоритету NVIC - 15-му. А configMAX_SYSCALL_INTERRUPT_PRIORITY - 11-му. Никак не могу разобраться как и где эти константы используются. Где именно происходит назначение приоритета этими константами. И еще в доках сказано, что нельзя использовать ф-ции FreeRTOS в прерываниях с приоритетом большим чем configMAX_SYSCALL_INTERRUPT_PRIORITY (т.е. как я понял с приоритетами 0-10 в данном случае). Объясните, пожалуйста, почему? Просьба сильно не пинаться, я недавно работаю с данной ОС.
  3. Всем привет. Пытаюсь использовать исключения совместно с FreeRTOS. Вот такой код: try { throw 5; } catch (int a) { if(a == 5) { printf(" Exception occured "); { } работает нормально только до запуска планировщика и создания задач. Если я пытаюсь сделать подобное с работающим планировщиком, то код может отработать, но после него вылетаю в HardFault. В чем может быть причина? Куда копать? Пишу в Keil 4.1 под stm32f205. FreeRTOS 7.1. В настройках среды исключения разрешены (--exceptions).
  4. Привет. Я весь код не писал. Я взял примерчик от ST (который идет с IAR 6.30). А в файле diskio.c (который для FatFS) просто написал вызовы функций чтения/записи, которые из примерчика.
  5. Всем привет. Пытаюсь прикрутить известный примерчик от ST (SDIO+DMA для stm32f205) к FatFs. Все функции работают корректно кроме мультиблоковой записи. И именно это выносит мне мозг. Все зависает на функции: SD_Error SD_WaitWriteOperation(void) { SD_Error errorstatus = SD_OK; while ((SD_DMAEndOfTransferStatus() == RESET) && (TransferEnd == 0) && (TransferError == SD_OK)) { /*if ((SDIO->STA & 0x03) != 0x00){ printf(" 0x%X ", SDIO->STA); }*/ } if (TransferError != SD_OK) { return(TransferError); } /*!< Clear all the static flags */ SDIO_ClearFlag(SDIO_STATIC_FLAGS); return(errorstatus); } Закомментированный участок кода - это моя отладочная функция. Собственно говоря, когда я начинаю записывать файл мультиблоковая функция нормально отрабатывает несколько раз (5-15, каждый раз по-разному), а затем подвисает. При этом в статусном регистре содержится значение 0x42. Т.е. устанавливаются флаги DCRCFAIL (Data block sent/received (CRC check failed)) и CMDREND (Command response received (CRC check passed)). Почему устанавливается второй флаг - не понимаю. Если есть какие-нибудь мысли или что-то подобное встречалось - просьба поделиться. Заранее благодарен.
  6. Сергей, спасибо Вам большое. Разжевано предельно понятно :cheers: Систематизация - полезная штука.
  7. Всем спасибо за ответы. Вопрос Сергею: я спросил про "неназванную" область оперативной памяти (которая не куча и не стек) потому что столкнулся с этим при работе в Keil uVision (я пишу под Cortex-M3, хотя это наверное не важно). В стартаповом файле конфигурируется куча и стек. Из доступных 16кБ я под стек выделил 1кБ, а куче ничего, т.к. не использую динамического выделения памяти в этом проекте. Так вот, в программе у меня определены два буфера по 4кБ (как глобальные переменные). Получается, что расположены эти два буфера не в стеке (слишком мал) и не в куче (т.к. они определены статически да и под кучу памяти не выделено). Я, конечно, понимаю, что частично ответил на свой вопрос, но все равно хочется больше информации в этом направлении. Может быть управление оперативной памятью зависит от платформы (компилятора)?
  8. Всем привет! Вопросик простой, но для полноты картины происходящего в компиляторе (или в МК) мне нужно этот вопрос разъяснить. Допустим, есть какая-то функция: WORD *Multiple (BYTE A, BYTE B){ WORD *result; result = (WORD *)malloc(1); *result = A * B; return result; } Собственно вопросы: 1. Где необходимо удалять эту переменную result (я имею в виду вызов ф-ции free())? Только в той функции, в которой она была выделена (Multiple()) или же можно сделать это в вызывающей функции по полученному указателю? 2. Я правильно понимаю, что возвращать указатель можно потому, что динамически выделенная переменная помещается в кучу, а не в стек? 3. Как называется область оперативной памяти, которая не отводится под кучу или стек? Как она используется компилятором (что туда "ложится")?
  9. А можно поподробнее? Как именно называется модуль? Где покупали? По таймингам сети можете сказать какие-нибудь конкретные цифры (макс. скорость на несколько устройств одновременно) или целенаправленно не мерили такие показатели?
  10. Идея реализации стека была отброшена в сторону как слишком трудозатратная. Остановился на WT11i со встроенным стеком iWRAP. В задачу входит передача данных одновременно 5 удаленным клиентам (в одну сторону, пока без подтверждения). Кто-нибудь решал подобную задачу? Мне нужно оценить примерную скорость передачи данных. Какова будет скорость переключения при поочередной передаче? Что следует учитывать при этом?
  11. Ага, ясно. Просто нужно указывать адрес такой, чтобы с командой бит Ax был в одном состоянии, а с данными в другом? Спасибо за помощь!
  12. Ясно, спасибо. Итак, я подключил индикатор по рекомендациям ST. Остался маленький вопрос по настройке FSMC. Разрядность шины данных указываем 8 и разрешаем мультиплексирование данных адреса. Неясно только какой тип памяти следует указывать контроллеру SRAM или PSRAM. Потому что согласно даташиту:"the address and data values are multiplexed on the databus, valid only with NOR and PSRAM memories". А почему для SRAM мультиплексирование недоступно? В чем функциональная разница между этими типами памяти с точки зрения работы контроллера?
  13. Сегодня стал разбираться с индикатором. Оказалось он (UG-6028GDEBF02) может работать лишь в двух режимах: с 8-и или 9-и разрядной шиной данных. А в даташите на контроллер, который в нем используется было указано еще два режима - 16-и и 18-и разрядные. И вот здесь образовалась проблемка - т.к. в аппноутах на stm32 указана лишь возможность подключения к 16-и разрядной памяти я не знаю как подключать индикатор к МК. Просто оставить неподключенными старшие разряды шины данных FSMC? И как тогда настраивать FSMC? Растолкуйте, пожалуйста, кто в курсе.
  14. Может быть кто-то уже запускал HCI? Или есть какие-нибудь примерчики реализации? Все же легче разбираться, когда под рукой "наглядное пособие".
  15. Всем привет. Пытаюсь разобраться с модулем WT21 bluegiga. Главное, что мне ясно - это то, что нужно реализовать стек HCI на управляющем этим модулем МК. Но что-то инфы на сайте производителя маловато... В даташите встречается упоминание о неких PS-keys. Что это за настройки? Как к ним добраться? Где почитать о них? Где вообще можно получить подробную инфу о работе с этими модулями (где расписываются команды HCI)? Даташит невнятный какой-то. Буду признателен за любую помощь!