【问题标题】:List management library in C for micro controllers用于微控制器的 C 语言列表管理库
【发布时间】:2013-01-28 06:42:28
【问题描述】:

我正在使用基于 8051 内核的 CC2532 进行项目。我使用 SDCC 作为编译器。

我需要创建一个字符串列表,并添加、删除、追加、列出元素。

是否有任何简单的开源/免费库,它们足够轻巧,可以在 MCU 中使用?

我找到了 SimCList 和 SGLIB,但它们似乎有点矫枉过正,我想知道是否有人知道更简单/更轻便的替代方案。我只需要 (add,remove,list,size) 函数。不需要它只是一个简单的 FIFO 列表循环。我总共有 4K RAM。列表元素的数量最多为 20 个。

【问题讨论】:

  • 如果您只需要 FIFO,软件堆栈不是更好吗?为此,您只需要一个足够大的数组即​​可。成员和堆栈指针。对于标量(整数、浮点数、指针),添加和删除只是 *--stackptr = xx = *stackptr++
  • @Vovanium Jelipito 想要一个 队列 (FIFO) 而不是堆栈 (LIFO)。

标签: list linked-list microcontroller 8051 sdcc


【解决方案1】:

简单的列表很容易实现,因此您自己做可能会更好。如果您愿意,您可以从a library I wrote a long time ago 中提取文件include/proto/exec.hinclude/exec/nodes.hinclude/exec/lists.hlib/NewList.clib/List.c 以进行简单的实现。您可以使用NewList 来初始化一个空的 FIFO,AddTail 可以将节点添加到您的 FIFO,RemHead 可以从您的 FIFO 中删除节点。 size 函数如下所示:

unsigned int size(struct List *list)
{
    unsigned int res = 0;
    struct Node *node = list->lh_Head;
    while (node->ln_Succ != NULL) {
        res++;
        node = node->ln_Succ;
    }
    return res;
}

注意,与许多其他列表框架不同,列表结尾的测试是 node->ln_Succ != NULL。这实际上是对Amiga list system 的重做。

我应该在这里复制所有用于列表处理的代码吗?

【讨论】:

  • 谢谢,是的,我会试一试。你如何销毁/释放元素?我还不是很熟悉
  • 做内存管理。这意味着您仍然需要自己跳malloc/free
猜你喜欢
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多