Сб июн 12, 2021 08:34:47
Пн июн 14, 2021 10:50:35
Чт июн 17, 2021 08:25:00
Чт июн 17, 2021 08:39:28
-Os -std=gnu11 -flto -ffunction-sections -fdata-sections -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wl,--warn-common -Wl,--gc-sections -Wl,-lm
Чт июн 17, 2021 08:48:35
именно так и делаю, эту фишку еще лет 10 назад разузнал и с тех пор всем начинающим советую сам. и раньше LTO всегда уменьшало прошивку, а вот тут... облом. но это просто результат эксперимента, не трагедия же...NStorm писал(а):желательно компилятору указать -ffunction-sections -fdata-sections,
Чт июн 17, 2021 08:53:00
Чт июн 17, 2021 09:03:31
абыжаиш, начальник!NStorm писал(а): Не забыли?
AVR Memory Usage
----------
Device: atmega328p
Program: 7506 bytes (22.9% Full)
(.text + .data + .bootloader)
Data: 102 bytes (5.0% Full)
(.data + .bss + .noinit)
AVR Memory Usage
----------
Device: atmega328p
Program: 8626 bytes (26.3% Full)
(.text + .data + .bootloader)
Data: 103 bytes (5.0% Full)
(.data + .bss + .noinit)
Чт июн 17, 2021 09:16:20
Чт июн 17, 2021 09:21:07
Чт июн 17, 2021 09:23:49
AVR Memory Usage
----------
Device: atmega8
Program: 7184 bytes (87.7% Full)
(.text + .data + .bootloader)
Data: 218 bytes (21.3% Full)
(.data + .bss + .noinit)
AVR Memory Usage
----------
Device: atmega8
Program: 7482 bytes (91.3% Full)
(.text + .data + .bootloader)
Data: 224 bytes (21.9% Full)
(.data + .bss + .noinit)
Чт июн 17, 2021 09:27:56
Чт июн 17, 2021 09:29:10
<artificial>:(.text.startup.main+0xe): undefined reference to `WDT_off'
void inline WDT_off(void) {
AVR Memory Usage
----------
Device: atmega8
Program: 7128 bytes (87.0% Full)
(.text + .data + .bootloader)
Data: 218 bytes (21.3% Full)
(.data + .bss + .noinit)
AVR Memory Usage
----------
Device: atmega8
Program: 7490 bytes (91.4% Full)
(.text + .data + .bootloader)
Data: 224 bytes (21.9% Full)
(.data + .bss + .noinit)
Чт июн 17, 2021 09:31:01
Чт июн 17, 2021 09:32:47
Чт июн 17, 2021 09:40:35
AVR Memory Usage
----------
Device: atmega328p
Program: 7414 bytes (22.6% Full)
(.text + .data + .bootloader)
Data: 102 bytes (5.0% Full)
(.data + .bss + .noinit)
AVR Memory Usage
----------
Device: atmega328p
Program: 8812 bytes (26.9% Full)
(.text + .data + .bootloader)
Data: 103 bytes (5.0% Full)
(.data + .bss + .noinit)
AVR Memory Usage
----------
Device: atmega328p
Program: 8846 bytes (27.0% Full)
(.text + .data + .bootloader)
Data: 103 bytes (5.0% Full)
(.data + .bss + .noinit)
AVR Memory Usage
----------
Device: atmega328p
Program: 8456 bytes (25.8% Full)
(.text + .data + .bootloader)
Data: 103 bytes (5.0% Full)
(.data + .bss + .noinit)
Чт июн 17, 2021 10:35:04
AVR Memory Usage
----------
Device: atmega8
Program: 8152 bytes (99.5% Full)
(.text + .data + .bootloader)
Data: 186 bytes (18.2% Full)
(.data + .bss + .noinit)
AVR Memory Usage
----------
Device: atmega8
Program: 5918 bytes (72.2% Full)
(.text + .data + .bootloader)
Data: 202 bytes (19.7% Full)
(.data + .bss + .noinit)
AVR Memory Usage
----------
Device: atmega8
Program: 3720 bytes (45.4% Full)
(.text + .data + .bootloader)
Data: 198 bytes (19.3% Full)
(.data + .bss + .noinit)
Чт июн 17, 2021 13:56:59
int main(void){
show_mode_t show_mode = SHOW_SIMPLE;
mode_t tm, mode = MODE_TIME;
uint8_t sec = 255;
mode_clock_init(mode);
indication(false); // индикация отключается
refresh = true;
sei();
while(1){
// TODO проверка питания
while(main_power_miss()){
// пока питания нет
indication(false); // индикация отключается
sec = time.s;
// уходим в сон
do {
set_sleep_mode(SLEEP_MODE_PWR_SAVE);
sleep_mode();
// пробуждение по прерыванию от таймера
refresh = time.s != sec;
} while (!refresh);
continue;
}
// при наличии питания
indication(mode != MODE_NIGHT); // индикация включена, если не ночной режим
if(time.s != sec){
refresh = true;
sec = time.s;
}
// выводим режим
if(modes[mode].show != NULL)
modes[mode].show(show_mode);
refresh = false;
// проверки условий разных событий
if(!played() && alarm.s && (time.h == alarm.h) && (time.m == alarm.m) && (time.s == 0))
// принудительно включаем режим будильника, если наступило время
tm = MODE_WAKE;
else if(night_time() && (abs(time.s - night_sec) >= 3) && (mode != MODE_NIGHT))
// принудительно включаем ночной режим, если условие соблюдено
tm = MODE_NIGHT;
else
// иначе получаем и обрабатываем событие
tm = modes[mode].exec(get_key_event());
if(tm != mode){
// если возможно - делаем инициализацию нового режима
if(modes[tm].init != NULL)
modes[tm].init(mode);
mode = tm;
refresh = true;
}
}
}
/// структура методов режима часов
typedef struct {
void (*init)(mode_t prev); //!< инициализация
mode_t (*exec)(event_t ev); //!< обработчик событий
void (*show)(show_mode_t sm); //!< индикация
} mode_methods_t;
static const __flash mode_methods_t modes[MODE_CNT] = {
//MODE_TIME
{mode_clock_init, mode_clock_exec, mode_clock_show},
//MODE_SEC
{NULL, mode_sec_exec, mode_sec_show},
//MODE_ALARM
{mode_alarm_init, mode_alarm_exec, mode_alarm_show},
//MODE_SETUP
{mode_edit_init, mode_edit_exec, mode_edit_show},
//MODE_WAKE
{mode_wake_init, mode_wake_exec, mode_clock_show},
//MODE_NIGHT_VIEW
{mode_nview_init, mode_nview_exec, mode_nview_show},
//MODE_NIGHT
{mode_night_init, mode_night_exec, NULL},
//MODE_NIGHT_EDIT
{mode_edit_night_init, mode_edit_night_exec, mode_edit_night_show},
};
/// возможные режимы работы
typedef enum{
MODE_TIME, //!< индикация времени
MODE_SEC, //!< индикация секунд
MODE_ALARM, //!< индикация будильника
MODE_SETUP, //!< настройка времени
MODE_WAKE, //!< срабатывание будильника
MODE_NIGHT_VIEW, //!< индикация настройки ночного режима
MODE_NIGHT, //!< ночной режим
MODE_NIGHT_EDIT, //!< изменение настроек ночного режима
//
MODE_CNT //!< общее количество режимов
} mode_t;
Пт июн 18, 2021 11:07:56
Пт июн 18, 2021 14:51:23
Пт июн 18, 2021 15:42:44