До DMA пока не добрался, как говориться потом сюрприз будет
Нет там никакого сюрприза. Просто имеет место быть жесткая привязка канала ДМА (имеется виду РЕКВЕСТОВ, а не данных!!!) к конкретным источникам этих реквестов. А если реквест генерируется самой периферией источником/приемником данных, то тогда будет привязка данных к каналу. Но почти всегда имеется ДВА варианта выбора канала. Источники повторяются для них. Такшта приемчики имеются...
Да я про грабли на те которые потом наступить придётся
Добавлено after 6 minutes 39 seconds: Аlex, поскольку у вас есть опыт работы с обоим семейством контроллеров, имея ввиду PIC32 и STM32, как они между собой по надёжности, возможно был опыт? Поскольку мы своё оборудование устанавливаем как на улице где температура -40 +40 так и в цехах где может быть высокий уровень ЭМИ помех. Где то утверждалось что PIC32 устойчивее чем например AVR хотя теперь их на одном заводе делают.
Где то утверждалось что PIC32 устойчивее чем например AVR хотя теперь их на одном заводе делают.
1. Устойчивость к помехам определяется током защелкивания выходных драйверов на пинах. 2. Их не делают на одном заводе. Это невозможно по определению. У них совершенно разные техпроцессы.
Аlex, поскольку у вас есть опыт работы с обоим семейством контроллеров, имея ввиду PIC32 и STM32
Опыт у меня только с PIC(12,18,32). С STM'ами опыт нулевой. Но и по помехам я не скажу ничего. Моё дело - программа. А всякая там схемотехника, помехи, и т.д... - не моё. Даже не вникаю
2. Наверно, но микрочип их поглатил, и чего они теперь там выпускают
Атмел всегда был фаблесс компанией. То есть выпускал свое хозяйство на чужих площадках. Есть такое мнение, что Микрочип старые позиции так и продолжил выпускать на тех же площадках.
Там еще есть ограничения на соединение таймеров по синхронизации мастер-слейв. Ну и не все таймеры одинаково полезны... Полагаю это самой большой засадой с учетом "недоремапа" пинов...
Ну и по ходу пьесы, появился вопрос: аппаратный SPI у нас может передавать только 8/16/32 бита, других вариантов я что то не нашёл. Я использую дисплей которому нужно передавать нестандартные 10 бит, это как то можно сделать используя аппаратный SPI? Дисплей использую давно, но он висит на самописном программном SPI. Пробовал ли кто эти 2 бита ногодрыгом дослать?
Да кстати была подобная идея, просто не предполагал как приёмник на неё отреагирует. Ну судя по сему первые 6 бит в первом байте пишем что попало, но лучше 000000 которые потом вылетят.
Приемнику фиолетово что там сдвигается во входном регистре. Этот регистр вообще может быть частью последовательной цепочки совершенно разных микросхем при их последовательном соединении. Все определяется в момент защелкивания данных. Что в этот момент будет в сдвиговом регистре, то и перепишется в выходной буфер приемника. Тут не может быть никаких "мыслей". Это ТИПОВОЕ решение.
Долго думал куда адресовать мой вопрос. То ли сюда, то ли в тему "Программирование PIC на СИ"... Решил сюда. Мой вопрос касается генератора кода для мк PIC16. А конкретно, объявлению указателей на функции для обработки прерываний. Зачем это делается? Я спрашиваю не в широком понимании определения "указатель на функцию" и гибкости ее применения. Меня интересует конкретный момент. Дает ли применение указателей на функцию какой-либо прирост скорости в обработке прерывания конкретно в этих микроконтроллерах? Или в обработчике прерываний
Код:
void __interrupt() ISR(void){
}
можно вызывать напрямую функции обработки прерываний и это никак не повлияет на скорость их обработки?
Пробовал найти в инструкции на компилятор этот ответ, не нашел. В сети тоже пробовал, но видимо неверно задаю вопрос. Надеюсь Вы меня тут поймете, о чем я спрашиваю.
_________________ "Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Нет, не дает. В обработчике лучше вообще ничего не вызывать, а прямо инлайнить функции в его тело. Вызов функции через указатель на этой платформе задействует вычисляемый переход. Это лишние накладные расходы в коде.
Ну пока я так и сделал. Просто опыта с программированием PIC мало, а тут разработчики МСС со своим кодом меня озадачили. Думал это дает выигрыш в скорости в данном компиляторе.
Еще вопрос назрел. Есть директива #defineИдентификатор Подстановка, где в качестве подстановки стоит формула. Где можно посмотреть, какое значение получит Идентификатор? Можно ли это глянуть в каком-нибудь файле или вывести как-то в сообщениях компилятора? Это чисто для подстраховки мне сейчас понадобилось. Сейчас выкручиваюсь так: объявляю переменные, присваиваю им Идентификатор и в симуляторе смотрю полученные данные. Это несколько неудобно в плане того, что потом приходится подчищать код от лишнего мусора.
Да в том то и дело, что я проверил через поиск все файлы внутри проекта. Особенно настойчиво искал в папке dist по Идентификатору. И не нашел. Какое расширение имеет файл дизасма? *.lst?
Не надо искать. Надо сходить в меню: Window-Debugging-Output. И если там нет листинга, то там есть причина его отсутствия, которую и нужно устранить. Иной вариант поиска требуемого - просмотр Program Memory. Включаете в среде симулятор, ставите брейкпойнт в исходнике и находите этот же брейкпойнт в окне программной памяти.
Надо сходить в меню: Window-Debugging-Output. И если там нет листинга, то там есть причина его отсутствия, которую и нужно устранить.
Листинига не было. Зато выскочило окно с подсказкой где и как его активировать. Спасибо за наводку.
Теперь назрел вопрос более глобальный. И тут я уже столкнулся с сильной проблемой. Есть AN526 с математическими функциями на ассемблере. Мне для среднего семейства сейчас понадобилось прикрутить быструю математику. Но в этом апноте код написан для MPASM. как его прикрутить к XC8, да еще и к проекту, написанному на С? В частности библиотеку умножения 16-битных значений (см. вложение). Есть инструкции на компилятор https://microchipdeveloper.com/swtools:pic-asm. Но я что-то делаю не так. Постоянно выводит ошибку синтаксиса на макрос. Да и с регистром STATUS не понятно, тоже постоянно строчка висит в ошибке. Хотя библиотека xc.inc подключена. Я совсем мало знаю ассемблер. Превожу, так сказать, со словарем (то есть с описанием инструкций в даташите) и очень долго. Но тут другого выхода нет. Нужна математика. Или мне проще разобраться с кодом и переписать его на С? Подскажите как лучше! Я просто опасаюсь, что код на С все равно будет работать медленнее. Или это не так?
PS. микроконтроллер PIC16F1936, забыл упомянуть. В файле mpreg.h указан другой мк. Но я его приложил для справки, поскольку он шел с библиотекой
Пардон, а нафига в проект на Си пихать вставки с математикой(!) на асме?? Для того люди на Си и переходят, чтобы извлечение квадратного корня из числа не набивать три сотни строчек кода..
Пардон, а нафига в проект на Си пихать вставки с математикой(!) на асме??
Для скорости обработки потока данных. У данного мк нет аппаратного умножения. Если в коде будет куча операций умножения, то нет гарантии, что компилятор сделает оптимальный быстрый код. Я не программист и не студент, но поставлена такая задача. Надо попробовать и сравнить потом по скорости обработки. PS. и еще... Все математические библиотеки в компиляторе написаны под общую задачу и не оптимальны по скорости обработки и по коду.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения