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

 
 
4 страниц V  « < 2 3 4  
Reply to this topicStart new topic
jcxz
сообщение Apr 11 2017, 10:54
Сообщение #46


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AlexKLm @ Apr 11 2017, 12:10) *
vsnprintf линкер нашёл где-то тут:

Вместо всех sprintf-ов и snprintf-ов всегда использую:
extern "C" int _Printf( void *(*)(void *, int), void *, const char *, va_list *);
Она даёт на порядок больше возможностей. И собственно - это и есть базовая функция, которую вызывают все прочие библиотечные *printf-функции.
Имя дано для библиотеки IAR, но в других компиляторах думаю есть аналогичная.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Apr 11 2017, 13:03
Сообщение #47


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



bb-offtopic.gif Судя по последним темам.
Раньше начинали с AVR или PIC. Теперь пришла вторая волна. Они начинают уже с Cortex-M0.
На глаз видны отличия в подходах и проблемы разные.
Раньше, всё же приходилось заглядывать в мануалы. И к чести Atmel можно сказать, что периферия была проста (как правило), даташиты лаконичны. Было много примеров. Можно было в одном примере посмотреть один модуль, в другом - другой и натягать проект. Ну а дальше уже кто как хотел. Если тяп-ляп, то так и оставить, а если кто вдумчивый, то переработать и получить приемлемый результат.
И что мы видим?
Появление HAL и, особенно куба, не убрало проблем, а нагородило их.
Неподготовленному программисту работать с ними достаточно тяжело. Да что говорить... И подготовленному непросто.
Кажущаяся простота подкупает, но, в результате, пользователь получает голимый 0. Сгенерированный проект, как правило не работает, и разборки идут не с камнем, а с кубом. Программист читает и ковыряет какую-то параллельную реальность. И абсолютно ничего не получает взамен. Ни знаний, ни опыта программирования, ни опыта работы с семейством, ни с камнем.
Ну уж лучше разбираться по примерам или библиотекам, как раньше. А то получишь только опыт работы борьбы с кубом.
Go to the top of the page
 
+Quote Post
SSerge
сообщение Apr 11 2017, 14:23
Сообщение #48


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(jcxz @ Apr 11 2017, 17:54) *
Вместо всех sprintf-ов и snprintf-ов всегда использую:
extern "C" int _Printf( void *(*)(void *, int), void *, const char *, va_list *);
Она даёт на порядок больше возможностей. И собственно - это и есть базовая функция, которую вызывают все прочие библиотечные *printf-функции.
Имя дано для библиотеки IAR, но в других компиляторах думаю есть аналогичная.

А Вы в курсе, что в библиотеках IAR нет функции с таким именем? wink.gif
Откройте же EWARM_DevelopmentGuide.ENU.pdf, найдите где там написано про функцию __write и перестаньте закатывать солнце вручную.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 11 2017, 15:00
Сообщение #49


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(SSerge @ Apr 11 2017, 16:23) *
А Вы в курсе, что в библиотеках IAR нет функции с таким именем? wink.gif
Откройте же EWARM_DevelopmentGuide.ENU.pdf, найдите где там написано про функцию __write и перестаньте закатывать солнце вручную.

Да ладно! А у меня компилит и глазом не моргнёт biggrin.gif
И при чём тут __write??? Она совсем о другом.
Go to the top of the page
 
+Quote Post
AlexKLm
сообщение Apr 11 2017, 19:06
Сообщение #50


Частый гость
**

Группа: Свой
Сообщений: 160
Регистрация: 17-03-08
Из: Мурманская
Пользователь №: 35 989



Вот первый результат, когда удача улыбнулась:

__HAL_RCC_SPI1_CLK_DISABLE();

- только тогда удалось быстренько перескочить на ручное управление портом SPI1.
После этого:

HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5);

и сразу обычное для пина:

(в этом месте можно сразу уровень установить заранее при помощи HAL_GPIO_WritePin() )
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

теперь можно шевелить ногой SCK как обычно.

Обратный переход в режим SPI:

GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

__HAL_RCC_SPI1_CLK_ENABLE();

Это на скорую руку, дальнейшая проверка покажет, насколько это правильно.
Обращение к передаче/приёму во время переключения не допустимо,
иначе SPI перестаёт реагировать на управляющие команды.




--------------------
Демократия - это когда считается, что два дурака лучше одного умного
Суверенная демократия - это когда считается, что один дурак лучше двух дураков
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th July 2025 - 22:12
Рейтинг@Mail.ru


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