Easyelectronics.ru

Электроника для всех
Текущее время: 22 янв 2021, 12:34

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: функция printf не вызывает функцию _write
СообщениеДобавлено: 20 окт 2020, 17:07 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 804
Подскажите как использовать функцию "printf " в stm32cubeide (как понимаю stm32cubeide тот же eclipse). У меня не получилось вызвать функцию "__attribute__((weak)) int _write(int file, char *ptr, int len)" пишу в main printf("test") , а вызова _write нет и соответственно не могу передать сообщение по UASRT или виртуальному com порту.
Что сделал
Добавил syscalls.c определил в нем "__attribute__((weak)) int _write(int file, char *ptr, int len)".

Добавил следующие в настройки

Properties ---> c/c++ Build ---> Settings ---> Linker ---> Libraries ---> rdimon и

Properties ---> c/c++ Build ---> Settings ---> Linker ---> Miscellaneous ---> -specs=rdimon.specs

Получил ошибки при сборки вида:

/Src/syscalls.c:49: first defined here и так ругается на функции

initialise_monitor_handles

int _close(int file)

int _isatty(int file)

int _unlink(char *name)

int _times(struct tms *buf)

Как понял из сообщения их можно закомментировать. Закомментировал и программа перестала работать совсем вылетает когда вызывается printf().
Но вызова _write так и нет.

Может кто уже борол это проблему и поделиться решением.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция printf не вызывает функцию _write
СообщениеДобавлено: 20 окт 2020, 18:01 
Старожил

Зарегистрирован: 16 окт 2013, 01:27
Сообщения: 1688
вы изначально библиотеку с этой функцией добавили ?
в Кейле делается: #include "stdio.h"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция printf не вызывает функцию _write
СообщениеДобавлено: 20 окт 2020, 18:17 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 804
Да добавил. В кеил и IAR все просто написал printf и вызвалась функция write а тут нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция printf не вызывает функцию _write
СообщениеДобавлено: 21 окт 2020, 14:23 
Только пришел

Зарегистрирован: 22 мар 2019, 02:20
Сообщения: 5
Попробуйте убрать:
zhilenkov писал(а):
Properties ---> c/c++ Build ---> Settings ---> Linker ---> Libraries ---> rdimon и
Properties ---> c/c++ Build ---> Settings ---> Linker ---> Miscellaneous ---> -specs=rdimon.specs

rdimon предназначен для semihosting, если хотите отправлять данные через UART то линковать с rdimon не нужно (в нем есть свой _write() который работает исключительно через semihosting)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция printf не вызывает функцию _write
СообщениеДобавлено: 21 окт 2020, 15:27 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2900
Откуда: Санкт-Петербург
Наивный вопрос: а зачем вы своей функции _write ставите атрибут weak?
По логике, этот атрибут должен стоять на функции, идущей в комплекте с либой – чтобы вы могли её перекрыть. А если и ваша, и стандартная weak – то линкер сам выберет, какую из них вызывать ;-)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB