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

Ну это опять какие-то абстракции, один мой знакомый вообще говорил, что прерывания - зло, правда так и не написал ничего особо путного...

С точки зрения безопасности кода прерывания и указатели зло... а вы не знали???

То-то я и смотрю... пусть много прерываний, зато коротких... а коротких ли???

Вот и правильно zltigo ткнул в унылый и бездумный тупоперенос замшелых пик-авр-решений на современные платформы...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ужас sm.gif. Вообще-то вектора на IRQ родного контроллера прерывания от ARM были и есть

я имел ввиду что FIQ вызывало всегда 1 обработчик не разные под разные флаги, а один. Понятно что вектор был, но один фиксированный и тактов на выбор вектора не тратилось.

FIQ вызывался за 5 тактов? Ну тогда да почти 3-4 кратное преимущество против NVIC с учетом доп действий на сохранения всего и вся.

Тогда согласен NVIC не абсолютное добро, но все же чертовски удобен%)

 

 

И что... эти 1000 тактов не могут прерваться другим прерыванием... если нужно???

Правильно говорят... "АВР - это диагноз!"(С)...

Кричать, махать руками, и попусту оскорблять людей - это комплексы, вам надо с ними бороться.

 

Самое высоко приоритетное прерывание, вызываемое каждые 10 мкСек, на процессоре с частотой 100 МГц, имеющее обработчик длинной 1000 тактов и более НЕ может быть ничем прервано. Даже если нужно, только путем отключения вызова. И тут АВР не причем. (естественно кроме прерываний типа хард фаулт, сброс и так далее, но они не являются частью программы)

 

 

В общем - да... частые прерывания такой же бред как и длинные... а может ещё и хуже... большие потери на вход/выход... а так... по задаче...

И вообще... все эти фобии... из области скелетов в шкафу...

С точки зрения безопасности кода прерывания и указатели зло... а вы не знали???

Нет не зло, при правильном их использовании они ничуть не нарушают безопасность кода, даже не снижают детерминированность поведения программы.

 

как можно без прерывания, тем более без частого решить такую задачу: каждые 10 мкСек в зависимости от состояния входного порта задавать состояние выходного. При этом важно чтобы смены состояния происходили максимально синхронно и как можно с более равными интервалами. При этом проц должен выполнять и другие задачи, типа обслуживания интерфейса с пользователем через езернет. Никакая операционка вам не поможет и супер луп будет не точен....

 

Так что давайте, вы показали что мы все дураки, и с диагнозом, удивите теперь какой вы молодец?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кричать, махать руками, и попусту оскорблять людей - это комплексы, вам надо с ними бороться.

С вашими??? Спасибо... мне и даром не надо... ))))))))

как можно без прерывания, тем более без частого решить такую задачу: каждые 10 мкСек в зависимости от состояния входного порта задавать состояние выходного. При этом важно чтобы смены состояния происходили максимально синхронно и как можно с более равными интервалами. При этом проц должен выполнять и другие задачи, типа обслуживания интерфейса с пользователем через езернет. Никакая операционка вам не поможет и супер луп будет не точен....

Зашибись... Вы предлагаете мне дать решение задачи... которую и сами не можете толком описать... какое-то входное, какое-то выходное... И от этого считаете своё решение истинно правильным??? Ну что же... "Бытие определяет сознание!"(С)...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы предлагаете мне дать решение задачи... которую и сами не можете толком описать... какое-то входное, какое-то выходное...

Одним из признаков деменции является невозможность мыслить абстрактно ;) берегите себя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как можно без прерывания, тем более без частого решить такую задачу: каждые 10 мкСек в зависимости от состояния входного порта задавать состояние выходного. При этом важно чтобы смены состояния происходили максимально синхронно и как можно с более равными интервалами.

Отдельный обработчик прерывания по изменению "входного порта". Для дискретизации входа на выход на борту контроллера явно есть и аппаратные средства, например таймера управляемые по входу. Незазорно и логический элемент снаружи контроллера подцепить, если уж действительно важно жесточайшее обеспечение реального времени. Ну и тацмерные прерывания 10 микросекунд тоже не есть абсолютное табу, но только, как Вы рассказали, крутить в нем еще и IP стек, это.....

При этом проц должен выполнять и другие задачи, типа обслуживания интерфейса с пользователем через езернет. Никакая операционка вам не поможет и супер луп будет не точен....

Повторю еще раз - не надо рассказывать, что Ethernet, IP стек и уж тем более стоящий за ним "ИНТЕРФЕЙС С ПОЛЬЗОВАТЕЛЕМ" нуждаются в "точном" 10 микросекундном обслуживании. Я понимаю, что 100 мегарецами кортекса сие заставлено работать и "работает", но так-же понимаю, что изобретен паровоз пар у которого уходит в свисток. Просто НЕ красиво. Некрасивые самолеты не летают©.

Про "операционка вам не поможет" не понял. Вы понимаете под операционками только Ваш "суперлуп"? Операционные системы реального времени таки строятся с детерминированным временеми реакции, да и обработчики прерываний в RTOS для обеспечения максимально возможного жесткого реального времени никто не отменял.

А вот когда все ваяют без RTOS в суперлупе по полингу, тогда да, тогда и возникает ну "очень нужные" жирные обработчики прерываний, и микросекундные таймерные прерывания. Тогда и контроллеры прерываний а-ля NVIC действительно в большую радость, ибо обеспечиваемая ими вложенность и приоритетность обработчиков прерываний, есть костыль заменяющий механизмы переключения и приоритета задач в RTOS.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Одним из признаков деменции является невозможность мыслить абстрактно ;)

Абстрактное решение для абстрактной задачи... которое подразумевает абстрактный результат??? Это круто... :D

Вариант TIM+DMA... не??? Или непрерывные прерывания кошернее и привычнее... даже если их частота достигнет максимума в несколько МГЦ???

Ну а что... будут самые большие и нелепые костыли в мире!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А.... меня не так поняли:)

 

есть порт А - входной многобитовый, есть порт В - выходной многобитовый.

 

B = F(A). Это не какой то проброс сигналов, это формирвоания вида порта В на основе вида порта А. И это должно происходить каждые 10 мкС. Но при этом проц занимается и другими делами, обслуживает стэк, запросы пользователя, МАК, таймеры и так далее...

 

я написал эту функцию F, выравнял в ней пути ветвления, чтобы результат получался за одинаковое число тактов по какому бы пути не шел. И запихал ее обработчиком этого 10 мкСек прерывания, так как ее вызывают строго через 10 мкСек, пути выровнены, то и результат получается строго периодически.

 

Но это возможно только в том случае, если между появлением флага прерывания и его вызовов проходит одно число тактов. Без вытеснения и вложенности это обеспечить нельзя, другие прерывания могли задерживать реакцию на это, и все бы сбивалось.

 

Обработку стека и прочее я конечно же не пихал в это 10 мкС прерывание:)))).

 

 

Операционные системы реального времени таки строятся с детерминированным временеми реакции, да и обработчики прерываний в RTOS для обеспечения максимально возможного жесткого реального времени никто не отменял.

Именно временем реакции, задав его 10 мкС - мы 1. напряжем проц, он только и будет щелкать задачи, 2. мы не добьемся синхронности и периодичности, потому что внутри этого интервала переключение может плавать....

 

Вот и все что я имел ввиду.

 

даже если их частота достигнет максимума в несколько МГЦ???

10 мкСек интервал времени дает частоту 100 КГц, с каких мор 100 КГц стали несколькими мегагерцами? или 0.1 - это несколько?

Думаю вам стоит взять на себя труд и сначала почитать и понять что написано, потом подумать и сформировать ответ, а то пока все тыкаете пальцем в небо и мажете%)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я написал эту функцию F, выравнял в ней пути ветвления, чтобы результат получался за одинаковое число тактов по какому бы пути не шел. И запихал ее обработчиком этого 10 мкСек прерывания, так как ее вызывают строго через 10 мкСек, пути выровнены, то и результат получается строго периодически.

 

