概述
还是上次那个lwip+ucos-ii的项目,因为整个功能已经基本实现,那么最后一步就是优化注释了,因此也就有了这篇关于MDK的使用心得。
1. MDK使用技巧
(1)、对于仅修改少部分文件,按F7(build)编译当前文件链接即可,不需要rebuild。如果build也是全部编译的话,勾掉options -> output下的Create Batch File即可。
(2)、MDK格式缩进,选中段,按TAB则段整体右移,按SHIFT + TAB则整体左移。
(3)、底层硬件驱动对端口进行写入和写出时中间添加延时函数__nop()(注意前面是2个'_');增加程序在高频下的兼容性(具体
参考datesheet,过长可能会时序错误)。
(4)、对于编译成功的项目希望查看占用的RAM和ROM大小
项目编译成功后会显示如下图
Code: 代码 70308B
RO-data: 只读变量97608B
RW-data:可读写变量 3808B
ZI-data: 未初始化变量66192B
则占用RAM( RW-data + ZI-data) :70000byte(68.36kB)
占用ROM(Code+ RO-data+RW-data):168992byte(165.03KB) 实际上大于上面3项之和,为什么呢?
选择Options -> Listing -> Linker Listing ->Memorey map(勾上),编译完成点开生成.map文件,
就可以清晰看出来:
ROM中还包含代码中的数据(值为5868),不过现在ROM比代码大的多,至少256KB都够用,而且一部分固定代码(像网页,字库可以额外配spi存储器W25X16,把数据移入就行,因此不用担心,倒是RAM特别需要注意,不满足记得更换
芯片啊。
2 .uC/os-II配置技巧
即然上面讲诉的主要是存储占用相关的信息,而RAM内存一般都是紧缺的,那么这里我就主要讲一下uC/OS-ii堆栈的配置,说到堆栈的配置,这里要讲下uC/os-ii压栈机制了。当任务切换时,uC/os-ii会将一层层的函数地址压栈直到当前执行的语句,也就是说深度是与调用的层次有关的,uC/os -ii也提供了合理的机制可以自由决定任务堆栈的大小,并提供了函数OSTaskStkChk用于堆栈深度测试,先不说这个函数,这里我会讲诉一个更简单更准确的方法来让你确定堆栈的大小。
选择Options -> Listing -> Linker Listing ->Callgraph勾上,编译完成点开生成的htm文件,就可以看到需要执行线程的堆栈,
可以知道堆栈深度为516 + unkown byte;
则我们选择的堆栈就是640byte(部分冗余,防止溢出),又因为OS_STK被定义为int
那么我们#define App_TaskStartStk 160 //640/4 即可
如此便可以配置堆栈到合适的范围,避免浪费和出错
上面说的堆栈配置需要完成大部分项目,在优化的时候才能做,因为深度是与代码息息相关的。
最后
以上就是如意中心为你收集整理的uC/os-ii在MDK下使用心得的全部内容,希望文章能够帮你解决uC/os-ii在MDK下使用心得所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复