я логирую данные во внешнюю память.
размерность памяти 8 бит. каждая запись 16 бит то есть каждая запись берет 2 байта. текущий адрес записи я храню в глобальной переменной - param1.logNum.
и тут я задумался над оптимальным алгоритмом - считать последних n записей. причем мне эти записи надо послать пакетами по 18 байт каждый пакет.
Кое что я набросал.
Код
void BLUENRG_SendLog(void) //send n deltas from the last
{
uint32_t chank = 18; //DELTA_SIZE * AVAILABLE_BUF_SIZE;
uint32_t last_log_addr = param1.logNum * DELTA_SIZE;
uint32_t packet_size;
uint32_t tx_num=0;
uint32_t current_addr = last_log_addr - (chank * tx_num);
//check if the overflow occurred
while (current_addr > START_LOG_ADRESS)
{
packet_size = chank;
uint8_t buf[packet_size];
LOGGER_Readlog(current_addr, packet_size, buf);
SendBuf(buf);
tx_num++;
current_addr = last_log_addr - (chank * tx_num);
}
// send the rest of data ???
}
Но мне это не нравиться. Может лучше отсчитать и начать с младшего адреса? Проще и не надо проверять ушел ли я за границы начального адреса.
Сообщение отредактировал Jenya7 - Oct 19 2015, 07:24