Но это возможно только в том случае, если между появлением флага прерывания и его вызовов проходит одно число тактов. Без вытеснения и вложенности это обеспечить нельзя, другие прерывания могли задерживать реакцию на это, и все бы сбивалось.

 

Обработку стека и прочее я конечно же не пихал в это 10 мкС прерывание:)))).

Т.е. ... основная задача это бесконечный ногодрыг в прерывании... с применением АСМа и подпиливанием ножовкой конвейера??? Типичное решение в духе МК-атавизмов... :biggrin:

Никаких других прерываний и транзакций ДМА... несмотря на "проц занимается и другими делами, обслуживает стэк, запросы пользователя, МАК, таймеры и так далее..."... и оно ещё и как-то работает... не верится...

Вы сами хоть осознаёте... всю нелепость вами написанного???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пользователь HHIMERA в течение месяца будет этот форум только читать. Причина - грубость, обсуждение личности.

Если среди ближайших десяти постов не увижу полезного обсуждения Cortex-M7, тему закрою.

Модератор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я написал эту функцию F, выравнял в ней пути ветвления, чтобы результат получался за одинаковое число тактов по какому бы пути не шел. И запихал ее обработчиком этого 10 мкСек прерывания, так как ее вызывают строго через 10 мкСек, пути выровнены, то и результат получается строго периодически.

Но это возможно только в том случае, если между появлением флага прерывания и его вызовов проходит одно число тактов. Без вытеснения и вложенности это обеспечить нельзя, другие прерывания могли задерживать реакцию на это, и все бы сбивалось.

Я надеюсь, что вы так-же ТЕПЕРЬ ПОНЯЛИ, описаная Вами более подробно задача еще ЛУЧШЕ ложится на "старый" FIQ ? Получаем и более быстую реакцию и отсутствующий шеститактовый джиттер при прерывании высокоприоритетным низкоприоритетного перерывания и меньшие общие расходы на обслуживание вот такого супер приоритетного прерывания. Так-что доказать жизненную необходимость кортексовского NVIC для решения данной задачи Вам не удалось, точнее даже наоборот :) :(

Обработку стека и прочее я конечно же не пихал в это 10 мкС прерывание:)))).

Тем не менее из Вашего первого поста сие понималось именно так, что и послужило причиной комментариев. К собственно короткому обработчику 10us прерываний, как уже писал неодократно, явной неприязни нет. Хотя думать о том, как обходить софтовый ногодрыг надо в первую очередь. Для минимизации такого использования этого у кортексов, как правило, есть весьма развитая периферия, которую можно подумав использовать не только каноническим способами, особенно если добавить снаружи немного логики, зачастую даже одногейтовой.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет. Эволюции "аврок и пиков" никакой нет. Они просто вымерли, не как динозавры, ибо в зоопарках еще живут, но вымерли.

Так в том-то и дело, что не вымерли. Нужен мне опять камень с RAM примерно 300к для данных плюс система и прочее. То есть килобайт 400 хочу, мегабайты не нужны.

Смотрю на реалии (фильтрую дижикей что реально доступно, в нормальных корпусах до 208 ног)- вижу только 3 фирмы, Renesas, ST, Microchip. Объемы ОЗУ- от 320к до 552 к.

 

STM- только 320 к. Ну, может и можно прогнуться и умяться в это. Один тип доступен, STM32F746VGT6. Корпус LQFP100, цена $15.94 от 10 до 100 шт.

 

Renesas: самый крутой по памяти, 552 к. тут выбор больше, 16 видов, от 100 ног до 176. Цена- от $16.40 (R5F564MFCDFP, 10-100шт). Но в наличие каждого типа строго по 25 штук. Или еще никто не покупал, или хитрый маркетинговый ход. Новье или наоборот тупик?

 

И смотрю на "вымерший" пик: ОЗУ 512к, 30 типов, есть даже корпус на 64 пина, цена - (PIC32MZ1024ECG064) $9.64 от 10 до 25шт, $8.83 от 25 шт до 100шт.

 

Подытожу: если пики и вымирают, то при этом издают очень хороший запах, привлекающий некоторых разработчиков.

 

