alexast 0 23 сентября, 2021 Опубликовано 23 сентября, 2021 · Жалоба /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); int Alex; Alex = 10; printf("%d\n",Alex); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_RTC_Init(); MX_TIM1_Init(); MX_WWDG_Init(); MX_FATFS_Init(); И вот далее такая ошибка: Warning[Pe550]: variable "Alex" was set but never used C:\Астахов Алексей\Программирование НАМИ\IAR\USB\USB_virtual_com_port\Core\Src\main.c 103 Заранее всем спасибо за рекомендации. Без: int Alex; Alex = 10; printf("%d\n",Alex); ранее компилировалось. Цели мои посмотреть куда эта постоянная в IDE будет сбрасываться. Можно ли я её увидеть при помощи printf Ещё раз спасибо за ответы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 23 сентября, 2021 Опубликовано 23 сентября, 2021 · Жалоба 22 minutes ago, alexast said: Заранее всем спасибо за рекомендации. А что Вам непонятно?) Это у Вас не ошибка, а предупреждение. И компилятор предупреждает, что переменная Alex объявлена, инициализирована, но не используется. 23 minutes ago, alexast said: ранее компилировалось. Значит, либо она использовалась, либо Вы не замечали предупреждение. Оно и сейчас компилируется. Предупреждения (warnings) и ошибки (errors) вещи немного разные. 23 minutes ago, alexast said: Цели мои посмотреть куда эта постоянная в IDE будет сбрасываться IDE здесь вообще не при делах. В сборке проекта участвуют: препроцессор, компилятор, ассемблер и линковщик. Возможно, что ещё некоторые утилиты. Но это уже сугубо индивидуально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 23 сентября, 2021 Опубликовано 23 сентября, 2021 · Жалоба 56 минут назад, haker_fox сказал: И компилятор предупреждает, что переменная Alex объявлена, инициализирована, но не используется. а printf() разве не ее использует? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 23 сентября, 2021 Опубликовано 23 сентября, 2021 · Жалоба 34 minutes ago, Сергей Борщ said: а printf() разве не ее использует? Её. Но мне сообщение автора не совсем понятно(( Если printf использует эту переменную, то почему же компилятор выдаёт предупреждение, мне не ясно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rkit 1 23 сентября, 2021 Опубликовано 23 сентября, 2021 · Жалоба Может быть, удосужишься открыть файл и посмотреть. что там на 103й строке, раз компилятор на нее указывает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 182 23 сентября, 2021 Опубликовано 23 сентября, 2021 · Жалоба Вангую условную компиляцию. Посредством которой printf() превратился в тыкву #define printf(...). Отсюда и неиспользование переменной. Как всегда - всё элементарно решается одним взглядом в листинги, но почему-то народ упорно их игнорирует.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexast 0 23 сентября, 2021 Опубликовано 23 сентября, 2021 · Жалоба Уважаемые друзья, всем большое спасибо за ответ. Попробую внести ещё ясность. Первое чего я хотел добиться это после исполнения программы в среде IAR (debug) увидеть в каком-то из окон печать цифры 10. Я хочу понять после загрузки и начале отладки программы в микроконтроллере как дебаг будет мне показывать и будет ли показывать это число. - Не увидел. Следующее. До того как я ввёд в код int Alex; Alex = 10; printf("%d\n",Alex); всё было нормально компилировалось и исполнялось с микроконтроллере. После стал ругаться и показывать на инициализацию ножки. Подошлю потом код. И программа в дебаге останавливается на строке printf("%d\n",Alex); Но далее вообще не понятно. Если из кода убрать "закомментировать" эту часть, то увы опять проблемы не уходят. У меня складывается такое впечатление, что загрузка кода была осуществлена в микроконтроллер с последующей инициализацией ножки на выход (туда что-то выдает принт). Это прошивка там и осталась и после комментирования кода несмотря на переиницализации остаётся в каком-то неясном состоянии. Но вообще это звучит фантастически. Не фантастикой является "ругань" компилятора даже после комментирования кода. Вот такая информация. Заранее всем спасибо. "Может быть, удосужишься открыть файл и посмотреть. что там на 103й строке, раз компилятор на нее указывает?" Завтра подошлю. С уважением Алексей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 24 сентября, 2021 Опубликовано 24 сентября, 2021 · Жалоба 6 hours ago, alexast said: Но вообще это звучит фантастически. Без обид, но фантастически звучит Ваш каждый пост с учётом норм русского языка. Пишите, пожалуйста, для всех. И не стоит писать разным шрифтом на разном фоне. 6 hours ago, alexast said: микроконтроллер с последующей инициализацией ножки на выход (туда что-то выдает принт). Само это не происходит. Только если не Вы самостоятельно это сделали, или это не сделали те библиотеки, которые используются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cybersonner 1 24 сентября, 2021 Опубликовано 24 сентября, 2021 · Жалоба printf делается примерно так int _write(int file, char* ptr, int len) { HAL_UART_Transmit(&huart1,ptr, len, 1000); return len; } тут все, что выводится printf- посылается в данном случае через uart1. можно также выводить в окно ide- гуглить "semihosting stm32" (я пока с этим не разрбрался) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 24 сентября, 2021 Опубликовано 24 сентября, 2021 · Жалоба 17 minutes ago, cybersonner said: printf делается примерно так По-моему, это просто print. Я делаю так (в контексте ОСРВ) прямо из проекта. Формат аргументов kprintf точно такой же как и у настоящего printf. void kprintf( const char * arg_list, ... ) { OsApi::MutexLocker mutex(s_mutex); // ждём мьютекс, т.к. мы ни одни используем форматированный вывод в консоль if (mutex.take(500) != RetVal::Ok) return; // не дождались(( va_list arg_buffer; char * tbptr = kprintfBuffer; va_start(arg_buffer, arg_list); vsprintf(tbptr, arg_list, arg_buffer); // парсим форматированную строку va_end(arg_buffer); getUsart().write(kprintfBuffer, strlen(kprintfBuffer)); // скармливаем после парсера содержимое буфера в драйвер УСАПП } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 24 сентября, 2021 Опубликовано 24 сентября, 2021 · Жалоба 12 минут назад, haker_fox сказал: Я делаю так... OsApi::MutexLocker mutex(s_mutex); Кто такой s_mutex? Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 24 сентября, 2021 Опубликовано 24 сентября, 2021 · Жалоба 3 minutes ago, Arlleex said: Кто такой s_mutex? static OsApi::Mutex s_mutex; И сама оболочка namespace OsApi { class Mutex : public OS::TMutex { public: Mutex() {} RetVal take( size_t timeout_ms ) { return try_lock(timeout_ms) ? RetVal::Ok : RetVal::TimeOut; } RetVal give() { unlock(); return RetVal::Ok; } private: friend class MutexLocker; }; class MutexLocker { public: MutexLocker( Mutex &mt ) : m_mt(mt) {} RetVal take( size_t timeout_ms ) { return m_mt.take(timeout_ms); } ~MutexLocker() { m_mt.give(); } private: Mutex m_mt; }; } Это для изоляции от FreeRTOS и scmRTOS. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 24 сентября, 2021 Опубликовано 24 сентября, 2021 · Жалоба А, статический член класса, понял, спасибо. Хрень пишу. Последнее время не внимателен я что-то. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 24 сентября, 2021 Опубликовано 24 сентября, 2021 · Жалоба 3 minutes ago, Arlleex said: А, статический член класса, понял, спасибо. Не) Статический объект класса. А сами классы не содержат статических методов и членов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cybersonner 1 24 сентября, 2021 Опубликовано 24 сентября, 2021 · Жалоба 31 минуту назад, haker_fox сказал: По-моему, это просто print. это функция, которая по итогу будет вызвана, если в коде, сгенерированном Stm32CubeMx (а судя по комментариям- топикстартер в нем генерирует) написать printf. Она изначально weak, поэтому написав ее, можно перенаправить вывод printf куда нам надо (в моем случае в uart1). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться