我是靠谱客的博主 如意中心,最近开发中收集的这篇文章主要介绍uC/os-ii在MDK下使用心得,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

   还是上次那个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下使用心得所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部