luoengineer 发表于 2021-11-4 17:50

OSMemCreate()中创建链表的疑问


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

OS_MEM*OSMemCreate (void *addr, INT32U nblks, INT32U blksize, INT8U *err)
{
#if OS_CRITICAL_METHOD == 3                           /* Allocate storage for CPU status register      */
    OS_CPU_SRcpu_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);
}
页: [1]
查看完整版本: OSMemCreate()中创建链表的疑问