Перейти к содержанию
    

Помогите разобраться с ошибкой

/* 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

Ещё раз спасибо за ответы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 minutes ago, alexast said:

Заранее всем спасибо за рекомендации.

А что Вам непонятно?) Это у Вас не ошибка, а предупреждение. И компилятор предупреждает, что переменная Alex объявлена, инициализирована, но не используется.

23 minutes ago, alexast said:

ранее компилировалось.

Значит, либо она использовалась, либо Вы не замечали предупреждение. Оно и сейчас компилируется. Предупреждения (warnings) и ошибки (errors) вещи немного разные.

23 minutes ago, alexast said:

Цели мои посмотреть куда эта постоянная в IDE будет сбрасываться

IDE здесь вообще не при делах. В сборке проекта участвуют: препроцессор, компилятор, ассемблер и линковщик. Возможно, что ещё некоторые утилиты. Но это уже сугубо индивидуально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

56 минут назад, haker_fox сказал:

И компилятор предупреждает, что переменная Alex объявлена, инициализирована, но не используется.

а printf() разве не ее использует?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

34 minutes ago, Сергей Борщ said:

а printf() разве не ее использует?

Её. Но мне сообщение автора не совсем понятно(( Если printf использует эту переменную, то почему же компилятор выдаёт предупреждение, мне не ясно...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может быть, удосужишься открыть файл и посмотреть. что там на 103й строке, раз компилятор на нее указывает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вангую условную компиляцию. Посредством которой printf() превратился в тыкву #define printf(...). Отсюда и неиспользование переменной.

Как всегда - всё элементарно решается одним взглядом в листинги, но почему-то народ упорно их игнорирует....  :unknw:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемые друзья, всем большое спасибо за ответ.

Попробую внести ещё ясность. Первое чего я хотел добиться это после исполнения программы в среде IAR (debug) увидеть в каком-то из окон печать цифры 10. Я хочу понять после загрузки и начале отладки программы в микроконтроллере как дебаг будет мне показывать и будет ли показывать это число. - Не увидел.

Следующее. До того как я ввёд в код 

int Alex;
Alex = 10;
printf("%d\n",Alex); 

всё было нормально компилировалось и исполнялось с микроконтроллере.

После стал ругаться и показывать на инициализацию ножки. 

Подошлю потом код.

И программа в дебаге останавливается на строке printf("%d\n",Alex); 

Но далее вообще не понятно. 

Если из кода убрать "закомментировать" эту часть, то увы опять проблемы не уходят.

У меня складывается такое впечатление, что загрузка кода была осуществлена в микроконтроллер с последующей инициализацией ножки на выход (туда что-то выдает принт). Это прошивка там и осталась и после комментирования кода несмотря на  переиницализации остаётся в каком-то неясном состоянии. Но вообще это звучит фантастически. Не фантастикой является "ругань" компилятора даже после комментирования кода.

Вот такая информация.

Заранее всем спасибо.

"Может быть, удосужишься открыть файл и посмотреть. что там на 103й строке, раз компилятор на нее указывает?"

Завтра подошлю.

С уважением Алексей.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, alexast said:

Но вообще это звучит фантастически.

Без обид, но фантастически звучит Ваш каждый пост с учётом норм русского языка. Пишите, пожалуйста, для всех. И не стоит писать разным шрифтом на разном фоне. 

6 hours ago, alexast said:

микроконтроллер с последующей инициализацией ножки на выход (туда что-то выдает принт).

Само это не происходит. Только если не Вы самостоятельно это сделали, или это не сделали те библиотеки, которые используются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

printf делается примерно так

int _write(int file, char* ptr, int len)
    {	
	HAL_UART_Transmit(&huart1,ptr, len, 1000);	
	return len;
    }

тут все, что выводится printf- посылается в данном случае через uart1. можно также выводить в окно ide- гуглить "semihosting stm32" (я пока с этим не разрбрался)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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)); // скармливаем после парсера содержимое буфера в драйвер УСАПП
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 минут назад, haker_fox сказал:

Я делаю так...

OsApi::MutexLocker mutex(s_mutex);

Кто такой s_mutex? Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А, статический член класса, понял, спасибо.

Хрень пишу. Последнее время не внимателен я что-то.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, Arlleex said:

А, статический член класса, понял, спасибо.

Не) Статический объект класса. А сами классы не содержат статических методов и членов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

31 минуту назад, haker_fox сказал:

По-моему, это просто print.

это функция, которая по итогу будет вызвана, если в коде, сгенерированном Stm32CubeMx (а судя по комментариям- топикстартер в нем генерирует) написать printf. Она изначально weak, поэтому написав ее, можно перенаправить вывод printf куда нам надо (в моем случае в uart1).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...