Разобравшись с одной проблемой столкнулся с другой. Странный какой-то этот Кейл

В мейне пишу:
Код
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){};
}
{
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 не выполняется!!
}
{
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:)
Есть кто сталкивался с такой проблемой?