打印
[uCOS/RTOS]

OSMemCreate()中创建链表的疑问

[复制链接]
3036|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
luoengineer|  楼主 | 2021-11-4 17:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

请教下面标红的代码都是局部变量操作的,最后也没有返回。这样操作怎么会建立了一个链表呢?

OS_MEM  *OSMemCreate (void *addr, INT32U nblks, INT32U blksize, INT8U *err)
{
#if OS_CRITICAL_METHOD == 3                           /* Allocate storage for CPU status register      */
    OS_CPU_SR  cpu_sr;
#endif   
    OS_MEM    *pmem;
    INT8U     *pblk;
    void     **plink;
    INT32U     i;

    ......

    plink = (void **)addr;                            /* Create linked list of free memory blocks      */
    pblk  = (INT8U *)addr + blksize;
    for (i = 0; i < (nblks - 1); i++) {
        *plink = (void *)pblk;
        plink  = (void **)pblk;
        pblk   = pblk + blksize;
    }
    *plink              = (void *)0;                  /* Last memory block points to NULL              */
    pmem->OSMemAddr     = addr;                       /* Store start address of memory partition       */
    pmem->OSMemFreeList = addr;                       /* Initialize pointer to pool of free blocks     */
    pmem->OSMemNFree    = nblks;                      /* Store number of free blocks in MCB            */
    pmem->OSMemNBlks    = nblks;
    pmem->OSMemBlkSize  = blksize;                    /* Store block size of each memory blocks        */
    *err                = OS_NO_ERR;
    return (pmem);
}

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

80

帖子

1

粉丝