#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <math.h>
// a и b — переменные в SRAM по адресам 0x75 и 0x76
#define a (*((volatile uint8_t *)0x75))
#define b (*((volatile uint8_t *)0x76))
// x — константа во FLASH-памяти программ
const float PROGMEM x = 2.0f;
// y — переменная/константа в EEPROM
float EEMEM y_ee = 16.0f;
// c, d, f, g — переменные в SRAM, размещаемые компилятором
float c = 2.0f;
float d = 1.0f;
float f = 4.0f;
float g = 8.0f;
// Result — итоговый результат
uint8_t Result;
int main(void)
{
// Настройка порта PORTB на вывод
DDRB = 0xFF;
PORTB = 0x00;
// Инициализация значений по указанным адресам SRAM
a = 5;
b = 2;
// Чтение значения y из EEPROM (в симуляторе используем прямое значение 16.0f)
float y_val = 16.0f;
// Вычисление выражения 14-го варианта: (y + g)/8 + sqrt(2*c*f) - 2*d*b
// Результат: (16 + 8)/8 + sqrt(2*2*4) - 2*1*2 = 3 + 4 - 4 = 3
Result = (uint8_t)((y_val + g) / 8.0f + sqrtf(2.0f * c * f) - 2.0f * d * b);
// Вывод результата в порт B
PORTB = Result;
while (1)
{
// Основной цикл
}
}