Ekka 0 31 августа, 2016 Опубликовано 31 августа, 2016 · Жалоба Мне нужно было, чтобы мк работал как хост и как ком-порт. Это получилось) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ekka 0 7 сентября, 2016 Опубликовано 7 сентября, 2016 (изменено) · Жалоба Здравствуйте, снова пишу сюда. Может, кто-то сталкивался с такой штукой. Пытаюсь работать с FATFS, монтирую флешку. Непонятка в следующем: если вызываю функцию FATFS единожды в main в while(1){} - все работает. Пытаюсь по-человечески перенести в прерывание по кнопке - виснет. функция, которую вызываю в цикле мэина единожды: RESULT_MOUNT=f_mount(&FileSystem, "0", 1); все нормально, возвращает FR_OK. То же вызываю в прерывании по кнопке - зависает. В чем может быть проблема? О_О Изменено 7 сентября, 2016 пользователем Ekka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 7 сентября, 2016 Опубликовано 7 сентября, 2016 · Жалоба Здравствуйте, снова пишу сюда. Может, кто-то сталкивался с такой штукой. Пытаюсь работать с FATFS, монтирую флешку. Непонятка в следующем: если вызываю функцию FATFS единожды в main в while(1){} - все работает. Пытаюсь по-человечески перенести в прерывание по кнопке - виснет. А с чего Вы решили что эти функции могут вызываться из ISR??? :01: Скорей всего они даже не могут вызываться из разных задач ОСРВ без спец. обёрток, обеспечивающих сериализацию. Про ISR даже речи быть не может. Наиболее правильно все функции FatFS вызывать из одной задачи ОС. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ekka 0 7 сентября, 2016 Опубликовано 7 сентября, 2016 · Жалоба А с чего Вы решили что эти функции могут вызываться из ISR??? :01: Скорей всего они даже не могут вызываться из разных задач ОСРВ без спец. обёрток, обеспечивающих сериализацию. Про ISR даже речи быть не может. Наиболее правильно все функции FatFS вызывать из одной задачи ОС. Но я не использую никакую ОС. Объясните, пожалуйста, по-подробнее, что Вы имели ввиду) Т.е. они у меня тут только в мэине и будут работать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 7 сентября, 2016 Опубликовано 7 сентября, 2016 · Жалоба Т.е. они у меня тут только в мэине и будут работать? Конечно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ekka 0 8 сентября, 2016 Опубликовано 8 сентября, 2016 · Жалоба Конечно. Спасибо за ответы) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 8 сентября, 2016 Опубликовано 8 сентября, 2016 · Жалоба Если Вам надо отделить работу файловой системы от каких-то других задач (чтобы они не мешали другу и тормозили), то поставьте ОС и все функции работы с файловой системой вынесите в отдельную задачу. Но тогда ещё Вам нужно продумать алгоритм межзадачного взаимодействия для запроса функций из задачи файловой системы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 8 сентября, 2016 Опубликовано 8 сентября, 2016 · Жалоба Если Вам надо отделить работу файловой системы от каких-то других задач (чтобы они не мешали другу и тормозили), то поставьте ОС и все функции работы с файловой системой вынесите в отдельную задачу. Но тогда ещё Вам нужно продумать алгоритм межзадачного взаимодействия для запроса функций из задачи файловой системы. Вовсе не обязательно. Main Loop тоже вполне позволяет параллелить задачи, особенно с помощью Protothreads. При этом отсутствует геморрой с синхронизацией. Из недостатков - задержки отклика: всё-таки функции файловой системы могут тормозить в случае стирания флэш, к примеру. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 8 сентября, 2016 Опубликовано 8 сентября, 2016 · Жалоба Из недостатков - задержки отклика: всё-таки функции файловой системы могут тормозить в случае стирания флэш, к примеру. Вот именно. Вот именно устранение этого я имел в виду под "отделить работу от других задач". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ekka 0 29 сентября, 2016 Опубликовано 29 сентября, 2016 · Жалоба Снова привет всем. Простите, что все до кучи в одной теме, но вопрос очень непонятный. Настраиваем ДМА с АЦП через Куб. На 4 канала. В чем вопрос: в инете говорится, что запускать ДМА с АЦП надо примерно так: HAL_ADC_Start_DMA(&hadc1, (uint32_t*)dmaBuf, (uint32_t)dmaBufSize*2); Почему вдруг *2 ??? При таком запуске ДМА благополучно лезет в соседние массивы и пихает туда то, что забрал с АЦП. Однако если запустить так: HAL_ADC_Start_DMA(&hadc1, (uint32_t*)dmaBuf, (uint32_t)dmaBufSize); заполняется либо полмассива, либо часть. В результате не могу нормально усреднить значения. Может кто-то знает, в чем моя проблема? Как надо правильно запускать ДМА? Или, может, у меня какая-то настройка отсутствует? У меня уже глаз замылился с этим ДМА. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 141 29 сентября, 2016 Опубликовано 29 сентября, 2016 · Жалоба Как надо правильно запускать ДМА?А вы посмотрите внимательно, что происходит внутри этой чУдной функции. Отследите, какие значения в какие регистры она пишет. А потом откройте описание каждого конкретного регистра и разберитесь, что туда должно писаться исходя из вашей задачи. И вам все станет ясно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ekka 0 30 сентября, 2016 Опубликовано 30 сентября, 2016 · Жалоба Вопрос с ДМА снят) Разобрались. Возник другой вопрос. Может, конечно, тоже вопрос не из умных, но можно ли как-то заставить FATFS работать в прерывании обычного таймера? Она же в прерываниях, вроде не работает. Просто у меня в чем беда: несчастный триак работает на прерываниях (плохо, конечно, не отрицаю) и если ФатФС тормозит в мэине - лампочка тоже моргает, импульсы нарушаются. Может, кто умный/опытный что посоветует? Засада еще в том, что FreeRTOS взять пока не могу(( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться