FreeRTOS内核解析v0.1-LOVT

FreeRTOS内核解析v0.1-LOVT

ID:39550389

大小:762.37 KB

页数:39页

时间:2019-07-06

FreeRTOS内核解析v0.1-LOVT_第1页
FreeRTOS内核解析v0.1-LOVT_第2页
FreeRTOS内核解析v0.1-LOVT_第3页
FreeRTOS内核解析v0.1-LOVT_第4页
FreeRTOS内核解析v0.1-LOVT_第5页
资源描述:

《FreeRTOS内核解析v0.1-LOVT》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、FreeRTOS内核解析FreeRTOS是一个小型的嵌入式实时系统内核,应用比较广泛,而且开源,商业免费。在STM32F4系列上移植FreeRTOSStartSystemPeripheralInitOSInitTASKAOSTaskSchedulerTASKBTASKC图1OS操作流程在FreeRTOS内核中包含的文件:1.croutine.c协线程文件,和任务类似,在系统资源比较缺乏下使用。2.list.c列表结构描述,在内核整体控制上都使用了列表格式数据处理。一切的数据结构基础。3.queue.

2、c队列,任务和任务之间的通讯处理。4.Timers.c软定时,以任务形式存在。5.Port.c硬件与系统内核交互部分。SVC、PENDSC、中断等设置。汇编与C的结合6.Heap.c堆栈内存空间。内存空间申请,释放。在这里我们使用heap_4.c。7.tasks.c所有任务相关函数。8.cmsisi_os.c系统相关接口CMSISI_OS标准化,接口处理。TPCON.CN--LOVT15.09.01heap_4.c实现原理:申请一块静态内存,按照堆的方式处理。包含内存申请,释放,自动合并相连的空闲内

3、存。应用API函数:void*pvPortMalloc(size_txWantedSize);voidvPortFree(void*pv);size_txPortGetFreeHeapSize(void);内部过程函数:staticvoidprvHeapInit(void);staticvoidprvInsertBlockIntoFreeList(xBlockLink*pxBlockToInsert);//申请内存空间块描述可以看做一个节点typedefstructA_BLOCK_LINK{stru

4、ctA_BLOCK_LINK*pxNextFreeBlock;//指向下一块内存size_txBlockSize;//空闲块大小}xBlockLink;//指向开始和结尾xStart是静态内存pxEnd是个指针xBlockLinkxStart,*pxEnd=NULL节点数据空间。。。节点数据空间。。。在系统蛇口中要考虑到字节对齐的问题。所以在申请一块内存时,要先进行内存字节格式对齐。也就是说1-7个字节格式化后也为8个字节。#defineportBYTE_ALIGNMENT8//8字节对齐#defi

5、neportBYTE_ALIGNMENT_MASK(0x0007)//对齐掩码staticconstunsignedshortheapSTRUCT_SIZE=((sizeof(xBlockLink)+(portBYTE_ALIGNMENT-1))&~portBYTE_ALIGNMENT_MASK);//静态内存作为整个内存空间configTOTAL_HEAP_SIZE宏定义设置根据需求设置大小staticunsignedcharucHeap[configTOTAL_HEAP_SIZE];#defin

6、eheapADJUSTED_HEAP_SIZE(configTOTAL_HEAP_SIZE-portBYTE_ALIGNMENT)//实际可用大小TPCON.CN--LOVT15.09.01在初始化prvHeapInit()函数中假设configTOTAL_HEAP_SIZE为1024(0x400)在实际使用空间中起码可以保持1024-8个字节空间可用pucAlignedHeap指向了8字节对齐化了的地址xStart.pxNextFreeBlock=(void*)pucAlignedHeap;xSt

7、art.xBlockSize=(size_t)0;假设ucHeap是一个不对齐的地址0x00427c58;那么8字节对齐后为0x00427c600x00427c580x00428058。。。。。。0x00427c60pucAlignedHeap指向该位置xStart可以看做独立该空间的一个节点大小为0指向空间的开始地址xStart->pxNextFreeBlock指向pucAlignedHeappucHeapEnd=pucAlignedHeap+xTotalHeapSize;pucHeapEnd-=

8、heapSTRUCT_SIZE;pxEnd=(void*)pucHeapEnd;更新pxEnd指向pxEnd->xBlockSize=0;pxEnd->pxNextFreeBlock=NULL;0x00428050(pxEnd)。。。。。。NULL(pxNextFreeBlock)pxFirstFreeBlock=(void*)pucAlignedHeap;pxFirstFreeBlock->xBlockSize=xTotalHeapSize-heapSTRUCT_S

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。