:::: MENU ::::

keil, map-файл и занятая память

В проекте в файле с расширением .map в конце указаны:

Total RO Size (Code + RO Data) 5496 ( 5.37kB)
Total RW Size (RW Data + ZI Data) 10472 ( 10.23kB)
Total ROM Size (Code + RO Data + RW Data) 5572 ( 5.44kB)

Total RW Size — RAM (оперативка) занимаемая программой
Total ROM Size — FLASH занимаемая программой


Подтяжка USB шины — определяет скорость обмена

На самом деле подтяжки в USB устроены так:

  • pull-up на D- на стороне девайса — девайс говорит, что он Low-speed;
  • pull-up на D+ на стороне девайса — девайс говорит, что он Full-speed или High-speed (уточняется в дальнейшем диалоге с хостом);
  • оба пина без подтяжек на стороне девайса — он отключен от шины, и хост с ним не работает;

STM32, USART прерывания, отличие TC и TXE

Регистр статуса модуля USART, USART_SR — в нем находятся флаги, указывающие на текущее состояние модуля.

PE (разряд 0) — ошибка паритета при приеме байта. Можно задавать четное или нечетное число единиц в принимаемом байте. Если приняли байт, а в нем другое количество единиц, значит имеем ошибку.

FE (разряд 1) — ошибка кадра при приеме байта, т.е. первый стоп-бит принятой посылки равен 0.

NE (разряд 2) — флаг наличия шума. Ставится аппаратно, когда обнаружен шум в принимаемом кадре.

RXNE (разряд 5) — в регистре данных приема есть данные, т.е. принят байт данных, нужно срочно что-то делать.

TC (разряд 6) — передача завершена. Если регистр передачи данных пуст (на что указывает флаг TXE регистра USART_SR) и в USART_CR1 бит TCIE=1, то генерируется прерывание.

TXE (разряд 7) — регистр данных передачи пуст.

В чем отличие TXE от TC ?

USART передает данные из сдвигового регистра. А в этот сдвиговый регистр они попадают из регистра DR: процессор записывает данные в DR и в нем они будут находиться пока сдвиговый регистр не освободится. Как только он освободится (данные будут переданы) информация из DR будет переписана в него и будет установлен флаг TXE (регистр данных пуст). Если процессор на это никак не отреагирует, то по освобождению сдвигового регистра будет установлен также флаг TC.


Что такое семафор в ОС

Семафоры — для разделения использования задачами разделяемых ресурсов.

Так например две задачи должны использовать один и тот-же USART. Одновременно они это делать не должны. И если вдруг задача 1 использует usart и произошла смена контекста на задачу 2. И задача 2 тоже хочет использовать USART, то семафор должен помешать задаче 2.

Семафор это переменная(счетчик). Вначале она инициализируется значением — максимальное количество задач, которые могут одновременно использовать разделяемый ресурс.

Каждый раз при входе задачи в разделяемый ресурс данная переменная уменьшается на 1, а при выходе увеличивается на 1. Вторая задача проверяет эту переменную и если она больше нуля — вход разрешен, меньше — запрещен. При входе и выходе задача 2, так-же изменяет эту переменную.



volatile и зависания

Ключевое слово volatile – это спецификатор, применяемый при объявлении переменной. Он сообщает компилятору, что значение переменной может изменяться в любой момент – без какого-либо действия со стороны кода, который компилятор обнаруживает поблизости.

Continue Reading


Битовые операции C

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

Continue Reading



Получение следующего элемента связанного списка из структуры, на которую указывает связанный список

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

Continue Reading



Страницы:1234567