jcxz 184 11 апреля, 2017 Опубликовано 11 апреля, 2017 · Жалоба vsnprintf линкер нашёл где-то тут: Вместо всех sprintf-ов и snprintf-ов всегда использую: extern "C" int _Printf( void *(*)(void *, int), void *, const char *, va_list *); Она даёт на порядок больше возможностей. И собственно - это и есть базовая функция, которую вызывают все прочие библиотечные *printf-функции. Имя дано для библиотеки IAR, но в других компиляторах думаю есть аналогичная. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 11 апреля, 2017 Опубликовано 11 апреля, 2017 · Жалоба :bb-offtopic: Судя по последним темам. Раньше начинали с AVR или PIC. Теперь пришла вторая волна. Они начинают уже с Cortex-M0. На глаз видны отличия в подходах и проблемы разные. Раньше, всё же приходилось заглядывать в мануалы. И к чести Atmel можно сказать, что периферия была проста (как правило), даташиты лаконичны. Было много примеров. Можно было в одном примере посмотреть один модуль, в другом - другой и натягать проект. Ну а дальше уже кто как хотел. Если тяп-ляп, то так и оставить, а если кто вдумчивый, то переработать и получить приемлемый результат. И что мы видим? Появление HAL и, особенно куба, не убрало проблем, а нагородило их. Неподготовленному программисту работать с ними достаточно тяжело. Да что говорить... И подготовленному непросто. Кажущаяся простота подкупает, но, в результате, пользователь получает голимый 0. Сгенерированный проект, как правило не работает, и разборки идут не с камнем, а с кубом. Программист читает и ковыряет какую-то параллельную реальность. И абсолютно ничего не получает взамен. Ни знаний, ни опыта программирования, ни опыта работы с семейством, ни с камнем. Ну уж лучше разбираться по примерам или библиотекам, как раньше. А то получишь только опыт работы борьбы с кубом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 4 11 апреля, 2017 Опубликовано 11 апреля, 2017 · Жалоба Вместо всех sprintf-ов и snprintf-ов всегда использую: extern "C" int _Printf( void *(*)(void *, int), void *, const char *, va_list *); Она даёт на порядок больше возможностей. И собственно - это и есть базовая функция, которую вызывают все прочие библиотечные *printf-функции. Имя дано для библиотеки IAR, но в других компиляторах думаю есть аналогичная. А Вы в курсе, что в библиотеках IAR нет функции с таким именем? ;) Откройте же EWARM_DevelopmentGuide.ENU.pdf, найдите где там написано про функцию __write и перестаньте закатывать солнце вручную. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 11 апреля, 2017 Опубликовано 11 апреля, 2017 · Жалоба А Вы в курсе, что в библиотеках IAR нет функции с таким именем? ;) Откройте же EWARM_DevelopmentGuide.ENU.pdf, найдите где там написано про функцию __write и перестаньте закатывать солнце вручную. Да ладно! А у меня компилит и глазом не моргнёт И при чём тут __write??? Она совсем о другом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexKLm 0 11 апреля, 2017 Опубликовано 11 апреля, 2017 · Жалоба Вот первый результат, когда удача улыбнулась: __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 перестаёт реагировать на управляющие команды. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться