Я пытаюсь использовать файл sys/queue.h
из OpenBSD для управления связанным списком.
Я пишу механизм кэширования для небольшого микроконтроллера.Страницы сохраняются в кеше, когда они используются, и удаляются, когда для других целей, таких как malloc, требуется память.
Для этой задачи необходимо найти страницу с минимальным количеством обращений (страница с наименьшим числом обращений - этонаименее вероятно использовать) и освободить его.Однако я сталкиваюсь с довольно простой ошибкой.
Это моя функция на данный момент:
void _fmem_cache_malloc_purge(int requested_size)
{
int n = ((requested_size / FMEM_SECTOR_SIZE) + 1) * FMEM_SECTOR_SIZE;
struct s_fmem_cache_entry *entry, *lowentry;
long int lowhits;
fmem_acquire();
for(; n > 0; n--)
{
// Traverse the cache table. Find an entry with a minimum number of hits.
lowhits = -1;
LIST_FOREACH(entry, &fmem_cache, entry_ptr)
{
if(lowhits == -1 || lowhits > entry->hits)
{
lowentry = entry;
lowhits = entry->hits;
}
}
// Free the minimum entry.
assert(lowhits > 0);
LIST_REMOVE(lowentry, entry_ptr); <-- error occurs here (line 170)
mmgr_free(lowentry->data);
mmgr_free(lowentry);
fmem_cache_size--;
}
fmem_release();
}
Определения (в верхней части того же файла):
struct s_fmem_cache_entry {
fAddr addr;
char data[FMEM_SECTOR_SIZE];
long int hits, ctime;
LIST_ENTRY(fmem_cache_entry) entry_ptr;
};
LIST_HEAD(s_fmem_cache_head, s_fmem_cache_entry) fmem_cache;
Я получаю ошибку:
flashmem.c: In function '_fmem_cache_malloc_purge':
flashmem.c:160: warning: assignment from incompatible pointer type
flashmem.c:170: error: dereferencing pointer to incomplete type
Я чувствую, что это простая ошибка, но C для меня нов.