Никак не пытаюсь переврать, разумеется. Или для вас перевирать слова собеседника - норма, которой вы ожидаете и от других?VladislavS писал(а):Как бы вы не пытались переврать
А через все остальные программаторы, видимо, не норма. Интересные у вас представления...VladislavS писал(а):Отлаживать через WCH-Link совершенно нормально. Прошивать через WCH-Link, USB или UART - более чем нормально. Все ваши нечеловеческие страдания по этому поводу это какая-то нездоровая фобия.
Еще и какие-то нечеловеческие страдания нафантазировали.
Это у вас, виндузятников, принято скачивать все подряд, запускать под админскими правами, а потом лечиться от вирусов.VladislavS писал(а):Скачать на официальном сайте и запустить даблкликом не судьба? Это выше ваших способностей?
Вам видео снять как он три раза подряд падает с ошибкой, а потом показывает кнопки поверх окна?VladislavS писал(а):Работает как автомат калашникова
Не перекладывайте свои проблемы на меня. Сколько бы раз я не прочитал написанное или нарисованное, мне неоткуда узнать что же вы при этом подразумевали.VladislavS писал(а):Опять таки, я не виноват, что вы не можете уследить за контекстом беседы. Могу, разве что, посоветовать перечитывать по несколько раз.
Типичный сценарий: человек выкладывает картинку или цитату, якобы относящуюся к теме. Оппонент, исходя из своего контекста, что-то по ней отвечает. Первый возмущается, что его неправильно поняли, и он имел в виду вовсе не то, что написал, а что-то другое. И, если бы залезть к нему в голову, воспроизвести его логику, оно может и будет похоже. А если воспользоваться другой начальной информацией - будет похоже на что-то другое.
Именно поэтому, глядя на рандомную картинку, я отказываюсь как-то ее комментировать. Мне неизвестно, что вы хотели ей сказать.
Вы бы хоть проверили сначала, прежде чем чушь нести.VladislavS писал(а):Зашибись, просто не вызовется прерывание. Это называется "всё работает"? А теперь усложним задачу - не прерывание, а немаскируемое исключение. Вызовется и таки все сломает.
Его, видите ли, удивляет, что если у прерываний не настроена вложенность, то они не будут прерывать друг друга. Вот ведь неожиданность, правда, VladislavS?
А теперь вспоминаем контекст, в котором этот код был приведен: вы пытались показать насколько в ch32 прерывания реализованы лучше, чем в gd32. Ни о какой вложенности речи не шло.VladislavS писал(а):Интересно получается. Я показал код, который как раз эти "некие манипуляции" делает. У вас он вызвал вопрос "какой-то странный код".
Да и сам ваш код, со всеми этими шаблонами, отнюдь не образец читаемости. Собственно, если уж хочется использовать вложенные прерывания, то работу с CSR'ами было бы логично вынести в функцию. Одну в начале прерывания, вторую в конце.
Можно подумать, это я не знаю, что чтобы срабатывали вложенные прерывания, надо как минимум выставить MIE. Иначе говоря, в моем примере все будет работать именно так, как и должно: во время выполнения одного прерывания все остальные ждут.VladislavS писал(а):И после этого именно я не читал документацию? Ну совесть то поимейте.
А если вы хотели сказать, что в моем примере не поддерживаются вложенные прерывания, так это и надо было сказать, а не кидаться рандомными картинками в надежде что я угадаю что же вам показалось неправильным. Как видите, правильно сделал, что не стал гадать.
Знаете, мне уже надоело это пустословие. То одно у вас сломается, то другое. Почему у меня-то не ломается?!VladislavS писал(а):1. Стек сломается при вложенных прерываниях.
Напоминаю: это тестовый код. Если бы я хотел использовать его в рабочем режиме, то наверное воспользовался бы упомянутыми вами регистрами, да и вообще причесал все это и оформил в виде отдельных функций. Но такой задачи у меня не стояло.VladislavS писал(а):2. Для быстрого сохранения контекста в ядре есть регистры pushmcause, pushmepc и pushmsubm.
Это в любом случае сохраняемые регистры, их так и так на стек класть. А читать три CSR и по очереди класть их на стек через общий регистр было бы дольше.VladislavS писал(а):3. Зачем целых три регистра временных задействовано? Можно одним обойтись - меньше в стек лазить.
Где? Сначала сохранил t0, t1, a0, ra, потом mepc, mcause и msubm. Выполнил код обработчика. Восстановил в обратном порядке. Можно было, конечно, за один push сохранить 7 регистров, половину рабочих, половину под CSR'ы, но на стек как-то надежнее.VladislavS писал(а):4. Зачем по несколько раз регистры в стек кочуют? В начале сохранил, в конце восстановил.
Или вы на pushmcause намекаете?
А в других бывает другой механизм. Те же ARM'ы сами сохраняют регистры на стек. И мне такой подход нравится больше: обработчик прерывания ничем не отличается от обычной функции.VladislavS писал(а):Ну надо, же как интересноВ других контроллерах приоритетных прерываний не бывает?
Ну ок. Правда, не уверен зачем вы это здесь написали: для полноценной реализации приоритетного обработчика этого недостаточно, так и так придется лезть в документацию.VladislavS писал(а):При вызове обработчика глобальные прерывания автоматически запрещаются. После того как сохранён контекст прерывания разрешаются либо руками в векторном режиме, либо автоматически в момент перехода на реальный обработчик по команде "csrrw ra, CSR_JALMNXTI, ra".
В любом случае ни приоритетные прерывания, ни не-векторный режим меня сейчас не интересуют.


