Цитата(Jenya7 @ Oct 19 2015, 18:26)

Код
...
int32_t current_addr = last_log_addr-chunk;
...
if(current_addr - START_LOG_ADRESS >= chunk)
packet_size = chunk;
else
packet_size = current_addr - START_LOG_ADRESS;
...
current_addr -= chunk;
}
если не лень функцию можно сделать абсолютно генерик стайл без привязки к какой либо железке кольцевая она там или нет.
Закольцовка имеет смысл если записи идут и идут, а считывание всё откладывается. Тогда закольцевав буфер сохраняем последние записи (ессно затерев самые старые из них).
В конце наверное нужно вычитать не chunk, а packet_size (на случай если блок был укороченный). И похоже нужно смотреть разницу не между текущим адресом и стартовым, а между конечным и стартовым (для примера можно посмотреть что будет если в буфере было 5 записей а считывается 18 -при первом же заходе в функцию будем сразу из нее вылетать, т.к current_addr
< START_LOG_ADRESS). Не понятно зачем нужна переменная chunk, если она используется только как копия константы CHUNK