Загрузка данных


#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
    float y_val = eeprom_read_float(&y_ee);

    // Вычисление выражения 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);

    // Вывод результата в параллельный порт
    PORTB = Result;

    while (1) 
    {
        // Основной цикл
    }
}