Не, я конечно, могу впихнуть что-то с внешней параллельной памятью и дорисовать вннешнюю память, используя STM32 (очень хочу везде на него перейти), но, млин, никакой выгоды не вижу, одни проблемы: больше места, больше стоимость, ниже надежность.

Вот и идут в параллель проекты- на модном STM32 и на немодном PIC32.

 

Как только STM32 добавит памяти (512к в 64-ногом корпусе)- тут же забуду про пики.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И смотрю на "вымерший" пик: ОЗУ 512к, 30 типов...

Верю, что всегда можно ОБМАНУТЬ себя тем, что нужен вот именно с "перламутровыми пуговицами" и никакой другой.

если они и вымирают, то при этом издают очень хороший запах, привлекающий некоторых разработчиков.

Нет, только тех, кто не находит в себе сил переходить на текущие майнстримовские решения.

Ни один вменяемый разработчик, который реально работает с разными типами контроллеров не полезет вдруг в PIC только по причине,

что вдруг у него оказалось 512К на борту. Такие чудесные 30 типов это уже безумие, это уже на самом деле агония, когда уже ПЫТАЮТСЯ занимать своей продукцией все мелкие ОСТАВШИЕСЯ ниши.

Вымираемость пиков, увы, сказывается и на из доступности ПОСЛЕ за пределами покупки со склада каталожной фирмы.

С нештучными количествами тоже проблема - от трех месяцев и до бесконечности поставка. Это я, как имеющий в производстве несколько изделий на PIC партиями по 10000 штук, могу со всей определенностью говорить :(.

Не, я конечно, могу впихнуть что-то с внешней параллельнойпамятью

Да и с последовательной, практически наверняка, тоже. Как и для штучных вещей и корпус побольше использовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При этом важно чтобы смены состояния происходили максимально синхронно и как можно с более равными интервалами. При этом проц должен выполнять и другие задачи, типа обслуживания интерфейса с пользователем через езернет. Никакая операционка вам не поможет и супер луп будет не точен....

именно так и делал

цикл 2 блока по 240 тактов, на 16 мгц тактовой это 33кгц

расчет pwm на 2 канала sin/cos, приём/отправка по uart, опрос портов и реакция

всё чётко, строго синхронно и максимально точно

сейчас то же самое, на аж 160 мгц stm32 - 17мкс без оптимизации, 12 мкс с максимальной оптимизацией и аппаратными вычислениями

т.е. всего раза в два лучше

и это без входа/выхода в прерывание, т.е. по факту может оказаться и не лучше

и 146% словим джиттер, на приоритетах, на кэше, на хитрых предсказателях ветвлений - за что боролись ?

Изменено пользователем Огурцов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сейчас потратим 10 постов что дал нам модератор и тему закроют:(

 

сейчас то же самое, на аж 160 мгц stm32 - 17мкс без оптимизации, 12 мкс с максимальной оптимизацией и аппаратными вычислениями

т.е. всего раза в два лучше

Пихните функцию в РАМ сразу полегчает.

 

 

именно так и делал

цикл 2 блока по 240 тактов, на 16 мгц тактовой это 33кгц

расчет pwm на 2 канала sin/cos, приём/отправка по uart, опрос портов и реакция

 

не понял как, без прерывания? просто в супер лупе? А как вы синхронность и периодичность обеспечили? Если приходят данные и возникают внешние прерывания всяко прцо отвлекается, и супер луп выполняется с другой периодичностью...

 

 

Я надеюсь, что вы так-же ТЕПЕРЬ ПОНЯЛИ, описаная Вами более подробно задача еще ЛУЧШЕ ложится на "старый" FIQ ?

я это давно понял, и даже где-то выше писал или хотел: что пока процесс один - ОК, а если их будет 2 со сдвигом фазы, то 1 FIQ не хватит (вернее в нем придется писать доп логику для определения 1 или 2 процесс, а прерывание 2 первым уже точно не организовать) . FIQ фактически и было то одно доступное вложенное прерывание, а теперь их стало больше. Как я понимаю...

Но оставим это, я уже выше согласился что у FIQ было 3-4 кратное преимущество перед NVIC, и что NVIC не абсолютное добро...

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...