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

Исключение Hard Fault на Cortex-M3

1 hour ago, koluna said:
0x0800165e in exchTXEHandler () at ./src/libs/exchange/exchange.c:361

вот здесь собака порылась

1 hour ago, koluna said:

Что значат строки <signal handler called>

в данном случае прерывание

 

1 hour ago, koluna said:

говорит о том, что что-то пошло не так?

перетирается весь стек

 

1 hour ago, koluna said:

А сейчас слишком много нового и непонятного...

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

как разберётесь что к чему - вернётесь обратно к тому, где непонятно что и как делать

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


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

5 hours ago, kpv said:

RXNE это не только правильный приём, но и overrun error туда может проскочить, если разрешено.

я из всего массива не уловил: советовали или нет. нужно сбрасывать(хотя бы сбрасывать ) вообще все возможные флаги при приеме. а это и FE  и OVR и PE.

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


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

1 minute ago, firstvald said:

я из всего массива не уловил

мы только вначале пути. первый сезон примерно вторая серия

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


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

просто когда учат процессорам то показывают работающий в симуляторе примерчик который в терминал передает какую нибудь фигню. реальный обмен приводит в приемник все что угодно и в момент подцепления разъема в приемнике встают практически все флаги. и с этим надо что то делать. (стреляй Глеб Егорыч) хотябы все сбрасывать. а! во FreeRtos при приеме если не успевал доставать принятый байт по причине того что использовался у одного таска приоритет реал тайм попадал в хард. когда не использовал реал - не попадал.

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


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

1 час назад, firstvald сказал:

я из всего массива не уловил: советовали или нет. нужно сбрасывать(хотя бы сбрасывать ) вообще все возможные флаги при приеме. а это и FE  и OVR и PE.

Как правило в любом МК эти флаги сбрасываются обычным чтением регистра принятых данных. Никакие другие сбросы для них не нужны.

52 минуты назад, firstvald сказал:

в момент подцепления разъема в приемнике встают практически все флаги. и с этим надо что то делать.

Просто прочитать принятое слово и всё.

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


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

20 minutes ago, jcxz said:

Никакие другие сбросы для них не нужны.

обычно да, но жизнь несколько сложнее 🙂

если мы считали данные, а бит продолжает стоять?

 

23 minutes ago, jcxz said:

Просто прочитать принятое слово и всё.

прочитать лучше даташит

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


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

37 минут назад, kpv сказал:

если мы считали данные, а бит продолжает стоять?

значит пришёл новый символ, для которого и установился заново этот флаг.

37 минут назад, kpv сказал:

прочитать лучше даташит

А там наверняка написано, что флаги хранятся вместе с символами, на которых они установились. Даже в тех МК, в которых есть FIFO в UART глубиной более одного слова, все эти флаги - это просто дополнительные биты, хранимые вместе со словами принятых данных. Для каждого слова данных - свой комплект флагов. А флаги отображаемые в регистре флагов - это просто содержимое флагов самого верхнего слова FIFO.

PS: Кстати - в нормальных, продуманных МК, можно считывать верхнее слово из FIFO сразу с флагами состояния. С одновременным удалением его из FIFO. Одним словом, одной операцией.

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


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

3 hours ago, koluna said:
    if(txCnt == txSize)

Вот ещё раз: не делайте так.

Я не понимаю, почему у вас txSize портится, но если бы вы написали if (txCnt >= txSize)  всего этого топика не было бы.

2 hours ago, firstvald said:

нужно сбрасывать(хотя бы сбрасывать ) вообще все возможные флаги при приеме. а это и FE  и OVR и PE

По-хорошему - да. Но (только что освежил в памяти соотв. картинку из RefManual) FrameError / ParityError / NoiseError дёрнут прерывание, только если они явно разрешены. А OverrunError без ReceiveNotEmpty не бывает, как я понимаю - его и имеющийся код сбросит.
Ну и в любом случае, это приведёт к зависанию в прерывании, а здесь и сейчас у нас bus fault.

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


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

1 hour ago, jcxz said:

Как правило в любом МК эти флаги сбрасываются обычным чтением регистра принятых данных. Никакие другие сбросы для них не нужны.

Просто прочитать принятое слово и всё.

нет

27 minutes ago, esaulenka said:

Вот ещё раз: не делайте так.

Я не понимаю, почему у вас txSize портится, но если бы вы написали if (txCnt >= txSize)  всего этого топика не было бы.

По-хорошему - да. Но (только что освежил в памяти соотв. картинку из RefManual) FrameError / ParityError / NoiseError дёрнут прерывание, только если они явно разрешены. А OverrunError без ReceiveNotEmpty не бывает, как я понимаю - его и имеющийся код сбросит.
Ну и в любом случае, это приведёт к зависанию в прерывании, а здесь и сейчас у нас bus fault.

а вот это если все хорошо и все правильно настроено. и то я тоже не ждал подляны но FE  у меня подвесил прибор который ушел в релиз. хотя вроде бы лишнее не было включено. тонкий момент еще может быть когда мы еще только все настраиваем в момент подачи питания и в этот момент на вход уарта начинает валиться все что происходит при включении питания и может уже снаружи. и несброшенные флаги влегкую оставляют прибор без уарта. а так услышал краем уха что там какие то таски были и еще обрезки от чего то. я не просто так сказал что в фриртосе ловил хард по уарту. что там за обрезки топик использует?

ымбеддеры на привале - роскошны.

42 minutes ago, jcxz said:

значит пришёл новый символ, для которого и установился заново этот флаг.

А там наверняка написано, что флаги хранятся вместе с символами, на которых они установились. Даже в тех МК, в которых есть FIFO в UART глубиной более одного слова, все эти флаги - это просто дополнительные биты, хранимые вместе со словами принятых данных. Для каждого слова данных - свой комплект флагов. А флаги отображаемые в регистре флагов - это просто содержимое флагов самого верхнего слова FIFO.

PS: Кстати - в нормальных, продуманных МК, можно считывать верхнее слово из FIFO сразу с флагами состояния. С одновременным удалением его из FIFO. Одним словом, одной операцией.

лет 50 мы будем сидеть на 103 процессоре. а после прорыва и освоением его к 2038 году отечественной промышленностью и все 100.

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


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

9 часов назад, jcxz сказал:

Не обязательно. Только если соответствующий бит валидности установлен.

Посмотрите - он установлен.

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


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

5 минут назад, firstvald сказал:

см мануал

В мануале написано то, что я сказал. Это вам надо "см. мануал".

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


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

On 8/13/2024 at 9:25 PM, jcxz said:

В мануале написано то, что я сказал. 

Не совсем. Сначала статус регистр надо прочитать, а потом регистр данных. Тогда сбросятся.

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


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

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

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

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

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

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

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

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

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

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