diff --git a/IdiBusSlave.cpp b/IdiBusSlave.cpp index 38c539d..8538959 100644 --- a/IdiBusSlave.cpp +++ b/IdiBusSlave.cpp @@ -5,6 +5,9 @@ #include "Serial.h" #include "DS3231.h" #include "time.h" +#include "fs.h" +#include "spi.h" +#include "sd.h" //Structure that holds module's data XXX_NAME_channel_data_t XXX_NAME_channels_data[IDIBUS_XXX_NAME_CH_NUM]; @@ -34,10 +37,56 @@ void SlaveInit() // Intr is ON Debug.begin(57600); Debug.writeln("Program start"); - + initDS3231(); Debug.writeln("Clock RTC Init"); + ds3231SetDate(18); + ds3231SetMonth(DS_JUNE); + ds3231SetYear(26); + spi_init(); + if (!sd_init()) + { + Debug.writeln("SD ready"); + } + else + { + Debug.writeln("SD failed"); + } + + Debug.writeln("Initializing file system... "); + if (!fs_init()) + { + Debug.writeln("FS ready"); + } + else + { + Debug.writeln("FS failed"); + } + + Debug.writeln("file system type: "); + if (fs_type == 1) + { + Debug.writeln("FAT32"); + } + else if (fs_type == 0) + { + Debug.writeln("FAT16"); + } + else Debug.writeln("UNKNOWN"); + + strcpy((char*)buf, "NEWFILE.DAT"); +if (fs_create() != 0) { + // Ошибка создания + Debug.writeln("No create"); +} + +// Записать данные +uint8_t data[] = "Hello, World!"; +if (fs_write(data, sizeof(data) - 1) != 0) { + Debug.writeln("No write"); +} + fs_file.opened = OPENED_NONE; } static int16_t temperature; // For whatever reason... diff --git a/IdiBus_Logger.7z b/IdiBus_Logger.7z new file mode 100644 index 0000000..afc20c4 Binary files /dev/null and b/IdiBus_Logger.7z differ diff --git a/components/SD_Card/fs.c b/components/SD_Card/fs.c new file mode 100644 index 0000000..cef45e6 --- /dev/null +++ b/components/SD_Card/fs.c @@ -0,0 +1,1619 @@ +/* +It is an open source software to implement FAT file system to +small embedded systems. This is a free software and is opened for education, +research and commercial developments under license policy of following trems. + +(C) 2013 vinxru +(C) 2010, ChaN, all right reserved. + +It is a free software and there is NO WARRANTY. +No restriction on use. You can use, modify and redistribute it for +personal, non-profit or commercial use UNDER YOUR RESPONSIBILITY. +Redistributions of source code must retain the above copyright notice. + +Version 0.99 30-05-2013 + +P.S. goto allows you to save memory! Like other horrors bellow. + +Program size: 3070 words (6140 bytes), 75% of FLASH at ATMega8 !!! +*/ + +/* +Я не стал добавлять контроль на специальные имена +CON,PRN,AUX,CLOCK$,NUL,COM1,COM2,COM3,COM4,LPT1,LPT2,LPT3 +что бы не занимать микроконтроллер. Файлы с такими именами +оставляю на совести программиста. +*/ + +//#include +#include "fs.h" +#include "sd.h" +#include +#include +#include "DS3231.h" + +/* Вспомогательные функции для работы с временем */ + +static uint8_t fs_update_timestamp(void); + +/************************************************************************** +* Упаковка времени в формат FAT * +* Возвращает 16-битное значение: * +* биты 15-11: часы (0-23) * +* биты 10-5: минуты (0-59) * +* биты 4-0: секунды / 2 (0-29) * +**************************************************************************/ +static uint16_t fat_pack_time(void) +{ + uint8_t hour = ds3231GetHour(); + uint8_t min = ds3231GetMinute(); + uint8_t sec = ds3231GetSecond(); + + /* Проверка и коррекция значений */ + if (hour > 23) hour = 0; + if (min > 59) min = 0; + if (sec > 59) sec = 0; + + return (uint16_t)((hour << 11) | (min << 5) | (sec >> 1)); +} + +/************************************************************************** +* Упаковка даты в формат FAT * +* Возвращает 16-битное значение: * +* биты 15-9: год (от 1980, 0-127) * +* биты 8-5: месяц (1-12) * +* биты 4-0: день (1-31) * +**************************************************************************/ +static uint16_t fat_pack_date(void) +{ + uint8_t year = ds3231GetYear(); + uint8_t month = (uint8_t)ds3231GetMonth(); + uint8_t day = ds3231GetDate(); + + /* Проверка и коррекция значений */ + if (year > 99) year = 0; /* 2000-2099 */ + if (month < 1 || month > 12) month = 1; + if (day < 1 || day > 31) day = 1; + + /* Год от 1980: 2000 + year - 1980 = 20 + year */ + uint16_t year_offset = 20 + year; /* Для 2024: 20 + 24 = 44 */ + if (year_offset > 127) year_offset = 0; + + return (uint16_t)((year_offset << 9) | (month << 5) | day); +} + +uint8_t buf[512]; + +/* Для наглядности */ + +#define LD_uint16_t(ptr) (*(uint16_t*)(ptr)) +#define LD_uint32_t(ptr) (*(uint32_t*)(ptr)) + +/* Значения fs_type */ + +#define FS_FAT16 0 +#define FS_FAT32 1 +#define FS_ERROR 2 + +/* Специальные значения кластеров */ + +#define FREE_CLUSTER 0 +#define LAST_CLUSTER 0x0FFFFFFF + +/* Системные переменные. Информация из boot-сектора */ + + + +uint8_t fs_type; /* FS_FAT16, FS_FAT32, FS_ERROR */ +uint32_t fs_fatbase; /* Адрес первой FAT */ +uint32_t fs_fatbase2; /* Адрес второй FAT */ +uint8_t fs_csize; /* Размер кластера в секторах */ +uint16_t fs_n_rootdir; /* Кол-во записей в корневом каталоге (только FAT16) */ +uint32_t fs_n_fatent; /* Кол-во кластеров */ +uint32_t fs_dirbase; /* Корневой каталог (сектор для FAT16, кластер для FAT32) */ +uint32_t fs_database; /* Адрес второго кластера */ + +/* Системные переменные. Остальное */ + +uint8_t lastError; /* Последняя ошибка */ +uint32_t fs_fatoptim; /* Первый свободный кластер */ +uint32_t fs_tmp; /* Используеются для разных целей */ +uint16_t fs_wtotal; /* Используется функциями fs_write_start, fs_write_end*/ + +/* Открытые файлы/папки */ + +File fs_file; + +#ifndef FS_DISABLE_SWAP +File fs_secondFile; +#endif + +/* Структура boot-сектора */ + +#define BPB_SecPerClus 13 +#define BPB_RsvdSecCnt 14 +#define BPB_NumFATs 16 +#define BPB_RootEntCnt 17 +#define BPB_TotSec16 19 +#define BPB_FATSz16 22 +#define BPB_TotSec32 32 +#define BS_FilSysType 54 +#define BPB_FATSz32 36 +#define BPB_RootClus 44 +#define BS_FilSysType32 82 +#define MBR_Table 446 + +/************************************************************************** +* Чтение сектора в буфер * +**************************************************************************/ + +static uint8_t sd_readBuf(uint32_t sector) +{ + return sd_read(buf, sector, 0, 512); +} + +/************************************************************************** +* Запись буфера в сектор * +**************************************************************************/ + +static uint8_t sd_writeBuf(uint32_t sector) +{ + return sd_write512(buf, sector); +} + +/************************************************************************** +* Инициализация * +**************************************************************************/ + +uint8_t fs_init() +{ + uint32_t bsect, fsize, tsect; + + /* Сбрасываем оптимизацию */ + fs_fatoptim = 2; + + /* Предотвращаем ошибки программиста */ +#ifndef FS_DISABLE_CHECK + fs_file.opened = OPENED_NONE; +#ifndef FS_DISABLE_SWAP + fs_secondFile.opened = OPENED_NONE; +#endif + fs_type = FS_ERROR; +#endif + + /* Инициализация накопителя */ + //if(sd_init()) return 1; + + /* Ищем файловую систему */ + bsect = 0; + while(1) + { + if(sd_readBuf(bsect)) return 1; + if(LD_uint16_t(buf + 510) == 0xAA55) + { + if(LD_uint16_t(buf + BS_FilSysType ) == 0x4146) break; + if(LD_uint16_t(buf + BS_FilSysType32) == 0x4146) break; + /* Возможно это MBR */ + if(bsect == 0 && buf[MBR_Table+4]) + { + bsect = LD_uint32_t(buf + (MBR_Table + 8)); + if(bsect != 0) continue; + } + } +abort_noFS: + lastError = ERR_NO_FILESYSTEM; + return 1; + } + + /* Размер таблицы FAT в секторах */ + fsize = LD_uint16_t(buf + BPB_FATSz16); + if(fsize == 0) fsize = LD_uint32_t(buf + BPB_FATSz32); + + /* Размер файловой системы в секторах */ + tsect = LD_uint16_t( buf + BPB_TotSec16); + if(tsect == 0) tsect = LD_uint32_t(buf + BPB_TotSec32); + + /* Размер корневого каталога (должно быть кратно 16 и для FAT32 должно быть рано нулю) */ + fs_n_rootdir = LD_uint16_t(buf + BPB_RootEntCnt); + + /* Адреса таблиц FAT в секторах */ + fs_fatbase = bsect + LD_uint16_t(buf + BPB_RsvdSecCnt); + fs_fatbase2 = 0; + if(buf[BPB_NumFATs] >= 2) fs_fatbase2 = fs_fatbase + fsize; + + /* Кол-во секторов на кластер */ + fs_csize = buf[BPB_SecPerClus]; + + /* Кол-во кластеров */ + fsize *= buf[BPB_NumFATs]; + fs_n_fatent = (tsect - LD_uint16_t(buf + BPB_RsvdSecCnt) - fsize - fs_n_rootdir / 16) / fs_csize + 2; + + /* Адрес 2-ого кластера */ + fs_database = fs_fatbase + fsize + fs_n_rootdir / 16; + + /* Определение файловой системы */ + + /* FAT 12 */ + if(fs_n_fatent < 0xFF7) goto abort_noFS; + + /* FAT 16 */ + if(fs_n_fatent < 0xFFF7) + { + fs_dirbase = fs_fatbase + fsize; + fs_type = FS_FAT16; + return 0; + } + + /* FAT 32 */ + fs_dirbase = LD_uint32_t(buf + BPB_RootClus); + + /* Сбрасываем счетчик свободного места */ + if(LD_uint16_t(buf + BPB_RsvdSecCnt)>0) + { + bsect++; + if(sd_readBuf(bsect)) return 1; + if(LD_uint32_t(buf) == 0x41615252 && LD_uint32_t(buf + 0x1E4) == 0x61417272 && LD_uint32_t(buf + 0x1FC) == 0xAA550000) + { + LD_uint32_t(buf + 0x1E8) = 0xFFFFFFFF; + LD_uint32_t(buf + 0x1EC) = 0xFFFFFFFF; + if(sd_writeBuf(bsect)) return 1; + } + } + fs_type = FS_FAT32; + + return 0; +} + +/************************************************************************** +* Проверка наличия диска и если нужно, то его инициализация * +**************************************************************************/ + +uint8_t fs_check() +{ + if(!sd_check()) return 0; + return fs_init(); +} + +/************************************************************************** +* Получить кластер из FS_DIRENTRY * +* Функция не портит buf (функции, в которых этого не написано, портят) * +**************************************************************************/ + +static uint32_t fs_getEntryCluster() +{ + uint32_t c = LD_uint16_t(FS_DIRENTRY + DIR_FstClusLO); + if(fs_type != FS_FAT16) c |= ((uint32_t)LD_uint16_t(FS_DIRENTRY + DIR_FstClusHI)) << 16; + return c; +} + +/************************************************************************** +* Получить следующий кластер. * +* Аргумент и результат находятся в fs_tmp. * +**************************************************************************/ + +static uint8_t fs_nextCluster() +{ + if(fs_type == FS_FAT16) + { + if(sd_read((uint8_t*)&fs_tmp, fs_fatbase + fs_tmp / 256, (uint16_t)(uint8_t)fs_tmp * 2, 2)) goto abort; + fs_tmp &= 0xFFFF; + } + else + { + if(sd_read((uint8_t*)&fs_tmp, fs_fatbase + fs_tmp / 128, (uint16_t)((uint8_t)fs_tmp % 128) * 4, 4)) goto abort; + fs_tmp &= 0x0FFFFFFF; + } + /* Для удобства разработки заменяем последний кластер на ноль. */ + if(fs_tmp < 2 || fs_tmp >= fs_n_fatent) + fs_tmp = 0; + return 0; +abort: + return 1; +} + +/************************************************************************** +* Преобразовать номер кластера в номер сектора * +* Аргумент и результат находятся в fs_tmp. * +* Функция не портит buf * +***************************************************************************/ + +static void fs_clust2sect() +{ + fs_tmp = (fs_tmp - 2) * fs_csize + fs_database; +} + +/************************************************************************** +* Получить очередной файл или папку * +* Удаленные файлы, метки тома, последний элемент, LFN показываются * +* * +* Описание работы полностью идентично функции ниже, поэтому здесь не * +* приведено * +* * +* Функция не портит buf[0..MAX_FILENAME-1] * +***************************************************************************/ + +static uint8_t fs_readdirInt() +{ + if(fs_file.entry_able) + { + fs_file.entry_index++; + + /* В папке не может быть больше 65536 файлов, а в корне FAT16 не больше fs_n_rootdir */ + if(fs_file.entry_index == 0 || (fs_file.entry_cluster == 0 && fs_file.entry_index == fs_n_rootdir)) + { + fs_file.entry_index = 0; +retEnd: + FS_DIRENTRY[DIR_Name] = 0; /* Признак последнего файла для пользователя вызывающего fs_dirread */ + fs_file.entry_able = 0; + return 0; + } + + /* Граница сектора */ + if(fs_file.entry_index % 16 == 0) + { + fs_file.entry_sector++; + + /* Граница кластера */ + if(fs_file.entry_cluster != 0 && ((fs_file.entry_index / 16) % fs_csize) == 0) + { + + /* Следующий кластер */ + fs_tmp = fs_file.entry_cluster; + if(fs_nextCluster()) return 1; + if(fs_tmp == 0) goto retEnd; /* Последний кластер, устаналиваем fs_file.entry_able = 0 */ + + /* Сохраняем */ + fs_file.entry_cluster = fs_tmp; + fs_clust2sect(); + fs_file.entry_sector = fs_tmp; + } + } + } + else + { + fs_file.entry_index = 0; + fs_file.entry_able = 1; + fs_tmp = fs_file.entry_start_cluster; + + /* Первый кластер и сектор папки. Этот код не имеет смысла выполнять + для FAT16, но зато код хорошо сжимается. Т.к. этот кусок кода аналогичен + куску выше. */ + fs_file.entry_cluster = fs_tmp; + fs_clust2sect(); + fs_file.entry_sector = fs_tmp; + + /* Корневая папка FS_FAT16 */ + if(fs_file.entry_cluster == 0) fs_file.entry_sector = fs_dirbase; + } + + return sd_read(FS_DIRENTRY, fs_file.entry_sector, (uint16_t)((fs_file.entry_index % 16) * 32), 32); +} + +/************************************************************************** +* Получить очередной файл или папку (удаленные файлы пропускаются) * +* * +* Эта функция вызывается после fs_opendir, которая настраивает все * +* нужные переменные, поэтому вам ничего трогать не надо. Информация * +* ниже приведена для лучшего понимания работы * +* * +* Если на входе entry_able=0, то начинается новый поиск в папке * +* по адресу entry_start_cluster. При этом инициализируются переменные: * +* entry_able, entry_index, entry_sector, entry_cluster. * +* * +* Если на входе fs_file.entry_able=1, то используются эти 4 переменные. * +* * +* На выходе * +* entry_able - если 0 значит достигнут конец каталога * +* entry_sector - сектор описателя * +* entry_cluster - кластер описателя * +* entry_index - номер описателя * +* FS_DIRENTRY - описатель * +* * +* Функция не портит buf[0..MAX_FILENAME-1] * +**************************************************************************/ + +uint8_t fs_readdir_nocheck() +{ + while(!fs_readdirInt()) + { + if(FS_DIRENTRY[DIR_Name] == 0) fs_file.entry_able = 0; + if(fs_file.entry_able == 0) return 0; + if(FS_DIRENTRY[DIR_Name] == 0xE5) continue; /* Может быть еще 0x05 */ + if(FS_DIRENTRY[DIR_Name] == '.') continue; + if((FS_DIRENTRY[DIR_Attr] & AM_VOL) == 0) return 0; + } + return 1; +} + +uint8_t fs_readdir() +{ +#ifndef FS_DISABLE_CHECK + /* Папка должна быть открыта */ + if(fs_file.opened != OPENED_DIR) + { + lastError = ERR_NOT_OPENED; + return 1; + } +#endif + return fs_readdir_nocheck(); +} + +/************************************************************************** +* Сохранить изменения в обе таблицы FAT * +**************************************************************************/ + +static uint8_t fs_saveFatSector(uint32_t sector) +{ + if(fs_fatbase2) if(sd_writeBuf(fs_fatbase2+sector)) return 1; + return sd_writeBuf(fs_fatbase+sector); +} + +/************************************************************************** +* Выделить кластер * +* * +* Найденный кластер сохраняется в fs_tmp * +**************************************************************************/ + +/* Ради функции fs_getfree пришлось усложнить функцию fs_allocCluster. +Если функция не используется, то можно с помощью макроса FS_DISABLE_GETFREESPACE +исключить лишний код */ + +#ifdef FS_DISABLE_GETFREESPACE +#define DIS(X) +#define ALLOCCLUSTER +#else +#define DIS(X) X +#define ALLOCCLUSTER 0 +#endif + +static uint8_t fs_allocCluster(DIS(uint8_t freeSpace)) +{ + uint8_t i; + uint32_t s; + uint8_t *a; + + /* Начинаем поиск с этого кластера */ + fs_tmp = fs_fatoptim; + + /* Последовательно перебираем сектора */ + while(1) + { + /* Сектор и смещение */ + s = fs_tmp / 256, i = (uint8_t)fs_tmp, a = (uint8_t*)((uint16_t*)buf + i); + if(fs_type != FS_FAT16) s = fs_tmp / 128, i |= 128, a = (uint8_t*)((uint32_t*)buf - 128 + i); + + /* Читаем сектор */ + if(sd_readBuf(fs_fatbase + s)) goto abort; + + /* Среди 128/256 чисел в секторе ищем 0 */ + /* Куча проверок внутри цикла не самое быстрое решение, но зато получается очень компактный код. */ + do + { + /* Кластеры кончились */ + if(fs_tmp >= fs_n_fatent) + { + DIS(if(freeSpace) return 0;) lastError = ERR_NO_FREE_SPACE; + goto abort; + } + + /* Ищем свободный кластер и помечаем как последний */ + if(fs_type == FS_FAT16) + { + if(LD_uint16_t(a) == 0) + { + DIS(if(!freeSpace) + { + ) LD_uint16_t(a) = (uint16_t)LAST_CLUSTER; + goto founded; + DIS( + } + fs_file.sector++;) + } + a += 2; + } + else + { + if(LD_uint32_t(a) == 0) + { + DIS(if(!freeSpace) + { + ) LD_uint32_t(a) = LAST_CLUSTER; + goto founded; + DIS( + } + fs_file.sector++;) + } + a += 4; + } + + /* Счетчик */ + ++fs_tmp, ++i; + } + while(i != 0); + } +founded: + /* Оптимизация */ + fs_fatoptim = fs_tmp; + + /* Сохраняем изменения */ + return fs_saveFatSector(s); +abort: + return 1; +} + +#undef DIS + +/************************************************************************** +* Изменение таблицы FAT * +* * +* Если fs_tmp!=0, то FAT[cluster] = fs_tmp * +* Если fs_tmp==0, то swap(FAT[cluster], fs_tmp) * +**************************************************************************/ + +static uint8_t fs_setNextCluster(uint32_t cluster) +{ + uint32_t s, prev; + void* a; + + /* Вычисляем сектор */ + s = cluster / 128; + if(fs_type == FS_FAT16) s = cluster / 256; + + /* Читаем сектор */ + if(sd_readBuf(fs_fatbase + s)) return 1; + + /* Изменяем отдельный кластер */ + if(fs_type == FS_FAT16) + { + a = (uint16_t*)buf + (uint8_t)cluster; + prev = LD_uint16_t(a); + LD_uint16_t(a) = (uint16_t)fs_tmp; + } + else + { + a = (uint32_t*)buf + (uint8_t)cluster % 128; + prev = LD_uint32_t(a); + LD_uint32_t(a) = fs_tmp; + } + + /* Оптимизация поиска свободного кластера. Внезапно if() if() занимает меньше ПЗУ, чем && */ + if(fs_tmp == FREE_CLUSTER) if(cluster < fs_fatoptim) fs_fatoptim = cluster; + + /* Результат */ + if(fs_tmp == LAST_CLUSTER || fs_tmp == FREE_CLUSTER) + fs_tmp = prev; + + /* Сохраняем сектор */ + return fs_saveFatSector(s); +} + +/************************************************************************** +* Установить в описатель кластер * +**************************************************************************/ + +static void fs_setEntryCluster(uint8_t* entry, uint32_t cluster) +{ + LD_uint16_t(entry + DIR_FstClusLO) = (uint16_t)(cluster); + LD_uint16_t(entry + DIR_FstClusHI) = (uint16_t)(cluster >> 16); +} + +/************************************************************************** +* Очистить кластер и буфер * +**************************************************************************/ + +static uint8_t fs_eraseCluster(uint8_t i) +{ + memset(buf, 0, 512); + for(; i < fs_csize; ++i) + if(sd_writeBuf(fs_tmp + i)) return 1; + return 0; +} + +/************************************************************************** +* Выделить описатель в каталоге * +* * +* entry_able должно быть равно 0 * +* entry_start_cluster должен содержать первый кластер папки * +**************************************************************************/ + +static uint8_t* fs_allocEntry() +{ + /* Ищем в папке пустой описатель. */ + while(1) + { + if(fs_readdirInt()) return 0; + + /* Кластеры кончились */ + if(!fs_file.entry_able) break; + + /* Это свободный описатель */ + if(FS_DIRENTRY[0] == 0xE5 || FS_DIRENTRY[0] == 0) /* Может быть еще 0x05 */ + { + + /* Читаем сектор */ + if(sd_readBuf(fs_file.entry_sector)) return 0; + + /* Найденный описатель */ + return buf + (fs_file.entry_index % 16) * 32; + } + } + + /* Ограничение по кол-ву файлов */ + /* Корневой каталог FAT16 так же вернет fs_file.entry_index == 0 */ + if(fs_file.entry_index == 0) + { + lastError = ERR_DIR_FULL; + return 0; + } + + /* Выделить кластер. Результат в fs_tmp */ + if(fs_allocCluster(ALLOCCLUSTER)) return 0; + + /* Добавить еще один кластер к папке. */ + if(fs_setNextCluster(fs_file.entry_cluster)) return 0; /* fs_tmp сохранится, так как он не LAST и не FREE */ + + /* Заполняем ответ */ + fs_file.entry_cluster = fs_tmp; + fs_clust2sect(); + fs_file.entry_sector = fs_tmp; + + /* Очищаем кластер и за одно BUF (используется переменная fs_tmp) */ + fs_eraseCluster(0); + + /* Найденный описатель */ + return buf; +} + +/************************************************************************** +* Открыть/создать файл или папку * +* * +* Имя файла в buf. Оно не должно превышать FS_MAXFILE симолов включая 0 * +* * +* what = OPENED_NONE - Открыть файл или папку * +* what = OPENED_FILE - Создать файл (созданный файл открыт) * +* what = OPENED_DIR - Создать папку (созданная папка не открыта) * +* what | 0x80 - Не создавать файл в папке entry_start_cluster * +* * +* На выходе * +* FS_DIRENTRY - описатель * +* fs_file.entry_able - 0 (если открыт существующий файл/папка) * +* fs_file.entry_sector - сектор описателя * +* fs_file.entry_cluster - кластер описателя * +* fs_file.entry_index - номер описателя * +* fs_file.entry_start_cluster - первый кластер файла или папки * +* fs_parent_dir_cluster - первый кластер папки предка (CREATE) * +* fs_file.ptr - 0 (если открыт файл) * +* fs_file.size - размер файла (если открыт файл) * +* * +* Функция не портит buf[0..MAX_FILENAME-1] * +**************************************************************************/ + +static uint8_t fs_open0_create(uint8_t dir); /* forward */ +static uint8_t* fs_open0_name(uint8_t *p); /* forward */ + +#define FS_DIRFIND (buf + 469) /* 11 байт использующиеся внутри функции fs_open0 */ +#define fs_notrootdir (*(uint8_t*)&fs_file.size) /* Используется fs_open0, в это время переменные fs_file. не содежат нужных значения */ +#define fs_parent_dir_cluster fs_file.sector /* Так же используется fs_file.sector для хранения первого кластера папки предка. */ + +uint8_t fs_open0(uint8_t what) +{ + uint8_t *path; + uint8_t r; + + /* Проверка ошибок программиста */ +#ifndef FS_DISABLE_CHECK + if(fs_type == FS_ERROR) + { + lastError = ERR_NO_FILESYSTEM; + goto abort; + } + fs_file.opened = OPENED_NONE; +#endif + + /* Предотвращение рекурсии */ + r = what & 0x80; + what &= 0x7F; + fs_parent_dir_cluster = fs_file.entry_start_cluster; + + /* Корневой каталог */ + fs_notrootdir = 0; + fs_file.entry_start_cluster = fs_dirbase; + if(fs_type == FS_FAT16) fs_file.entry_start_cluster = 0; + + /* Корневая папка */ + if(buf[0] == 0) + { + if(what) goto abort_noPath; + FS_DIRENTRY[0] = 0; /* Признак корневой папки */ + FS_DIRENTRY[DIR_Attr] = AM_DIR; /* Для упрощения определения файл/папка запишем сюда AM_DIR */ + } + else + { + path = buf; + while(1) + { + /* Получаем очередное имя из path в FS_DIRFIND */ + path = fs_open0_name(path); + if(path == (uint8_t*)1) goto abort_noPath; + /* Ищем имя в папке */ + fs_file.entry_able = 0; + while(1) + { + if(fs_readdir_nocheck()) return 1; + if(fs_file.entry_able == 0) break; + if(!memcmp(FS_DIRENTRY, FS_DIRFIND, 11)) break; + } + /* Последний элементу пути в режиме создания */ + if(what && path == 0) + { + fs_parent_dir_cluster = fs_file.entry_start_cluster; /* Сохраняем в этой переменной результат для фунции fs_move */ + if(fs_type == FS_FAT32 && fs_parent_dir_cluster == fs_dirbase) fs_parent_dir_cluster = 0; + if(fs_file.entry_able == 0) return fs_open0_create(what-1); /* Продолжим там */ + lastError = ERR_FILE_EXISTS; + goto abort; + } + /* Файл/папка не найдена */ + if(fs_file.entry_able == 0) goto abort_noPath; + + /* Что то найдено */ + fs_file.entry_start_cluster = fs_getEntryCluster(); + /* Это был последний элемент пути */ + if(path == 0) break; + /* Это должна быть папка */ + if((FS_DIRENTRY[DIR_Attr] & AM_DIR) == 0) goto abort_noPath; + /* Предотвращаем рекурсию для функции fs_move */ + if(r && fs_file.entry_start_cluster == fs_parent_dir_cluster) goto abort_noPath; + /* Наденная папка уже не будет корневой */ + fs_notrootdir = 1; + } + } + /* Устанавливаем переменные */ + fs_file.entry_able = 0; + fs_file.size = LD_uint32_t(FS_DIRENTRY + DIR_FileSize); + fs_file.ptr = 0; +#ifndef FS_DISABLE_CHECK + fs_file.opened = OPENED_FILE; + if(FS_DIRENTRY[DIR_Attr] & AM_DIR) fs_file.opened = OPENED_DIR; +#endif + + /* Нельзя дважды открывать файл */ +#ifndef FS_DISABLE_CHECK +#ifndef FS_DISABLE_SWAP + if(fs_secondFile.opened==OPENED_FILE && fs_file.opened==OPENED_FILE && fs_secondFile.entry_sector == fs_file.entry_sector && fs_secondFile.entry_index==fs_file.entry_index) + { + fs_file.opened = OPENED_NONE; + lastError = ERR_ALREADY_OPENED; + goto abort; + } +#endif +#endif + + return 0; +abort_noPath: + lastError = ERR_NO_PATH; +abort: + return 1; +} + +static uint8_t exists(const /*flash*/ uint8_t* str, uint8_t c) +{ + while(*str) + if(*str++ == c) + return c; + return 0; +} + +static uint8_t * fs_open0_name(uint8_t *p) +{ + uint8_t c, ni, i; + + memset(FS_DIRFIND, ' ', 11); + i = 0; + ni = 8; + while(1) + { + c = *p++; + if(c == 0) + { + if(i == 0) break; /* Пустое имя файла */ + return 0; + } + if(c == '/') return p; + if(c == '.') + { + if(i == 0) break; /* Пустое имя файла */ +#ifndef FS_DISABLE_CHECK + if(ni != 8) break; /* Вторая точка */ +#endif + i = 8; + ni = 11; + continue; + } + /* Слишком длинное име */ + if(i == ni) break; + /* Запрещенные символы */ +#ifndef FS_DISABLE_CHECK + if(exists((const /*flash*/ uint8_t*)"+,;=[]*?<:>\\|\"", c)) break; + if(c <= 0x20) break; + if(c >= 0x80) break; +#endif + /* Приводим к верхнему регистру */ + if(c >= 'a' && c <= 'z') c -= 0x20; + /* Сохраняем имя */ + FS_DIRFIND[i++] = c; + } + /* Ошибка */ + return (uint8_t*)1; +} + +static uint8_t fs_open0_create(uint8_t dir) +{ + uint8_t new_name[11]; + uint32_t allocatedCluster; + uint8_t* allocatedEntry; + + /* Сохраняем имя, так как весь буфер будет затерт */ + memcpy(new_name, FS_DIRFIND, 11); + + /* Выделяем кластер для папки */ + if(dir) + { + if(fs_allocCluster(ALLOCCLUSTER)) goto abort; /* fs_file.entry_start_cluster изменен не будет, там первый кластер папки в которой мы создадим файл */ + allocatedCluster = fs_tmp; + } + + /* Добавляем в папку описатель (сектор не сохранен) */ + allocatedEntry = fs_allocEntry(); + if(allocatedEntry == 0) + { + + /* В случае ошибки освобождаем кластер */ + fs_tmp = FREE_CLUSTER; + fs_setNextCluster(allocatedCluster); + goto abort; + } + + /* Устаналиваем имя в описатель. */ + memset(allocatedEntry, 0, 32); + memcpy(allocatedEntry, new_name, 11); + + /* ========== УСТАНОВКА ДАТЫ И ВРЕМЕНИ ========== */ + /* Получаем текущее время и дату */ + uint16_t fat_time = fat_pack_time(); + uint16_t fat_date = fat_pack_date(); + + /* Устанавливаем время создания */ + LD_uint16_t(allocatedEntry + DIR_CrtTime) = fat_time; + LD_uint16_t(allocatedEntry + DIR_CrtDate) = fat_date; + + /* Устанавливаем время последней записи (такое же, как и время создания) */ + LD_uint16_t(allocatedEntry + DIR_WrtTime) = fat_time; + LD_uint16_t(allocatedEntry + DIR_WrtDate) = fat_date; + + /* Обнуляем зарезервированное поле (для совместимости) */ + allocatedEntry[DIR_NTres] = 0; + /* ============================================== */ + + if(!dir) + { + /* Сохраняем описатель на диск */ + if(sd_writeBuf(fs_file.entry_sector)) goto abort; + /* fs_file.entry_sector, fs_file.entry_index - устанавлиается в fs_allocCluster */ + fs_file.entry_start_cluster = 0; + fs_file.size = 0; + fs_file.ptr = 0; +#ifndef FS_DISABLE_CHECK + fs_file.opened = OPENED_FILE; +#endif + return 0; + } + + /* Это папка */ + allocatedEntry[DIR_Attr] = AM_DIR; + fs_setEntryCluster(allocatedEntry, allocatedCluster); + + /* Сохраняем описатель на диск */ + if(sd_writeBuf(fs_file.entry_sector)) goto abort; + + /* Сектор для новой папки */ + fs_tmp = allocatedCluster; + fs_clust2sect(); + + /* Очищаем fs_tmp и за одно buf */ + fs_eraseCluster(1); + + /* Создаем пустую папку */ + memset(buf, ' ', 11); + buf[0] = '.'; + buf[11] = 0x10; + fs_setEntryCluster(buf, allocatedCluster); + + /* Устанавливаем дату/время для записи "." в папке */ + LD_uint16_t(buf + DIR_CrtTime) = fat_time; + LD_uint16_t(buf + DIR_CrtDate) = fat_date; + LD_uint16_t(buf + DIR_WrtTime) = fat_time; + LD_uint16_t(buf + DIR_WrtDate) = fat_date; + + memset(buf+32, ' ', 11); + buf[32] = '.'; + buf[33] = '.'; + buf[32+11] = 0x10; + if(fs_notrootdir) fs_setEntryCluster(buf + 32, fs_file.entry_start_cluster); /* Сейчас в fs_file.size==0 значит корневой каталог */ + + /* Устанавливаем дату/время для записи ".." в папке */ + LD_uint16_t(buf + 32 + DIR_CrtTime) = fat_time; + LD_uint16_t(buf + 32 + DIR_CrtDate) = fat_date; + LD_uint16_t(buf + 32 + DIR_WrtTime) = fat_time; + LD_uint16_t(buf + 32 + DIR_WrtDate) = fat_date; + + /* Сохраняем папку */ + return sd_writeBuf(fs_tmp); +abort: + return 1; +} + +/************************************************************************** +* Открыть файл * +**************************************************************************/ + +uint8_t fs_open() +{ + if(fs_openany()) goto abort; +#ifndef FS_DISABLE_CHECK + if(fs_file.opened == OPENED_FILE) return 0; + fs_file.opened = OPENED_NONE; +#else + if((FS_DIRENTRY[DIR_Attr] & AM_DIR) == 0) return 0; +#endif + lastError = ERR_NO_PATH; +abort: + return 1; +} + +/************************************************************************** +* Открыть папку * +**************************************************************************/ + +uint8_t fs_opendir() +{ + if(fs_openany()) goto abort; +#ifndef FS_DISABLE_CHECK + if(fs_file.opened == OPENED_DIR) return 0; + fs_file.opened = OPENED_NONE; +#else + if(FS_DIRENTRY[DIR_Attr] & AM_DIR) return 0; +#endif + lastError = ERR_NO_PATH; +abort: + return 1; +} + +/************************************************************************** +* Вычислить номер следующего сектора для чтения/записи * +* Вызывается только из fs_read0, fs_write_start * +**************************************************************************/ + +static uint8_t fs_nextRWSector() +{ + if(fs_file.ptr == 0) + { + /* Чтение файла еще не начато */ + fs_tmp = fs_file.entry_start_cluster; + } + else + { + /* Еще не конец сектора */ + if((uint16_t)fs_file.ptr % 512) return 0; + + /* Следующий сектор */ + fs_file.sector++; + + /* Еще не конец кластера */ + if(((fs_file.sector - fs_database) % fs_csize) != 0) return 0; + + /* Следующий кластер */ + fs_tmp = fs_file.cluster; + if(fs_nextCluster()) return 1; + } + + /* Если это был последний кластер, добавляем новый */ + if(fs_tmp == 0) + { + if(fs_allocCluster(ALLOCCLUSTER)) return 1; + if(fs_file.ptr == 0) fs_file.entry_start_cluster = fs_tmp; + else fs_setNextCluster(fs_file.cluster); /* fs_tmp сохранится, так как он не LAST и не FREE */ + } + + /* Ок */ + fs_file.cluster = fs_tmp; + fs_clust2sect(); + fs_file.sector = fs_tmp; + return 0; +} + +/************************************************************************** +* Прочитать из файла несколько байт в buf * +* * +* Пользователь не должен выходить за пределы файла при чтении, иначе * +* возникнет утечка свобожного места на диске. * +* * +* Аргументы: * +* ptr - буфер для чтения, может быть buf * +* len - кол-во байт, которые необходимо прочитать * +**************************************************************************/ + +uint8_t fs_read0(uint8_t* ptr, uint16_t len) +{ + uint16_t sectorLen; + + /* Проверка ошибок программиста */ +#ifndef FS_DISABLE_CHECK + if(fs_file.opened != OPENED_FILE) + { + lastError = ERR_NOT_OPENED; + goto abort; + } +#endif + + while(len) + { + /* Если указатель находится на границе сектора */ + if(fs_nextRWSector()) goto abort; + + /* Кол-во байт до конца сектора */ + sectorLen = 512 - ((uint16_t)fs_file.ptr % 512); + if(len < sectorLen) sectorLen = len; + + /* Читаем данные */ + if(ptr) + { + if(sd_read(ptr, fs_file.sector, (uint16_t)fs_file.ptr % 512, sectorLen)) goto abort; + ptr += sectorLen; + } + + /* Увеличиваем смещение */ + fs_file.ptr += sectorLen; + len -= sectorLen; + } + + /* Увеличение размера файла */ + if(fs_file.ptr > fs_file.size) fs_file.size = fs_file.ptr, fs_file.changed = 1; + + return 0; +abort: +#ifndef FS_DISABLE_CHECK + fs_file.opened = OPENED_NONE; +#endif + return 1; +} + +/************************************************************************** +* Прочитать из файла несколько байт в buf * +* * +* Аргументы: * +* ptr - буфер для чтения, может быть buf * +* len - кол-во байт, которые необходимо прочитать * +* readed - указатель, для сохранения кол-ва реально прочитанных байт * +**************************************************************************/ + +uint8_t fs_read(uint8_t* ptr, uint16_t len, uint16_t* readed) +{ + /* Ограничиваем кол-во байт для чтения */ + if(len > fs_file.size - fs_file.ptr) len = (uint16_t)(fs_file.size - fs_file.ptr); + *readed = len; + + /* Проверка на ошибки происходит там */ + return fs_read0(ptr, len); +} + +/************************************************************************** +* Сохранить длину файла и превый кластер в опистаель * +* Вызывается из fs_lseek, fs_write_start, fs_write_end, fs_write_eof * +**************************************************************************/ + +static char fs_saveFileLength() +{ + uint8_t* entry; + + if(fs_file.changed == 0) return 0; + fs_file.changed = 0; + + /* Изменение описателя файла */ + if(sd_readBuf(fs_file.entry_sector)) return 1; + + entry = buf + (fs_file.entry_index % 16) * 32; + LD_uint32_t(entry + DIR_FileSize) = fs_file.size; + fs_setEntryCluster(entry, fs_file.entry_start_cluster); + + return sd_writeBuf(fs_file.entry_sector); +} + +/************************************************************************** +* Установить смещение чтения/записи файла * +**************************************************************************/ + +#define LSEEK_STEP 32768 + +uint8_t fs_lseek(uint32_t off, uint8_t mode) +{ + uint32_t l; + + /* Режим */ + if(mode==1) off += fs_file.ptr; + else if(mode==2) off += fs_file.size; + + /* Можно заменить на fs_file.ptr = 0 для уменьшения кода*/ + if(off >= fs_file.ptr) off -= fs_file.ptr; + else fs_file.ptr = 0; + + do /* Выполняем один цикл даже для off=0, так как внутри происходит проверка на ошибки */ + { + l = off; + if(l > LSEEK_STEP) l = LSEEK_STEP; + if(fs_read0(0, (uint16_t)l)) return 1; + off -= l; + } + while(off); + + /* Размер файла мог изменится */ + fs_saveFileLength(); + + /* Результат */ + fs_tmp = fs_file.ptr; + + return 0; +} + +/************************************************************************** +* Записать в файл (шаг 1) * +***************************************************************************/ + +uint8_t fs_write_start() +{ + uint16_t len; + + /* Проверка ошибок программиста */ +#ifndef FS_DISABLE_CHECK + if(fs_file.opened != OPENED_FILE) + { + lastError = ERR_NOT_OPENED; + goto abort; + } + if(fs_wtotal == 0) + { + lastError = ERR_NO_DATA; + goto abort; + } +#endif + + /* Сколько можно еще дописать в этот сектор? */ + len = 512 - (uint16_t)fs_file.ptr % 512; + + /* Ограничиваем остатком данных в файле */ + if(len > fs_wtotal) len = (uint16_t)fs_wtotal; + + /* Вычисление fs_file.sector, выделение кластеров */ + if(fs_nextRWSector()) goto abort; /* Должно вылетать только по ошибкам ERR_NO_FREE_SPACE, ERR_DISK_ERR */ + + /* Корректируем длину файла */ + if(fs_file.size < fs_file.ptr + len) + { + fs_file.size = fs_file.ptr + len; + fs_file.changed = 1; + } + + /* Читаем данные сектора, если не весь сектор будет заполнен */ + if(len != 512) + { + if(sd_readBuf(fs_file.sector)) goto abort; + } + + fs_file_wlen = len; + fs_file_woff = (uint16_t)fs_file.ptr % 512; + return 0; +abort: + /* Скорее всего это ошибка ERR_NO_FREE_SPACE */ + /* Если размер файла был изменен, то надо бы сохранить изменения в описатель файла. */ + fs_saveFileLength(); + /* Закрываем файл */ +#ifndef FS_DISABLE_CHECK + fs_file.opened = OPENED_NONE; +#endif + return 1; +} + +/************************************************************************** +* Записать в файл (шаг 2) * +***************************************************************************/ + +uint8_t fs_write_end() +{ +#ifndef FS_DISABLE_CHECK + if(fs_file.opened != OPENED_FILE) + { + lastError = ERR_NOT_OPENED; + goto abort; + } +#endif + + /* Записываем изменения на диск */ + if(sd_writeBuf(fs_file.sector)) goto abort; + + /* В случае ошибки файл может содержать больше кластеров, чем требуется по его размеру. */ + /* Но это не плохо, данные не повреждены. А эта ошибка проявится лишь в уменьшении */ + /* места на диске. */ + + /* Счетчики */ + fs_file.ptr += fs_file_wlen; + fs_wtotal -= fs_file_wlen; + + /* Если запись закончена, сохраняем размера файла и первый кластер */ + if(fs_wtotal == 0) + { + if(fs_saveFileLength()) goto abort; + + if(fs_update_timestamp() != 0) { + /* Ошибка обновления времени - не критично, но можно вернуть ошибку */ + /* goto abort; */ /* Раскомментируйте, если хотите возвращать ошибку */ + } + } + + /* Ок */ + return 0; +abort: +#ifndef FS_DISABLE_CHECK + fs_file.opened = OPENED_NONE; +#endif + return 1; +} + +/************************************************************************** +* Освободить цепочку кластеров начиная с fs_tmp * +**************************************************************************/ + +static uint8_t fs_freeChain() +{ + uint32_t c; + while(1) + { + if(fs_tmp < 2 || fs_tmp >= fs_n_fatent) return 0; + /* Освободить кластер fs_tmp и записть в fs_tmp следующий за ним кластер */ + c = fs_tmp, fs_tmp = FREE_CLUSTER; + if(fs_setNextCluster(c)) break; /* fs_tmp будет содержать следующий кластер, так как записывается FREE_CLUSTER */ + } + return 1; +} + +/************************************************************************** +* Переместить файл/папку * +**************************************************************************/ + +uint8_t fs_move0() +{ + uint8_t* entry; + uint8_t tmp[21]; + uint16_t old_index; + uint32_t old_sector, old_start_cluster; + +#ifndef FS_DISABLE_CHECK + if(fs_file.opened == OPENED_NONE) + { + lastError = ERR_NOT_OPENED; + goto abort; + } +#endif + + /* Запоминаем старый описатель */ + old_index = fs_file.entry_index; + old_sector = fs_file.entry_sector; + old_start_cluster = fs_file.entry_start_cluster; + + /* Создаем новый файл. В папку он превратится позже. 0x80 - это предотвращаем рекурсию. */ + if(fs_open0(OPENED_FILE | 0x80)) goto abort; + + /* Предотвращаем ошибки программиста */ +#ifndef FS_DISABLE_CHECK + fs_file.opened = OPENED_NONE; +#ifndef FS_DISABLE_SWAP + fs_secondFile.opened = OPENED_NONE; +#endif +#endif + /* fs_file.sector содежит первый кластер папки, в которой находится созданный файл. */ + + /* Удаление старого файла/папки и перенос всех свойств */ + if(sd_readBuf(old_sector)) goto abort; + entry = buf + (old_index % 16) * 32; + memcpy(tmp, entry+11, 21); + entry[0] = 0xE5; + if(sd_writeBuf(old_sector)) goto abort; + + /* Копируем все свойства новому файлу, тем самым превращая его в папку */ + if(sd_readBuf(fs_file.entry_sector)) goto abort; + entry = buf + (fs_file.entry_index % 16) * 32; + memcpy(entry+11, tmp, 21); + if(sd_writeBuf(fs_file.entry_sector)) goto abort; + + /* В папке надо еще скорретировать описатель .. */ + if(entry[DIR_Attr] & AM_DIR) + { + fs_tmp = old_start_cluster; /* Первый кластер нашей папки */ + fs_clust2sect(); + if(sd_readBuf(fs_tmp)) goto abort; + fs_setEntryCluster(buf+32, fs_parent_dir_cluster); /* Первый кластер папки предка.*/ + if(sd_writeBuf(fs_tmp)) goto abort; + } + + return 0; +abort: + return 1; +} + +uint8_t fs_move(const char* from, const char* to) +{ + strcpy((char*)buf, from); + if(fs_openany()) return 1; + strcpy((char*)buf, to); + return fs_move0(); +} + +/************************************************************************** +* Удалить файл или пустую папку * +* Имя файла должно содержаться в buf и не превышать FS_MAXFILE симолов * +* включая терминатор * +**************************************************************************/ + +uint8_t fs_delete() +{ + uint32_t entrySector; + uint8_t* entry; + + /* Там будет проверен fs_type == FS_ERROR */ + if(fs_openany()) goto abort; + + /* Предотвращаем ошибки программиста */ + fs_file.opened = OPENED_NONE; +#ifndef FS_DISABLE_SWAP + fs_secondFile.opened = OPENED_NONE; +#endif + + /* Корневую папку удалять нельзя */ + if(FS_DIRENTRY[0] == 0) + { + lastError = ERR_NO_PATH; + goto abort; + } + + /* Сохраняем интерформацию о найденном файле, так как fs_readdir ниже их прибьет */ + entrySector = fs_file.entry_sector; + entry = buf + (fs_file.entry_index % 16) * 32; + + /* В папке не должно быть файлов */ + if(FS_DIRENTRY[DIR_Attr] & AM_DIR) + { + /* Перематывем папку на начало */ + fs_file.entry_able = 0; + /* Ищем первый файл или папку */ + /* fs_file.entry_start_cluster сохряняется (содержит первый кластер файла или папки) */ + if(fs_readdir_nocheck()) goto abort; + /* Если нашли, то ошибка */ + if(fs_file.entry_able) + { + lastError = ERR_DIR_NOT_EMPTY; + goto abort; + } + } + + /* Удаляем описатель */ + if(sd_readBuf(entrySector)) goto abort; + entry[0] = 0xE5; + if(sd_writeBuf(entrySector)) goto abort; + + /* Освобождаем цепочку кластеров */ + fs_tmp = fs_file.entry_start_cluster; + return fs_freeChain(); +abort: + return 1; +} +/************************************************************************** +* Обновить время последней записи файла * +* Файл должен быть открыт * +**************************************************************************/ +static uint8_t fs_update_timestamp(void) +{ +#ifndef FS_DISABLE_CHECK + if(fs_file.opened != OPENED_FILE && fs_file.opened != OPENED_DIR) + { + lastError = ERR_NOT_OPENED; + return 1; + } +#endif + + /* Получаем текущее время */ + uint16_t fat_time = fat_pack_time(); + uint16_t fat_date = fat_pack_date(); + + /* Читаем сектор с записью */ + if(sd_readBuf(fs_file.entry_sector)) return 1; + + /* Получаем указатель на запись в каталоге */ + uint8_t* entry = buf + (fs_file.entry_index % 16) * 32; + + /* Обновляем время последней записи */ + LD_uint16_t(entry + DIR_WrtTime) = fat_time; + LD_uint16_t(entry + DIR_WrtDate) = fat_date; + + /* Если время создания не установлено, устанавливаем его */ + if(LD_uint16_t(entry + DIR_CrtTime) == 0 && LD_uint16_t(entry + DIR_CrtDate) == 0) + { + LD_uint16_t(entry + DIR_CrtTime) = fat_time; + LD_uint16_t(entry + DIR_CrtDate) = fat_date; + } + + /* Сохраняем изменения */ + return sd_writeBuf(fs_file.entry_sector); +} +/************************************************************************** +* Установить конец файла * +**************************************************************************/ + +uint8_t fs_write_eof() +{ + /* Проверка ошибок программиста */ +#ifndef FS_DISABLE_CHECK + if(fs_file.opened != OPENED_FILE) + { + lastError = ERR_NOT_OPENED; + goto abort; + } +#endif + + /* Корректируем либо FAT, либо описатель файла. */ + if(fs_file.ptr == 0) + { + /* Удалем все кластеры файла */ + fs_tmp = fs_file.entry_start_cluster; + fs_file.entry_start_cluster = 0; + } + else + { + /* Этот кластер файла последний. */ + fs_tmp = LAST_CLUSTER; + if(fs_setNextCluster(fs_file.cluster)) goto abort; /* fs_tmp будет содержать следующий кластер, так как записывается LAST_CLUSTER */ + } + + /* Удалем все кластеры файла после этого. (они содержатся в fs_tmp); */ + if(fs_freeChain()) goto abort; + + /* Сохраняем длну и первый кластер */ + fs_file.size = fs_file.ptr; + fs_file.changed = 1; + if(!fs_saveFileLength()) return 0; + +abort: +#ifndef FS_DISABLE_CHECK + fs_file.opened = OPENED_NONE; +#endif + return 1; +} + +/************************************************************************** +* Записать в файл * +**************************************************************************/ + +uint8_t fs_write(uint8_t* ptr, uint16_t len) +{ + /* Проверка на ошибки происходит в вызываемых функциях */ + + /* Конец файла */ + if(len == 0) return fs_write_eof(); + + fs_wtotal = len; + do + { + if(fs_write_start()) goto abort; + memcpy(fs_file_wbuf, ptr, fs_file_wlen); + ptr += fs_file_wlen; + if(fs_write_end()) goto abort; + } + while(fs_wtotal); + + return 0; +abort: + return 1; +} + +/************************************************************************** +* Переключить файлы * +**************************************************************************/ + +#ifndef FS_DISABLE_SWAP +void fs_swap() +{ + /* Это занимает меньше ПЗУ, чем три функции memcpy */ + uint8_t t, *a = (uint8_t*)&fs_file, *b = (uint8_t*)&fs_secondFile, n = sizeof(File); + do + { + t=*a, *a=*b, *b=t; + ++a; + ++b; + } + while(--n); +} +#endif + +/************************************************************************** +* Расчет свободного места * +* * +* Результат в переменной fs_tmp в мегабайтах * +* Функция закрывает файл * +**************************************************************************/ + +#ifndef FS_DISABLE_GETFREESPACE +uint8_t fs_getfree() +{ + /* Мы испортим переменную fs_file.sector, поэтому закрываем файл */ + fs_file.opened = OPENED_NONE; + + /* Кол-во свободных кластеров будет в fs_file.sector */ + fs_file.sector = 0; + if(fs_allocCluster(1)) return 1; + + /* Пересчет в мегабайты */ + fs_tmp = ((fs_file.sector >> 10) + 1) / 2 * fs_csize; + + return 0; +} +#endif + +/************************************************************************** +* Размер накопителя в мегабайтах * +**************************************************************************/ + +uint8_t fs_gettotal() +{ + /* Проверка ошибок программиста */ +#ifndef FS_DISABLE_CHECK + if(fs_type == FS_ERROR) + { + lastError = ERR_NO_FILESYSTEM; + return 1; + } +#endif + + fs_tmp = ((fs_n_fatent >> 10) + 1) / 2 * fs_csize; + return 0; +} + +/************************************************************************** +* Размер файла * +**************************************************************************/ + +uint8_t fs_getfilesize() +{ +#ifndef FS_DISABLE_CHECK + if(fs_file.opened != OPENED_FILE) + { + lastError = ERR_NOT_OPENED; + return 1; + } +#endif + fs_tmp = fs_file.size; + return 0; +} + +/************************************************************************** +* Указатель чтения записи файла * +**************************************************************************/ + +uint8_t fs_tell() +{ +#ifndef FS_DISABLE_CHECK + if(fs_file.opened != OPENED_FILE) + { + lastError = ERR_NOT_OPENED; + return 1; + } +#endif + fs_tmp = fs_file.ptr; + return 0; +} diff --git a/components/SD_Card/fs.h b/components/SD_Card/fs.h new file mode 100644 index 0000000..84b5de4 --- /dev/null +++ b/components/SD_Card/fs.h @@ -0,0 +1,187 @@ +/* +It is an open source software to implement FAT file system to +small embedded systems. This is a free software and is opened for education, +research and commercial developments under license policy of following trems. + +(C) 2013 vinxru +(C) 2010, ChaN, all right reserved. + +It is a free software and there is NO WARRANTY. +No restriction on use. You can use, modify and redistribute it for +personal, non-profit or commercial use UNDER YOUR RESPONSIBILITY. +Redistributions of source code must retain the above copyright notice. + +Version 0.99 5-05-2013 +*/ + +#ifndef _FS_H_ +#define _FS_H_ +#ifdef __cplusplus +extern "C" { +#endif + +#include +/* Disable checking and kill the file system */ +/* С помощью этого макроса можно отключить проеерки, что бы сэкономить ПЗУ и убить файловую систему.*/ +/* #define FS_DISABLE_CHECK */ + +/* Two opened files */ +/* Два открытых файла */ +/* #define FS_DISABLE_SWAP */ + +/* Calculation of free disk space */ +/* Определение свободного места на диске */ +/* #define FS_DISABLE_GETFREESPACE */ + +/* Work buffer for filesystem */ +/* Буфер для работы файловой системы */ +extern uint8_t buf[]; + +typedef struct +{ +#ifndef FS_DISABLE_CHECK + uint8_t opened; /* Что открыто: OPENED_NONE, OPENED_FILE, OPENED_DIR */ +#endif + uint8_t entry_able; /* Результат выполнения функции fs_dirread */ + uint16_t entry_index; /* Номер записи в каталоге */ + uint32_t entry_cluster; /* Кластер записи в каталоге */ + uint32_t entry_sector; /* Сектор записи в каталоге */ + uint32_t entry_start_cluster; /* Первый сектор файла или каталога (0 - корневой каталог FAT16) */ + uint32_t ptr; /* Указатель чтения/записи файла*/ + uint32_t size; /* Размер файла / File size */ + uint32_t cluster; /* Текущий кластер файла */ + uint32_t sector; /* Текущий сектор файла */ + uint8_t changed; /* Размер файла изменился, надо сохранить */ +} File; +/* Error */ +/* Ошибки файловой системы */ + +#define ERR_OK 0 // Нет ошибки +#define ERR_NO_FILESYSTEM 1 // Файловая система не обнаружена +#define ERR_DISK_ERR 2 // Ошибка чтения/записи +#define ERR_NOT_OPENED 3 // Файл/папка не открыта +#define ERR_NO_PATH 4 // Файл/папка не найдена +#define ERR_DIR_FULL 5 // Папка содержит максимальное кол-во файлов +#define ERR_NO_FREE_SPACE 6 // Нет свободного места +#define ERR_DIR_NOT_EMPTY 7 // Нельзя удалить папку, она не пуста +#define ERR_FILE_EXISTS 8 // Файл/папка с таким именем уже существует +#define ERR_NO_DATA 9 // fs_file_wtotal=0 при вызове функции fs_write_begin + +#define ERR_MAX_FILES 10 // Не используется файловой системой, резерв +#define ERR_RECV_STRING 11 // Не используется файловой системой, резерв +#define ERR_INVALID_COMMAND 12 // Не используется файловой системой, резерв + +#define ERR_ALREADY_OPENED 13 // Файл уже открыт (fs_swap) + +/* Filesystem variables. Can change */ +/* Переменные файловой системы. Можно изменять */ + +extern uint32_t fs_tmp; +extern uint8_t lastError; /* Последняя ошибка файловой системы или диска */ // ОТСЮДА ВЫРВАЛ ПЕРЕМЕННЫЕ +extern uint16_t fs_wtotal; // Используется функциями fs_write_start, fs_write_end*/ + +extern uint8_t fs_type; /* FS_FAT16, FS_FAT32, FS_ERROR */ +/* Maximal length of file name */ +/* Максимальная длина имени */ + +#define FS_MAXFILE 469 + +/* Result of fs_readdir */ +/* Описатель прочитанный функцией fs_readdir */ + +#define FS_DIRENTRY (buf + 480) + +/* Functions. Returns not 0 if error occured. Destroy buf variable*/ +/* Функцяии. Возращают не 0, если ошибка. Все функции портят buf */ + +uint8_t fs_init(); /* Инициалиазция файловой системы / Init filesystem */ +uint8_t fs_check(); /* Проверка наличия диска, и если нужно, то его инициализация / Checking the disk and, if necessary, it will be initialized */ +uint8_t fs_readdir(); /* Прочитать содежимое папки в DIRENTRY / Read folder contents in DIRENTRY */ +uint8_t fs_delete(); /* Удалить файл или папку, имя в buf / Delete file or folder, name in buf */ +uint8_t fs_open0(uint8_t what); /* Открыть/создать файл или папку, имя в buf. Open/create file or foder, name in buf */ +uint8_t fs_move0(); /* Переместить файл/папку. Move file or folder, source file must been opened, destination name in buf */ +uint8_t fs_move(const char* from, const char* to); /* Переместить файл/папку. Move file or folder. */ +uint8_t fs_lseek(uint32_t ptr, uint8_t mode); /* Установить указатель чтения/записи файла, увеличивает размер файла. / Set file pointer, enlarge file size. */ +uint8_t fs_tell(); /* Получить указатель чтения/записи файла в fs_tmp / Get file pointer in fs_tmp. */ +uint8_t fs_getfilesize(); /* Получить размер файла / Get file size. */ +uint8_t fs_read0(uint8_t* ptr, uint16_t len); /* Прочитать из файла. НЕЛЬЗЯ ВЫХОДИТЬ ЗА ПРЕДЕЛЫ ФАЙЛА! / Read from the file, DO NOT COME OUT FILE */ +uint8_t fs_read(uint8_t* ptr, uint16_t len, uint16_t* readed); /* Прочитать из файла. / Read from the file. */ +uint8_t fs_write(uint8_t* ptr, uint16_t len); /* Записать в файл, увеличивает размер файла. / Записать в файл, enlarge file size. */ +uint8_t fs_write_eof(); /* Установить конец файла, уменьшает размер файла. / Set end of file, reduces file size */ +uint8_t fs_gettotal(); /* Общее место на диске в fs_tmp в мегабайтах / Total disk space in fs_tmp (megabytes) */ + +#ifndef FS_DISABLE_SWAP +void fs_swap(); /* Переключится на второй файл / Switch to the second file */ +#endif + +#ifndef FS_DISABLE_GETFREESPACE +uint8_t fs_getfree(); /* Свободное место на диске в fs_tmp в мегабайтах / Free disk space in fs_tmp (megabytes) */ +#endif + + +/* Функции ниже позволяют использовать для записи буфер (buf). +* The functions below can be used to write the buffer (buf). +* +* wtotal = размер данных для записи; +* while(wtotal) { +* fs_write_start(&wtotal); +* Копируем fs_file_wlen байт в fs_file_wbuf +* Ни одна функция ФС не должеа выпонятсья между ними +* fs_write_end(&wtotal); +* } +* +* See the source of fs_write +* Или смотри исходники fs_write +*/ + +#define fs_file_wlen (*(uint16_t*)&fs_tmp) +#define fs_file_woff ((uint16_t*)&fs_tmp)[1] +#define fs_file_wbuf (buf + fs_file_woff) + +uint8_t fs_write_start(); +uint8_t fs_write_end(); + +/* Derived from the function fs_open0 */ +/* Производные от функции fs_open0 */ + +uint8_t fs_open(); /* Открыть файл */ +uint8_t fs_opendir(); /* Открыть папку */ +#define fs_openany() fs_open0(OPENED_NONE) /* Открыть файл или папку */ +#define fs_create() fs_open0(OPENED_FILE) /* Создать файл */ +#define fs_createdir() fs_open0(OPENED_DIR) /* Создать папку */ + +extern File fs_file; +/* Values ??fs_opened */ +/* Значения fs_opened */ + +#define OPENED_NONE 0 +#define OPENED_FILE 1 +#define OPENED_DIR 2 + +/* File attributes */ +/* Атрибуты файлов */ + +#define AM_RDO 0x01 /* Read only */ +#define AM_HID 0x02 /* Hidden */ +#define AM_SYS 0x04 /* System */ +#define AM_VOL 0x08 /* Volume label */ +#define AM_DIR 0x10 /* Directory */ +#define AM_ARC 0x20 /* Archive */ + +/* Fodler descriptor (FS_DIRENTRY) */ +/* Описатель */ + +#define DIR_Name 0 +#define DIR_Attr 11 +#define DIR_NTres 12 +#define DIR_CrtTime 14 +#define DIR_CrtDate 16 +#define DIR_FstClusHI 20 +#define DIR_WrtTime 22 +#define DIR_WrtDate 24 +#define DIR_FstClusLO 26 +#define DIR_FileSize 28 +#ifdef __cplusplus +} +#endif +#endif \ No newline at end of file diff --git a/components/SD_Card/sd.c b/components/SD_Card/sd.c new file mode 100644 index 0000000..a43ad21 --- /dev/null +++ b/components/SD_Card/sd.c @@ -0,0 +1,298 @@ +/* +It is an open source software to implement SD routines to +small embedded systems. This is a free software and is opened for education, +research and commercial developments under license policy of following trems. + +(C) 2013 vinxru (aleksey.f.morozov@gmail.com) + +It is a free software and there is NO WARRANTY. +No restriction on use. You can use, modify and redistribute it for +personal, non-profit or commercial use UNDER YOUR RESPONSIBILITY. +Redistributions of source code must retain the above copyright notice. + +Version 0.99 5-05-2013 +*/ +#ifndef F_CPU +#define F_CPU 16000000 +#endif +#include +#include +#include "spi.h" +#include "sd.h" +#include "fs.h" + +uint8_t sd_sdhc; /* Используется SDHC карта */ + +/************************************************************************** +* Протокол SPI для ATMega8 * +* Может отличаться для разных МК. * +**************************************************************************/ + +/* Куда подключена линия CS карты */ +#define SD_CS_ENABLE PORTB &= ~0x01; //SS LOW +#define SD_CS_DISABLE PORTB |= 0x01; //SS HIGH + +/* Совместимость с разными версиями CodeVisionAVR */ +#ifndef SPI2X +#define SPI2X 0 +#endif + +/************************************************************************** +* Отправка команды * +**************************************************************************/ + +/* Используемые каманды SD карты */ + +#define GO_IDLE_STATE (0x40 | 0 ) +#define SEND_IF_COND (0x40 | 8 ) +#define READ_SINGLE_BLOCK (0x40 | 17) +#define WRITE_SINGLE_BLOCK (0x40 | 24) +#define SD_SEND_OP_COND (0x40 | 41) +#define APP_CMD (0x40 | 55) +#define READ_OCR (0x40 | 58) + +static uint8_t sd_sendCommand(uint8_t cmd, uint32_t arg) +{ + uint8_t response, retry; + + /* Размещение этого кода тут -4 команды, хотя вроде лишние проверки */ + if(sd_sdhc == 0 && (cmd==READ_SINGLE_BLOCK || cmd==WRITE_SINGLE_BLOCK)) + arg <<= 9; + + /* Выбираем карту */ + SD_CS_ENABLE + + /* Заголовок команды */ + spi_transmit(cmd); + spi_transmit(((uint8_t*)&arg)[3]); + spi_transmit(((uint8_t*)&arg)[2]); + spi_transmit(((uint8_t*)&arg)[1]); + spi_transmit(((uint8_t*)&arg)[0]); + + /* Пару команд требуют CRC. Остальные же команды игнорируют его, поэтому упрощаем код */ + spi_transmit(cmd == SEND_IF_COND ? 0x87 : 0x95); + + /* Ждем подтвреждение (256 тактов) */ + retry = 0; + while((response = spi_receive()) == 0xFF) + if(++retry == 0) break; + + /* Результат команды READ_OCR обрабатываем тут, так как в конце этой функции мы снимем CS и пропускаем 1 байт */ + if(response == 0 && cmd == READ_OCR) + { + /* 32 бита из которых нас интересует один бит */ + sd_sdhc = spi_receive() & 0x40; + spi_receive(); + spi_receive(); + spi_receive(); + } + + /* отпускаем CS и пауза в 1 байт*/ + SD_CS_DISABLE + spi_receive(); + + return response; +} + +/************************************************************************** +* Проверка готовности/наличия карты * +**************************************************************************/ + +uint8_t sd_check() +{ + uint8_t i = 0; + do + { + sd_sendCommand(APP_CMD, 0); + if(sd_sendCommand(SD_SEND_OP_COND, 0x40000000) == 0) return 0; + } + while(--i); + return 1; +} + +/************************************************************************** +* Инициализация карты (эта функция вызывается функцией sd_init) * +**************************************************************************/ + +static uint8_t sd_init_int() +{ + uint8_t i; + + /* Сбрасываем SDHC флаг */ + sd_sdhc = 0; + + /* Минимум 80 пустых тактов */ + for(i=10; i; --i) + spi_receive(); + + /* CMD0 Посылаем команду сброса */ + if(sd_sendCommand(GO_IDLE_STATE, 0) != 1) goto abort; + + /* CMD8 Узнаем версию карты */ + i = 0; + if(sd_sendCommand(SEND_IF_COND, 0x000001AA)) + i = 1; + + /* CMD41 Ожидание окончания инициализации */ + if(sd_check()) goto abort; + + /* Только для второй версии карты */ + if(i) + { + /* CMD58 определение SDHC карты. Ответ обрабатывается в функции sd_sendCommand */ + if(sd_sendCommand(READ_OCR, 0) != 0) goto abort; + } + + return 0; +abort: + return 1; +} + +/************************************************************************** +* Инициализация карты * +**************************************************************************/ + +uint8_t sd_init() +{ + + LED2_DDR |= (1 << LED2_PIN); + LED1_DDR |= (1 << LED1_PIN); + + uint8_t tries; + + /* Освобождаем CS на всякий случай */ + SD_CS_DISABLE + + /* Включаем SPI */ + //spi_init(); + + /* Делаем несколько попыток инициализации */ + tries = 10; + while(sd_init_int()) + if(--tries == 0) + { + lastError = ERR_DISK_ERR; + return 1; + } + + /* Вклчюаем максимальную скорость */ + spi_highSpeed(); + + return 0; +} + +/************************************************************************** +* Ожидание определенного байта на шине * +**************************************************************************/ + +static uint8_t sd_waitBus(uint8_t byte) +{ + uint16_t retry = 0; + do + { + if(spi_receive() == byte) return 0; + } + while(++retry); + return 1; +} + +/************************************************************************** +* Чтение произвольного участка сектора * +**************************************************************************/ + +uint8_t sd_read(uint8_t* buffer, uint32_t sector, uint16_t offsetInSector, uint16_t length) +{ + LED_R_ON(); + uint8_t b; + uint16_t i; + + /* Посылаем команду */ + if(sd_sendCommand(READ_SINGLE_BLOCK, sector)) goto abort; + + /* Сразу же возращаем CS, что бы принять ответ команды */ + SD_CS_ENABLE + + /* Ждем стартовый байт */ + if(sd_waitBus(0xFE)) goto abort; + + /* Принимаем 512 байт */ + for(i=512; i; --i) + { + b = spi_receive(); + if(offsetInSector) + { + offsetInSector--; + continue; + } + if(length == 0) continue; + length--; + *buffer++ = b; + } + + /* CRC игнорируем */ + spi_receive(); + spi_receive(); + + /* отпускаем CS и пауза в 1 байт*/ + SD_CS_DISABLE + spi_receive(); + + /* Ок */ + LED_R_OFF(); + return 0; + + /* Ошибка и отпускаем CS.*/ +abort: + SD_CS_DISABLE + lastError = ERR_DISK_ERR; + LED_R_OFF(); + return 1; +} + +/************************************************************************** +* Запись сектора (512 байт) * +**************************************************************************/ + +uint8_t sd_write512(uint8_t* buffer, uint32_t sector) +{ + LED_W_ON(); + uint16_t n; + + /* Посылаем команду */ + if(sd_sendCommand(WRITE_SINGLE_BLOCK, sector)) goto abort; + + /* Сразу же возращаем CS, что бы отправить блок данных */ + SD_CS_ENABLE + + /* Посылаем стартовый байт */ + spi_transmit(0xFE); + + /* Данные */ + for(n=512; n; --n) + spi_transmit(*buffer++); + + /* CRC игнорируется */ + spi_transmit(0xFF); + spi_transmit(0xFF); + + /* Ответ МК */ + if((spi_receive() & 0x1F) != 0x05) goto abort; + + /* Ждем окончания записи, т.е. пока не освободится шина */ + if(sd_waitBus(0xFF)) goto abort; + + /* отпускаем CS и пауза в 1 байт*/ + SD_CS_DISABLE + spi_receive(); + + /* Ок */ + LED_W_OFF(); + return 0; + + /* Ошибка.*/ +abort: + SD_CS_DISABLE + lastError = ERR_DISK_ERR; + LED_W_OFF(); + return 1; +} diff --git a/components/SD_Card/sd.h b/components/SD_Card/sd.h new file mode 100644 index 0000000..119cc64 --- /dev/null +++ b/components/SD_Card/sd.h @@ -0,0 +1,45 @@ +/* +It is an open source software to implement SD routines to +small embedded systems. This is a free software and is opened for education, +research and commercial developments under license policy of following trems. + +(C) 2013 vinxru (aleksey.f.morozov@gmail.com) + +It is a free software and there is NO WARRANTY. +No restriction on use. You can use, modify and redistribute it for +personal, non-profit or commercial use UNDER YOUR RESPONSIBILITY. +Redistributions of source code must retain the above copyright notice. + +Version 0.99 5-05-2013 +*/ + +#ifndef _SD_H_ +#define _SD_H_ +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define LED1_PORT PORTB +#define LED1_DDR DDRB +#define LED1_PIN PB4 + +#define LED2_PORT PORTB +#define LED2_DDR DDRB +#define LED2_PIN PB5 + +#define LED_R_ON() (LED1_PORT |= (1 << LED1_PIN)) +#define LED_R_OFF() (LED1_PORT &= ~(1 << LED1_PIN)) + +#define LED_W_ON() (LED2_PORT |= (1 << LED2_PIN)) +#define LED_W_OFF() (LED2_PORT &= ~(1 << LED2_PIN)) + +uint8_t sd_init(); /* Инициализация карты */ +uint8_t sd_check(); /* Проверка наличия карты */ +uint8_t sd_read(uint8_t* buffer, uint32_t sector, uint16_t offsetInSector, uint16_t length); /* Чтение части сектора */ +uint8_t sd_write512(uint8_t* buffer, uint32_t sector); /* Запись сектора */ +#ifdef __cplusplus +} +#endif +#endif diff --git a/components/SD_Card/spi.c b/components/SD_Card/spi.c new file mode 100644 index 0000000..ed03976 --- /dev/null +++ b/components/SD_Card/spi.c @@ -0,0 +1,43 @@ +// SD Controller for Computer "Specialst" +// (c) 26-05-2013 vinxru (aleksey.f.morozov@gmail.com) + +// Based on sources CC Dharmani, Chennai (India) +// 1 May 2013 vinxru +#ifndef F_CPU +#define F_CPU 16000000ULL +#endif +#include "spi.h" +#include +#include +#ifndef SPI2X +#define SPI2X 0 +#endif + +void spi_init(void) +{ + DDRB = 0xF7; // + PORTB = 0xF7; // + SPCR = 0x52; // setup SPI: Master mode, MSB first, SCK phase low, SCK idle low + SPSR = 0x00; +} + +uint8_t spi_transmit(uint8_t data) +{ + SPDR = data; + while(!(SPSR & 0x80)); // Wait for transmission complete + return SPDR; +} + +uint8_t spi_receive() +{ + SPDR = 0xFF; + while(!(SPSR & 0x80)); // Wait for reception complete + return SPDR; +} + +void spi_highSpeed() +{ + SPCR = 0x50; + SPSR |= (1< + +void spi_init(); +uint8_t spi_transmit(uint8_t); +uint8_t spi_receive(); +void spi_highSpeed(); +#ifdef __cplusplus +} +#endif +#endif diff --git a/nbproject/Makefile-default.mk b/nbproject/Makefile-default.mk index 44f4df1..15ee9b7 100644 --- a/nbproject/Makefile-default.mk +++ b/nbproject/Makefile-default.mk @@ -51,17 +51,17 @@ OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE} DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE} # Source Files Quoted if spaced -SOURCEFILES_QUOTED_IF_SPACED=components/DS3231/DS3231.c components/DS3231/i2cMaster.c components/Serial.cpp IdiBusCore/IdiBus/IDIBUS_IMPL.c IdiBusCore/IdiBus/RSLink.c IdiBusCore/Required/MEMORY.c IdiBusCore/Required/MODBUS_CRC.c IdiBusCore/Required/SYSTEM.c IdiBusCore/Required/USART1.c IdiBusCore/idibus_custom.c IdiBusCore/idibus_hw.c IdiBusCore/main.c IdiBusSlave.cpp +SOURCEFILES_QUOTED_IF_SPACED=components/DS3231/DS3231.c components/DS3231/i2cMaster.c components/SD_Card/fs.c components/SD_Card/sd.c components/SD_Card/spi.c components/Serial.cpp IdiBusCore/IdiBus/IDIBUS_IMPL.c IdiBusCore/IdiBus/RSLink.c IdiBusCore/Required/MEMORY.c IdiBusCore/Required/MODBUS_CRC.c IdiBusCore/Required/SYSTEM.c IdiBusCore/Required/USART1.c IdiBusCore/idibus_custom.c IdiBusCore/idibus_hw.c IdiBusCore/main.c IdiBusSlave.cpp # Object Files Quoted if spaced -OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/components/DS3231/DS3231.o ${OBJECTDIR}/components/DS3231/i2cMaster.o ${OBJECTDIR}/components/Serial.o ${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o ${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o ${OBJECTDIR}/IdiBusCore/Required/MEMORY.o ${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o ${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o ${OBJECTDIR}/IdiBusCore/Required/USART1.o ${OBJECTDIR}/IdiBusCore/idibus_custom.o ${OBJECTDIR}/IdiBusCore/idibus_hw.o ${OBJECTDIR}/IdiBusCore/main.o ${OBJECTDIR}/IdiBusSlave.o -POSSIBLE_DEPFILES=${OBJECTDIR}/components/DS3231/DS3231.o.d ${OBJECTDIR}/components/DS3231/i2cMaster.o.d ${OBJECTDIR}/components/Serial.o.d ${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o.d ${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o.d ${OBJECTDIR}/IdiBusCore/Required/MEMORY.o.d ${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o.d ${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o.d ${OBJECTDIR}/IdiBusCore/Required/USART1.o.d ${OBJECTDIR}/IdiBusCore/idibus_custom.o.d ${OBJECTDIR}/IdiBusCore/idibus_hw.o.d ${OBJECTDIR}/IdiBusCore/main.o.d ${OBJECTDIR}/IdiBusSlave.o.d +OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/components/DS3231/DS3231.o ${OBJECTDIR}/components/DS3231/i2cMaster.o ${OBJECTDIR}/components/SD_Card/fs.o ${OBJECTDIR}/components/SD_Card/sd.o ${OBJECTDIR}/components/SD_Card/spi.o ${OBJECTDIR}/components/Serial.o ${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o ${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o ${OBJECTDIR}/IdiBusCore/Required/MEMORY.o ${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o ${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o ${OBJECTDIR}/IdiBusCore/Required/USART1.o ${OBJECTDIR}/IdiBusCore/idibus_custom.o ${OBJECTDIR}/IdiBusCore/idibus_hw.o ${OBJECTDIR}/IdiBusCore/main.o ${OBJECTDIR}/IdiBusSlave.o +POSSIBLE_DEPFILES=${OBJECTDIR}/components/DS3231/DS3231.o.d ${OBJECTDIR}/components/DS3231/i2cMaster.o.d ${OBJECTDIR}/components/SD_Card/fs.o.d ${OBJECTDIR}/components/SD_Card/sd.o.d ${OBJECTDIR}/components/SD_Card/spi.o.d ${OBJECTDIR}/components/Serial.o.d ${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o.d ${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o.d ${OBJECTDIR}/IdiBusCore/Required/MEMORY.o.d ${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o.d ${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o.d ${OBJECTDIR}/IdiBusCore/Required/USART1.o.d ${OBJECTDIR}/IdiBusCore/idibus_custom.o.d ${OBJECTDIR}/IdiBusCore/idibus_hw.o.d ${OBJECTDIR}/IdiBusCore/main.o.d ${OBJECTDIR}/IdiBusSlave.o.d # Object Files -OBJECTFILES=${OBJECTDIR}/components/DS3231/DS3231.o ${OBJECTDIR}/components/DS3231/i2cMaster.o ${OBJECTDIR}/components/Serial.o ${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o ${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o ${OBJECTDIR}/IdiBusCore/Required/MEMORY.o ${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o ${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o ${OBJECTDIR}/IdiBusCore/Required/USART1.o ${OBJECTDIR}/IdiBusCore/idibus_custom.o ${OBJECTDIR}/IdiBusCore/idibus_hw.o ${OBJECTDIR}/IdiBusCore/main.o ${OBJECTDIR}/IdiBusSlave.o +OBJECTFILES=${OBJECTDIR}/components/DS3231/DS3231.o ${OBJECTDIR}/components/DS3231/i2cMaster.o ${OBJECTDIR}/components/SD_Card/fs.o ${OBJECTDIR}/components/SD_Card/sd.o ${OBJECTDIR}/components/SD_Card/spi.o ${OBJECTDIR}/components/Serial.o ${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o ${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o ${OBJECTDIR}/IdiBusCore/Required/MEMORY.o ${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o ${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o ${OBJECTDIR}/IdiBusCore/Required/USART1.o ${OBJECTDIR}/IdiBusCore/idibus_custom.o ${OBJECTDIR}/IdiBusCore/idibus_hw.o ${OBJECTDIR}/IdiBusCore/main.o ${OBJECTDIR}/IdiBusSlave.o # Source Files -SOURCEFILES=components/DS3231/DS3231.c components/DS3231/i2cMaster.c components/Serial.cpp IdiBusCore/IdiBus/IDIBUS_IMPL.c IdiBusCore/IdiBus/RSLink.c IdiBusCore/Required/MEMORY.c IdiBusCore/Required/MODBUS_CRC.c IdiBusCore/Required/SYSTEM.c IdiBusCore/Required/USART1.c IdiBusCore/idibus_custom.c IdiBusCore/idibus_hw.c IdiBusCore/main.c IdiBusSlave.cpp +SOURCEFILES=components/DS3231/DS3231.c components/DS3231/i2cMaster.c components/SD_Card/fs.c components/SD_Card/sd.c components/SD_Card/spi.c components/Serial.cpp IdiBusCore/IdiBus/IDIBUS_IMPL.c IdiBusCore/IdiBus/RSLink.c IdiBusCore/Required/MEMORY.c IdiBusCore/Required/MODBUS_CRC.c IdiBusCore/Required/SYSTEM.c IdiBusCore/Required/USART1.c IdiBusCore/idibus_custom.c IdiBusCore/idibus_hw.c IdiBusCore/main.c IdiBusSlave.cpp # Pack Options PACK_COMPILER_OPTIONS=-I "${DFP_DIR}/include" @@ -126,168 +126,204 @@ endif # ------------------------------------------------------------------------------------ # Rules for buildStep: compile ifeq ($(TYPE_IMAGE), DEBUG_RUN) -${OBJECTDIR}/components/DS3231/DS3231.o: components/DS3231/DS3231.c .generated_files/flags/default/50350ab519a922d0263486f669cf2669f2c8512c .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/components/DS3231/DS3231.o: components/DS3231/DS3231.c .generated_files/flags/default/b75e98c10091e4a3d2512cd80a7ec3a72047b40b .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/components/DS3231" @${RM} ${OBJECTDIR}/components/DS3231/DS3231.o.d @${RM} ${OBJECTDIR}/components/DS3231/DS3231.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/components/DS3231/DS3231.o.d" -MT "${OBJECTDIR}/components/DS3231/DS3231.o.d" -MT ${OBJECTDIR}/components/DS3231/DS3231.o -o ${OBJECTDIR}/components/DS3231/DS3231.o components/DS3231/DS3231.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/components/DS3231/DS3231.o.d" -MT "${OBJECTDIR}/components/DS3231/DS3231.o.d" -MT ${OBJECTDIR}/components/DS3231/DS3231.o -o ${OBJECTDIR}/components/DS3231/DS3231.o components/DS3231/DS3231.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -${OBJECTDIR}/components/DS3231/i2cMaster.o: components/DS3231/i2cMaster.c .generated_files/flags/default/5f0f8ce9bd702055c7459161074d9f521bbac4f5 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/components/DS3231/i2cMaster.o: components/DS3231/i2cMaster.c .generated_files/flags/default/2e003f1c90afcc4bcf8fae966da40573e8ce5e04 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/components/DS3231" @${RM} ${OBJECTDIR}/components/DS3231/i2cMaster.o.d @${RM} ${OBJECTDIR}/components/DS3231/i2cMaster.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/components/DS3231/i2cMaster.o.d" -MT "${OBJECTDIR}/components/DS3231/i2cMaster.o.d" -MT ${OBJECTDIR}/components/DS3231/i2cMaster.o -o ${OBJECTDIR}/components/DS3231/i2cMaster.o components/DS3231/i2cMaster.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) - -${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o: IdiBusCore/IdiBus/IDIBUS_IMPL.c .generated_files/flags/default/d4d431dd98aa10b3ebf5ed5198710bcf91594af1 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/components/DS3231/i2cMaster.o.d" -MT "${OBJECTDIR}/components/DS3231/i2cMaster.o.d" -MT ${OBJECTDIR}/components/DS3231/i2cMaster.o -o ${OBJECTDIR}/components/DS3231/i2cMaster.o components/DS3231/i2cMaster.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + +${OBJECTDIR}/components/SD_Card/fs.o: components/SD_Card/fs.c .generated_files/flags/default/55081227c8cb484c185bad33ddc641fdb66c2622 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 + @${MKDIR} "${OBJECTDIR}/components/SD_Card" + @${RM} ${OBJECTDIR}/components/SD_Card/fs.o.d + @${RM} ${OBJECTDIR}/components/SD_Card/fs.o + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/components/SD_Card/fs.o.d" -MT "${OBJECTDIR}/components/SD_Card/fs.o.d" -MT ${OBJECTDIR}/components/SD_Card/fs.o -o ${OBJECTDIR}/components/SD_Card/fs.o components/SD_Card/fs.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + +${OBJECTDIR}/components/SD_Card/sd.o: components/SD_Card/sd.c .generated_files/flags/default/7921bcecca57ada4d2f522ba653083e83e13fbf1 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 + @${MKDIR} "${OBJECTDIR}/components/SD_Card" + @${RM} ${OBJECTDIR}/components/SD_Card/sd.o.d + @${RM} ${OBJECTDIR}/components/SD_Card/sd.o + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/components/SD_Card/sd.o.d" -MT "${OBJECTDIR}/components/SD_Card/sd.o.d" -MT ${OBJECTDIR}/components/SD_Card/sd.o -o ${OBJECTDIR}/components/SD_Card/sd.o components/SD_Card/sd.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + +${OBJECTDIR}/components/SD_Card/spi.o: components/SD_Card/spi.c .generated_files/flags/default/cdd251aca53eba973585c4de57770317e0179d56 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 + @${MKDIR} "${OBJECTDIR}/components/SD_Card" + @${RM} ${OBJECTDIR}/components/SD_Card/spi.o.d + @${RM} ${OBJECTDIR}/components/SD_Card/spi.o + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/components/SD_Card/spi.o.d" -MT "${OBJECTDIR}/components/SD_Card/spi.o.d" -MT ${OBJECTDIR}/components/SD_Card/spi.o -o ${OBJECTDIR}/components/SD_Card/spi.o components/SD_Card/spi.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + +${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o: IdiBusCore/IdiBus/IDIBUS_IMPL.c .generated_files/flags/default/294fe03370ad5f2d3e056c5d8da6d46fd744c891 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/IdiBusCore/IdiBus" @${RM} ${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o.d @${RM} ${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o.d" -MT "${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o.d" -MT ${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o -o ${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o IdiBusCore/IdiBus/IDIBUS_IMPL.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o.d" -MT "${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o.d" -MT ${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o -o ${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o IdiBusCore/IdiBus/IDIBUS_IMPL.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o: IdiBusCore/IdiBus/RSLink.c .generated_files/flags/default/9839f1789d4cecd384998fc265b74172eabf8e9f .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o: IdiBusCore/IdiBus/RSLink.c .generated_files/flags/default/47cc985eb1387524739d82d9025d8fb8fe4787c8 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/IdiBusCore/IdiBus" @${RM} ${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o.d @${RM} ${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o.d" -MT "${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o.d" -MT ${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o -o ${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o IdiBusCore/IdiBus/RSLink.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o.d" -MT "${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o.d" -MT ${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o -o ${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o IdiBusCore/IdiBus/RSLink.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -${OBJECTDIR}/IdiBusCore/Required/MEMORY.o: IdiBusCore/Required/MEMORY.c .generated_files/flags/default/d5e0a3f622a3c23d966dfd7b6b62e4df504c81ad .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/IdiBusCore/Required/MEMORY.o: IdiBusCore/Required/MEMORY.c .generated_files/flags/default/40df7c0de9c936c2c5131933525bbbfab195525c .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/IdiBusCore/Required" @${RM} ${OBJECTDIR}/IdiBusCore/Required/MEMORY.o.d @${RM} ${OBJECTDIR}/IdiBusCore/Required/MEMORY.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/Required/MEMORY.o.d" -MT "${OBJECTDIR}/IdiBusCore/Required/MEMORY.o.d" -MT ${OBJECTDIR}/IdiBusCore/Required/MEMORY.o -o ${OBJECTDIR}/IdiBusCore/Required/MEMORY.o IdiBusCore/Required/MEMORY.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/Required/MEMORY.o.d" -MT "${OBJECTDIR}/IdiBusCore/Required/MEMORY.o.d" -MT ${OBJECTDIR}/IdiBusCore/Required/MEMORY.o -o ${OBJECTDIR}/IdiBusCore/Required/MEMORY.o IdiBusCore/Required/MEMORY.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o: IdiBusCore/Required/MODBUS_CRC.c .generated_files/flags/default/59c6757c6c97bb5795d63980114e0e3dabe10f19 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o: IdiBusCore/Required/MODBUS_CRC.c .generated_files/flags/default/385cc08c60dd6e709d55d44575fe941f1671b08b .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/IdiBusCore/Required" @${RM} ${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o.d @${RM} ${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o.d" -MT "${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o.d" -MT ${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o -o ${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o IdiBusCore/Required/MODBUS_CRC.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o.d" -MT "${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o.d" -MT ${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o -o ${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o IdiBusCore/Required/MODBUS_CRC.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o: IdiBusCore/Required/SYSTEM.c .generated_files/flags/default/379a7b6cd9ef82ad09306bb445e8fc1222b35185 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o: IdiBusCore/Required/SYSTEM.c .generated_files/flags/default/ebb1cf0e0523923a979dad0682169e80f597135f .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/IdiBusCore/Required" @${RM} ${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o.d @${RM} ${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o.d" -MT "${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o.d" -MT ${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o -o ${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o IdiBusCore/Required/SYSTEM.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o.d" -MT "${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o.d" -MT ${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o -o ${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o IdiBusCore/Required/SYSTEM.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -${OBJECTDIR}/IdiBusCore/Required/USART1.o: IdiBusCore/Required/USART1.c .generated_files/flags/default/e431a3c715f2ed28f1ac349726ae939d24645491 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/IdiBusCore/Required/USART1.o: IdiBusCore/Required/USART1.c .generated_files/flags/default/55a6e4eb53d90b2f05b7e590f6fe6befe1652735 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/IdiBusCore/Required" @${RM} ${OBJECTDIR}/IdiBusCore/Required/USART1.o.d @${RM} ${OBJECTDIR}/IdiBusCore/Required/USART1.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/Required/USART1.o.d" -MT "${OBJECTDIR}/IdiBusCore/Required/USART1.o.d" -MT ${OBJECTDIR}/IdiBusCore/Required/USART1.o -o ${OBJECTDIR}/IdiBusCore/Required/USART1.o IdiBusCore/Required/USART1.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/Required/USART1.o.d" -MT "${OBJECTDIR}/IdiBusCore/Required/USART1.o.d" -MT ${OBJECTDIR}/IdiBusCore/Required/USART1.o -o ${OBJECTDIR}/IdiBusCore/Required/USART1.o IdiBusCore/Required/USART1.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -${OBJECTDIR}/IdiBusCore/idibus_custom.o: IdiBusCore/idibus_custom.c .generated_files/flags/default/bb6c41e49678b27546812558e3e5a44aacffa140 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/IdiBusCore/idibus_custom.o: IdiBusCore/idibus_custom.c .generated_files/flags/default/b350bf2ba11210bbcaffd22c579b41795256993e .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/IdiBusCore" @${RM} ${OBJECTDIR}/IdiBusCore/idibus_custom.o.d @${RM} ${OBJECTDIR}/IdiBusCore/idibus_custom.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/idibus_custom.o.d" -MT "${OBJECTDIR}/IdiBusCore/idibus_custom.o.d" -MT ${OBJECTDIR}/IdiBusCore/idibus_custom.o -o ${OBJECTDIR}/IdiBusCore/idibus_custom.o IdiBusCore/idibus_custom.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/idibus_custom.o.d" -MT "${OBJECTDIR}/IdiBusCore/idibus_custom.o.d" -MT ${OBJECTDIR}/IdiBusCore/idibus_custom.o -o ${OBJECTDIR}/IdiBusCore/idibus_custom.o IdiBusCore/idibus_custom.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -${OBJECTDIR}/IdiBusCore/idibus_hw.o: IdiBusCore/idibus_hw.c .generated_files/flags/default/da9dc502576eae6c26465a743cd0ff692d91eb24 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/IdiBusCore/idibus_hw.o: IdiBusCore/idibus_hw.c .generated_files/flags/default/6b26d97c0e3dac990fb8a4928e81f26e38eb149c .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/IdiBusCore" @${RM} ${OBJECTDIR}/IdiBusCore/idibus_hw.o.d @${RM} ${OBJECTDIR}/IdiBusCore/idibus_hw.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/idibus_hw.o.d" -MT "${OBJECTDIR}/IdiBusCore/idibus_hw.o.d" -MT ${OBJECTDIR}/IdiBusCore/idibus_hw.o -o ${OBJECTDIR}/IdiBusCore/idibus_hw.o IdiBusCore/idibus_hw.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/idibus_hw.o.d" -MT "${OBJECTDIR}/IdiBusCore/idibus_hw.o.d" -MT ${OBJECTDIR}/IdiBusCore/idibus_hw.o -o ${OBJECTDIR}/IdiBusCore/idibus_hw.o IdiBusCore/idibus_hw.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -${OBJECTDIR}/IdiBusCore/main.o: IdiBusCore/main.c .generated_files/flags/default/7035e2061def77ffab54fc4f6211a13f114becfd .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/IdiBusCore/main.o: IdiBusCore/main.c .generated_files/flags/default/8d3cd6ed16a6c5d75aa2b5797a643fefec51ea9 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/IdiBusCore" @${RM} ${OBJECTDIR}/IdiBusCore/main.o.d @${RM} ${OBJECTDIR}/IdiBusCore/main.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/main.o.d" -MT "${OBJECTDIR}/IdiBusCore/main.o.d" -MT ${OBJECTDIR}/IdiBusCore/main.o -o ${OBJECTDIR}/IdiBusCore/main.o IdiBusCore/main.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/main.o.d" -MT "${OBJECTDIR}/IdiBusCore/main.o.d" -MT ${OBJECTDIR}/IdiBusCore/main.o -o ${OBJECTDIR}/IdiBusCore/main.o IdiBusCore/main.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) else -${OBJECTDIR}/components/DS3231/DS3231.o: components/DS3231/DS3231.c .generated_files/flags/default/72f82099cef6c6b2219a07033155140b2939f22 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/components/DS3231/DS3231.o: components/DS3231/DS3231.c .generated_files/flags/default/b82907f8ec51d30775f8a003a46eddee233a1059 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/components/DS3231" @${RM} ${OBJECTDIR}/components/DS3231/DS3231.o.d @${RM} ${OBJECTDIR}/components/DS3231/DS3231.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/components/DS3231/DS3231.o.d" -MT "${OBJECTDIR}/components/DS3231/DS3231.o.d" -MT ${OBJECTDIR}/components/DS3231/DS3231.o -o ${OBJECTDIR}/components/DS3231/DS3231.o components/DS3231/DS3231.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/components/DS3231/DS3231.o.d" -MT "${OBJECTDIR}/components/DS3231/DS3231.o.d" -MT ${OBJECTDIR}/components/DS3231/DS3231.o -o ${OBJECTDIR}/components/DS3231/DS3231.o components/DS3231/DS3231.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -${OBJECTDIR}/components/DS3231/i2cMaster.o: components/DS3231/i2cMaster.c .generated_files/flags/default/f4821df3154d6c2b20eb2bbcc5ab87cdbc115867 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/components/DS3231/i2cMaster.o: components/DS3231/i2cMaster.c .generated_files/flags/default/7fbac4260dc4506cf9df4c5b47618e1dad495fa8 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/components/DS3231" @${RM} ${OBJECTDIR}/components/DS3231/i2cMaster.o.d @${RM} ${OBJECTDIR}/components/DS3231/i2cMaster.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/components/DS3231/i2cMaster.o.d" -MT "${OBJECTDIR}/components/DS3231/i2cMaster.o.d" -MT ${OBJECTDIR}/components/DS3231/i2cMaster.o -o ${OBJECTDIR}/components/DS3231/i2cMaster.o components/DS3231/i2cMaster.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) - -${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o: IdiBusCore/IdiBus/IDIBUS_IMPL.c .generated_files/flags/default/cd005048c20b4f8408aae8d847ce275f41fb78e8 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/components/DS3231/i2cMaster.o.d" -MT "${OBJECTDIR}/components/DS3231/i2cMaster.o.d" -MT ${OBJECTDIR}/components/DS3231/i2cMaster.o -o ${OBJECTDIR}/components/DS3231/i2cMaster.o components/DS3231/i2cMaster.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + +${OBJECTDIR}/components/SD_Card/fs.o: components/SD_Card/fs.c .generated_files/flags/default/5f5c356b731fd3b942000f0db68e133f17482ec1 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 + @${MKDIR} "${OBJECTDIR}/components/SD_Card" + @${RM} ${OBJECTDIR}/components/SD_Card/fs.o.d + @${RM} ${OBJECTDIR}/components/SD_Card/fs.o + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/components/SD_Card/fs.o.d" -MT "${OBJECTDIR}/components/SD_Card/fs.o.d" -MT ${OBJECTDIR}/components/SD_Card/fs.o -o ${OBJECTDIR}/components/SD_Card/fs.o components/SD_Card/fs.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + +${OBJECTDIR}/components/SD_Card/sd.o: components/SD_Card/sd.c .generated_files/flags/default/6fbb47a355f15ac50f680669fdefcfed62153308 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 + @${MKDIR} "${OBJECTDIR}/components/SD_Card" + @${RM} ${OBJECTDIR}/components/SD_Card/sd.o.d + @${RM} ${OBJECTDIR}/components/SD_Card/sd.o + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/components/SD_Card/sd.o.d" -MT "${OBJECTDIR}/components/SD_Card/sd.o.d" -MT ${OBJECTDIR}/components/SD_Card/sd.o -o ${OBJECTDIR}/components/SD_Card/sd.o components/SD_Card/sd.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + +${OBJECTDIR}/components/SD_Card/spi.o: components/SD_Card/spi.c .generated_files/flags/default/a6e8e7e83c647792aafdff9be56af1bce2745c1b .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 + @${MKDIR} "${OBJECTDIR}/components/SD_Card" + @${RM} ${OBJECTDIR}/components/SD_Card/spi.o.d + @${RM} ${OBJECTDIR}/components/SD_Card/spi.o + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/components/SD_Card/spi.o.d" -MT "${OBJECTDIR}/components/SD_Card/spi.o.d" -MT ${OBJECTDIR}/components/SD_Card/spi.o -o ${OBJECTDIR}/components/SD_Card/spi.o components/SD_Card/spi.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + +${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o: IdiBusCore/IdiBus/IDIBUS_IMPL.c .generated_files/flags/default/8e1c3ba5ae7c14fc1462d33518cd5efd42714ecc .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/IdiBusCore/IdiBus" @${RM} ${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o.d @${RM} ${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o.d" -MT "${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o.d" -MT ${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o -o ${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o IdiBusCore/IdiBus/IDIBUS_IMPL.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o.d" -MT "${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o.d" -MT ${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o -o ${OBJECTDIR}/IdiBusCore/IdiBus/IDIBUS_IMPL.o IdiBusCore/IdiBus/IDIBUS_IMPL.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o: IdiBusCore/IdiBus/RSLink.c .generated_files/flags/default/c7c590bff8a3cd1ff6caac7956f76f0713d3c72c .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o: IdiBusCore/IdiBus/RSLink.c .generated_files/flags/default/5d9a54c45df71cf9c94ec36953af20c0fd70d8df .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/IdiBusCore/IdiBus" @${RM} ${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o.d @${RM} ${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o.d" -MT "${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o.d" -MT ${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o -o ${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o IdiBusCore/IdiBus/RSLink.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o.d" -MT "${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o.d" -MT ${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o -o ${OBJECTDIR}/IdiBusCore/IdiBus/RSLink.o IdiBusCore/IdiBus/RSLink.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -${OBJECTDIR}/IdiBusCore/Required/MEMORY.o: IdiBusCore/Required/MEMORY.c .generated_files/flags/default/6489ce70cb5491fb242d4fa2a70838316094d175 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/IdiBusCore/Required/MEMORY.o: IdiBusCore/Required/MEMORY.c .generated_files/flags/default/3f232dfffd6a73d52e3b8a6e242bd608a55b9c58 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/IdiBusCore/Required" @${RM} ${OBJECTDIR}/IdiBusCore/Required/MEMORY.o.d @${RM} ${OBJECTDIR}/IdiBusCore/Required/MEMORY.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/Required/MEMORY.o.d" -MT "${OBJECTDIR}/IdiBusCore/Required/MEMORY.o.d" -MT ${OBJECTDIR}/IdiBusCore/Required/MEMORY.o -o ${OBJECTDIR}/IdiBusCore/Required/MEMORY.o IdiBusCore/Required/MEMORY.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/Required/MEMORY.o.d" -MT "${OBJECTDIR}/IdiBusCore/Required/MEMORY.o.d" -MT ${OBJECTDIR}/IdiBusCore/Required/MEMORY.o -o ${OBJECTDIR}/IdiBusCore/Required/MEMORY.o IdiBusCore/Required/MEMORY.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o: IdiBusCore/Required/MODBUS_CRC.c .generated_files/flags/default/647a86467f894d9ed24dfdd8ac0feffafd870282 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o: IdiBusCore/Required/MODBUS_CRC.c .generated_files/flags/default/d7c3301b35003da8a7c0b8d98383b42b01106911 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/IdiBusCore/Required" @${RM} ${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o.d @${RM} ${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o.d" -MT "${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o.d" -MT ${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o -o ${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o IdiBusCore/Required/MODBUS_CRC.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o.d" -MT "${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o.d" -MT ${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o -o ${OBJECTDIR}/IdiBusCore/Required/MODBUS_CRC.o IdiBusCore/Required/MODBUS_CRC.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o: IdiBusCore/Required/SYSTEM.c .generated_files/flags/default/5d83f5de92a231238f8f75df1b3ef94b8a05b409 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o: IdiBusCore/Required/SYSTEM.c .generated_files/flags/default/4f0afe68cdaa8002f344e907180f663f8d414c88 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/IdiBusCore/Required" @${RM} ${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o.d @${RM} ${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o.d" -MT "${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o.d" -MT ${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o -o ${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o IdiBusCore/Required/SYSTEM.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o.d" -MT "${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o.d" -MT ${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o -o ${OBJECTDIR}/IdiBusCore/Required/SYSTEM.o IdiBusCore/Required/SYSTEM.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -${OBJECTDIR}/IdiBusCore/Required/USART1.o: IdiBusCore/Required/USART1.c .generated_files/flags/default/66613652c2b2c02215110a36db1c06e0e2c393e8 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/IdiBusCore/Required/USART1.o: IdiBusCore/Required/USART1.c .generated_files/flags/default/a5e955a507daf869605c5e73aaeca01c6c8b588e .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/IdiBusCore/Required" @${RM} ${OBJECTDIR}/IdiBusCore/Required/USART1.o.d @${RM} ${OBJECTDIR}/IdiBusCore/Required/USART1.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/Required/USART1.o.d" -MT "${OBJECTDIR}/IdiBusCore/Required/USART1.o.d" -MT ${OBJECTDIR}/IdiBusCore/Required/USART1.o -o ${OBJECTDIR}/IdiBusCore/Required/USART1.o IdiBusCore/Required/USART1.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/Required/USART1.o.d" -MT "${OBJECTDIR}/IdiBusCore/Required/USART1.o.d" -MT ${OBJECTDIR}/IdiBusCore/Required/USART1.o -o ${OBJECTDIR}/IdiBusCore/Required/USART1.o IdiBusCore/Required/USART1.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -${OBJECTDIR}/IdiBusCore/idibus_custom.o: IdiBusCore/idibus_custom.c .generated_files/flags/default/bf2fde24ac6c3b2e1ed27f7b2984cd7479c9656b .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/IdiBusCore/idibus_custom.o: IdiBusCore/idibus_custom.c .generated_files/flags/default/36dde7ad5571bbfe1f1be8df9047ae0b5c825ec7 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/IdiBusCore" @${RM} ${OBJECTDIR}/IdiBusCore/idibus_custom.o.d @${RM} ${OBJECTDIR}/IdiBusCore/idibus_custom.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/idibus_custom.o.d" -MT "${OBJECTDIR}/IdiBusCore/idibus_custom.o.d" -MT ${OBJECTDIR}/IdiBusCore/idibus_custom.o -o ${OBJECTDIR}/IdiBusCore/idibus_custom.o IdiBusCore/idibus_custom.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/idibus_custom.o.d" -MT "${OBJECTDIR}/IdiBusCore/idibus_custom.o.d" -MT ${OBJECTDIR}/IdiBusCore/idibus_custom.o -o ${OBJECTDIR}/IdiBusCore/idibus_custom.o IdiBusCore/idibus_custom.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -${OBJECTDIR}/IdiBusCore/idibus_hw.o: IdiBusCore/idibus_hw.c .generated_files/flags/default/85e7255b11423cb24ed1ba94824b46f2d7264f30 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/IdiBusCore/idibus_hw.o: IdiBusCore/idibus_hw.c .generated_files/flags/default/acfece918ef43e8b0b80f46b10283761e988fc97 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/IdiBusCore" @${RM} ${OBJECTDIR}/IdiBusCore/idibus_hw.o.d @${RM} ${OBJECTDIR}/IdiBusCore/idibus_hw.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/idibus_hw.o.d" -MT "${OBJECTDIR}/IdiBusCore/idibus_hw.o.d" -MT ${OBJECTDIR}/IdiBusCore/idibus_hw.o -o ${OBJECTDIR}/IdiBusCore/idibus_hw.o IdiBusCore/idibus_hw.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/idibus_hw.o.d" -MT "${OBJECTDIR}/IdiBusCore/idibus_hw.o.d" -MT ${OBJECTDIR}/IdiBusCore/idibus_hw.o -o ${OBJECTDIR}/IdiBusCore/idibus_hw.o IdiBusCore/idibus_hw.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -${OBJECTDIR}/IdiBusCore/main.o: IdiBusCore/main.c .generated_files/flags/default/11cb3fdede3c3e0bc7601382ea36e8f9a9e9af7 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/IdiBusCore/main.o: IdiBusCore/main.c .generated_files/flags/default/4d9ad3287ca0ac5dcc2881eda46d6b1d381d8957 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/IdiBusCore" @${RM} ${OBJECTDIR}/IdiBusCore/main.o.d @${RM} ${OBJECTDIR}/IdiBusCore/main.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/main.o.d" -MT "${OBJECTDIR}/IdiBusCore/main.o.d" -MT ${OBJECTDIR}/IdiBusCore/main.o -o ${OBJECTDIR}/IdiBusCore/main.o IdiBusCore/main.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusCore/main.o.d" -MT "${OBJECTDIR}/IdiBusCore/main.o.d" -MT ${OBJECTDIR}/IdiBusCore/main.o -o ${OBJECTDIR}/IdiBusCore/main.o IdiBusCore/main.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) endif # ------------------------------------------------------------------------------------ # Rules for buildStep: compileCPP ifeq ($(TYPE_IMAGE), DEBUG_RUN) -${OBJECTDIR}/components/Serial.o: components/Serial.cpp .generated_files/flags/default/8fcc39c7d89bf344ed713ab9b0cafd1d950b4274 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/components/Serial.o: components/Serial.cpp .generated_files/flags/default/6eedc515731fe03625541b8092b6e2e14b502d54 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/components" @${RM} ${OBJECTDIR}/components/Serial.o.d @${RM} ${OBJECTDIR}/components/Serial.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c++ -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/components/Serial.o.d" -MT "${OBJECTDIR}/components/Serial.o.d" -MT ${OBJECTDIR}/components/Serial.o -o ${OBJECTDIR}/components/Serial.o components/Serial.cpp -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c++ -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/components/Serial.o.d" -MT "${OBJECTDIR}/components/Serial.o.d" -MT ${OBJECTDIR}/components/Serial.o -o ${OBJECTDIR}/components/Serial.o components/Serial.cpp -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -${OBJECTDIR}/IdiBusSlave.o: IdiBusSlave.cpp .generated_files/flags/default/83436abf1f13efcdacae23c23d8225887da720bf .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/IdiBusSlave.o: IdiBusSlave.cpp .generated_files/flags/default/b201acfeede6feccd0fa1700341cbee099995410 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}" @${RM} ${OBJECTDIR}/IdiBusSlave.o.d @${RM} ${OBJECTDIR}/IdiBusSlave.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c++ -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusSlave.o.d" -MT "${OBJECTDIR}/IdiBusSlave.o.d" -MT ${OBJECTDIR}/IdiBusSlave.o -o ${OBJECTDIR}/IdiBusSlave.o IdiBusSlave.cpp -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c++ -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusSlave.o.d" -MT "${OBJECTDIR}/IdiBusSlave.o.d" -MT ${OBJECTDIR}/IdiBusSlave.o -o ${OBJECTDIR}/IdiBusSlave.o IdiBusSlave.cpp -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) else -${OBJECTDIR}/components/Serial.o: components/Serial.cpp .generated_files/flags/default/172261e5988e0bda69a64282f5d4b9236e1a0e3a .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/components/Serial.o: components/Serial.cpp .generated_files/flags/default/4efb7f259b35c5d96582e543d03584a80a9b79fe .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}/components" @${RM} ${OBJECTDIR}/components/Serial.o.d @${RM} ${OBJECTDIR}/components/Serial.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c++ -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/components/Serial.o.d" -MT "${OBJECTDIR}/components/Serial.o.d" -MT ${OBJECTDIR}/components/Serial.o -o ${OBJECTDIR}/components/Serial.o components/Serial.cpp -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c++ -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/components/Serial.o.d" -MT "${OBJECTDIR}/components/Serial.o.d" -MT ${OBJECTDIR}/components/Serial.o -o ${OBJECTDIR}/components/Serial.o components/Serial.cpp -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -${OBJECTDIR}/IdiBusSlave.o: IdiBusSlave.cpp .generated_files/flags/default/a74bbcadb7d2e80a057d3584c526c3f5b6668a6d .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 +${OBJECTDIR}/IdiBusSlave.o: IdiBusSlave.cpp .generated_files/flags/default/f55a6a38fd719d90fe5cac592208ad78e426f4d .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709 @${MKDIR} "${OBJECTDIR}" @${RM} ${OBJECTDIR}/IdiBusSlave.o.d @${RM} ${OBJECTDIR}/IdiBusSlave.o - ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c++ -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/FatFS" -I"components/DS3231" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusSlave.o.d" -MT "${OBJECTDIR}/IdiBusSlave.o.d" -MT ${OBJECTDIR}/IdiBusSlave.o -o ${OBJECTDIR}/IdiBusSlave.o IdiBusSlave.cpp -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) + ${MP_CPPC} $(MP_EXTRA_CC_PRE) -mmcu=atmega1280 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c++ -c -D__$(MP_PROCESSOR_OPTION)__ -I"IdiBusCore" -I"IdiBusCore/IdiBus" -I"IdiBusCore/Required" -I"components" -I"components/DS3231" -I"components/SD_Card" -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/IdiBusSlave.o.d" -MT "${OBJECTDIR}/IdiBusSlave.o.d" -MT ${OBJECTDIR}/IdiBusSlave.o -o ${OBJECTDIR}/IdiBusSlave.o IdiBusSlave.cpp -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) endif diff --git a/nbproject/Makefile-genesis.properties b/nbproject/Makefile-genesis.properties index 35558ad..7803e94 100644 --- a/nbproject/Makefile-genesis.properties +++ b/nbproject/Makefile-genesis.properties @@ -1,13 +1,13 @@ # -#Wed Jun 17 19:22:07 MSK 2026 +#Thu Jun 18 18:11:42 MSK 2026 default.languagetoolchain.version=14.2.0 default.Pack.dfplocation=C\:\\Users\\Michail\\.mchp_packs\\Microchip\\ATmega_DFP\\3.5.296 default.com-microchip-mplab-nbide-toolchain-avr-AVRLanguageToolchain.md5=7077cb0f7d3286937e616ce3e96e957a conf.ids=default default.languagetoolchain.dir=C\:\\Users\\Michail\\AVR\\cooler_tool\\bin -host.id=1au8-yc59-u8 +host.id=j20m-9n47-m default.platformTool.md5=null -configurations-xml=f542f1386b31395cd747c126941e36e0 +configurations-xml=ce6ff5c6abf1abdba4979c3ef20c7ea4 com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=6cd85c1014597ae4d039afea70fe46c5 proj.dir=C\:\\Users\\Michail\\MPLABXProjects\\IdiBus_Logger host.platform=windows