реклама на сайте
подробности

 
 
> STM32F0xxx USB без HAL
alexf
сообщение Oct 23 2016, 03:03
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 420
Регистрация: 22-12-04
Пользователь №: 1 608



Делаю устройство на STM32F070. Сгенерировал код с USB CDC на кубе, и USB работает (пока) без нареканий. А вот попытки использовать HAL для других целей, скажем USART, создают больше проблем, чем решают. Для меня. Наверное, пользоваться не умею. В результате мешанина из HAL с прямыми обращениями к регистрам. Боюсь это меня рано или поздно узусит за задницу.

Так вот вопрос. Есть ли пример USB CDC без HAL? На F103 легко находится. Уже давно использовал. А для F0? Много ли надо менять, если нет готового кода?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
johnshadow
сообщение Oct 25 2016, 06:30
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 25-09-08
Пользователь №: 40 477



Пример CDC для F072 можно подсмотреть в форке kuldeepdhaka/libopencm3-examples в ветке example/pwm/stm32f07.
под stm32f0xx пришлось в паре мест слегка поправить, т.к. получал hardfault по доступу к невыравненным данным.
типа такого:
Код
diff --git a/libopencm3/usb/usb_standard.c b/libopencm3/usb/usb_standard.c
index d94ceed..da47391 100644
--- a/libopencm3/usb/usb_standard.c
+++ b/libopencm3/usb/usb_standard.c
@@ -130,7 +130,9 @@ static uint16_t build_config_descriptor(usbd_device *usbd_dev,
    }

    /* Fill in wTotalLength. */
-    *(uint16_t *)(tmpbuf + 2) = totallen;
+    //*(uint16_t *)(tmpbuf + 2) = totallen;
+    *(tmpbuf + 2) = totallen & 0xFF;
+    *(tmpbuf + 3) = totallen >> 8;

    return total;
}

я так и не понял почему компилятор не обрабатывает такие ситуации сам (gcc-arm-embedded 5.4 2016q2). может кто из местных объяснит.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 25 2016, 07:41
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (johnshadow @ Oct 25 2016, 09:30) *
я так и не понял почему компилятор не обрабатывает такие ситуации сам
Потому что не обязан. Вы же хотите, чтобы ваши программы были маленькими и быстрыми. Используете явное приведение типов - вся ответственность на вас.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
johnshadow
сообщение Oct 25 2016, 08:49
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 25-09-08
Пользователь №: 40 477



Цитата(Сергей Борщ @ Oct 25 2016, 10:41) *
Потому что не обязан. Вы же хотите, чтобы ваши программы были маленькими и быстрыми. Используете явное приведение типов - вся ответственность на вас.

Я просто думал, что для cortex-m0 компилятор генерирует безопасный код в тех случаях когда адрес переменной на момент компиляции не известен. Тогда мне не ясно назначение опции -mno-unaligned-access. Ладно бы hardfault возникал при оптимизациях Os или O3,
где побайтовый доступ потенциально приводил бы к раздутию кода или снижению производительности.

2Allregia: Нет, на IAR\KEil не проверял.

Цитата(Kabdim @ Oct 25 2016, 11:10) *
Кстати патч на мой вкус не очень. В таких случая лучше либо использовать memcpy (в релизе его соптимизируют в инлайн), либо код вроде такого:
...
В вашем решении много битовых операций на ровном месте.

memcpy при оптимизациях Os\O3 меня уже пару раз подводила. решение со структурой действительно потенциально быстрее, но
не будет ли генерироваться ассемблерный код, который будет вылетать при невыровненном доступе?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 25 2016, 10:26
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (johnshadow @ Oct 25 2016, 11:49) *
memcpy при оптимизациях Os\O3 меня уже пару раз подводила.
Интересно. Когда подведет еще раз - выложите сюда, вероятнее всего вы просто не умеете ее готовить.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- alexf   STM32F0xxx USB без HAL   Oct 23 2016, 03:03
- - Allregia   Цитата(alexf @ Oct 23 2016, 04:03) В резу...   Oct 23 2016, 05:14
- - AHTOXA   Цитата(alexf @ Oct 23 2016, 08:03) Есть л...   Oct 23 2016, 07:36
|- - alexf   Цитата(AHTOXA @ Oct 23 2016, 00:36) Приме...   Oct 23 2016, 19:19
- - Genadi Zawidowski   USBD_LL_Transmit вообще-то вызывается в обработчик...   Oct 24 2016, 08:02
- - johnshadow   использую libopencm3 на stm32f072 - CDC (для основ...   Oct 24 2016, 08:20
|- - Сергей Борщ   QUOTE (johnshadow @ Oct 24 2016, 11:20) и...   Oct 24 2016, 10:01
|- - johnshadow   Цитата(Сергей Борщ @ Oct 24 2016, 13:01) ...   Oct 24 2016, 10:07
|- - esaulenka   Цитата(Сергей Борщ @ Oct 24 2016, 13:01) ...   Oct 24 2016, 20:16
|- - Allregia   Цитата(johnshadow @ Oct 25 2016, 07:30) я...   Oct 25 2016, 07:10
||- - Kabdim   Цитата(johnshadow @ Oct 25 2016, 11:49) m...   Oct 25 2016, 09:01
||- - johnshadow   Цитата(Сергей Борщ @ Oct 25 2016, 13:26) ...   Oct 25 2016, 13:03
|- - Kabdim   Цитата(johnshadow @ Oct 25 2016, 09:30) я...   Oct 25 2016, 08:10
|- - AHTOXA   Цитата(Kabdim @ Oct 25 2016, 13:10) Кодty...   Oct 25 2016, 10:21
|- - Kabdim   Цитата(AHTOXA @ Oct 25 2016, 13:21) Да ла...   Oct 25 2016, 11:41
- - Kabdim   Удалил, попутал со знаковым переполнением.   Oct 25 2016, 13:11


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01412 секунд с 7
ELECTRONIX ©2004-2016