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

 
 
> Функциия не хочет возвращать значение в Keil 4.60, компилятор пишет variable never used
NaughtyFreak
сообщение Dec 28 2012, 07:44
Сообщение #1


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

Группа: Участник
Сообщений: 90
Регистрация: 7-10-11
Из: Москва
Пользователь №: 67 593




Разобравшись с одной проблемой столкнулся с другой. Странный какой-то этот Кейл wacko.gif
В мейне пишу:
Код
int main (void)
{
    BYTE result, reg_value; //BYTE это опред-ие типа unsigned char
      SystemInit();
       SysTick_Configure_us();
        Init_GPIOB();
         Init_I2C1();
          Init_GPIOE();
         Config_LCD_port();
          Config_LCD();
       result=MPU6050_Detected(); // это читается нормально
       if (result==0x01)
         {    
         LCD_16ch_string(2, " MPU detected"); // ЖКИ выводит что всё ОК, девайс опознан
             LCD_16ch_string(1, " Test OK!");
         }
        
         else
         {
             LCD_16ch_string(1, " Test failed!");
         }
        
         reg_value=MPU6050_read_reg(PWR_MGMT_1_REG); // НЕ ЧИТАЕТ!!! :(
            
     while (1){};    
    }


Функция MPU6050_read_reg(PWR_MGMT_1_REG) всего лишь считывает значение регистра из устройства и возвращает его ввиде байта.
Вот её код:

Код
BYTE MPU6050_read_reg (BYTE reg_addr)
{
BYTE temp_reg_value; // временная переменная, знач-ие которой возвращаем    
  Enable_I2C1(); // стандартная процедура чтения по I2C, ничего интересного
         Set_Acknowledge();
          I2C1_Start();
           Handle_EV5();
            I2C1_write_data(MPU_6050_address_write);
             Handle_EV6();
                  I2C1_write_data(reg_addr);
               Check_BTF_flag();
                            
      I2C1_Start();
       Handle_EV5();                            
              I2C1_write_data(MPU_6050_address_read);
                 Handle_EV6();
              Reset_Acknowledge();
               Check_RXNE_flag();
            temp_reg_value=I2C1_read_data(); //Здесь присваивание значения происходит нормально!    
             I2C1_Stop();
                            Disable_I2C1();
    return temp_reg_value; // return не выполняется!!
}


Какие у меня соображения:
ф-ия, возвращающая result принимает ID-код устройства и возвращает "1" если всё верно.
ф-ия MPU6050_read_reg(PWR_MGMT_1_REG) возвращает значение регистра, которое в свою очередь в эту ф-ию возвращает макрофункция temp_reg_value=I2C1_read_data();
Компилятор при компиляции пишет "main.c(31): warning: #550-D: variable "reg_value" was set but never used" хотя я явно присваиваю этой переменной значение, возвращаемой ф-ией..
То ли двойной возврат одного и того же значения не прокатывает, то ли у меня руки кривые где-то. Проц STM32F417, стандартную библу периферии не использую, люблю свой HAL:)

Есть кто сталкивался с такой проблемой?
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:14
Рейтинг@Mail.ru


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