Ⅰ、概述

打开上一篇文章新建的工程,是提取的ST标准库里面源代码文件和UCOS工程包源代码文件。下载过的朋友可能会知道,直接编译那个工程会有大片的错误和警告,原因在于那个工程是没有经过修改源代码的工程,接下来就是讲述一步一步修改源代码的过程(也就是所谓的移植过程)。

该文接着上一篇文章来讲述“UCOS移植详细过程”,上一篇文章是讲述准备工作、文件提取并整理、新建UCOS工程等工作。该文讲述UCOS移植过程中修改源代码(底层代码、系统配置等)工作。

笔者将“UCOS移植详细过程”分为多篇文章来讲述,敬请关注。

关于本文的详情请往下看(微信请点击“阅读原文”查看内容链接内容)。

本着免费分享的原则,方便大家手机学习知识,定期在微信平台分享技术知识。如果你觉得分享的内容对你有用,又想了解更多相关的文章,请用微信搜索“EmbeddDeveloper” 或者扫描下面二维码、关注,将有更多精彩内容等着你。

Ⅱ、ST芯片配置

配置ST型号的方法有两种:使用标准库源代码配置和工程配置

1.源代码配置

打开工程 -> 打开源代码“stm32f10x.h”文件。

使用F103大容量的芯片:取消第68行STM32F10X_MD的注释,这里需要和我们的启动代码匹配startup_stm32f10x_hd.s。

使用标准外设库:取消第105行USE_STDPERIPH_DRIVER的注释,使用标准外设库,我们使用stm32f10x_conf.h文件来配置使用到的外设库。

2.工程配置

打开工程 -> Project -> Options for Target -> C/C++,在该选项预定义里面添加STM32F10X_MD,USE_STDPERIPH_DRIVER这两个宏定义即可。

注意:两种方法用一种即可。效果图如下:

Ⅲ、配置系统滴答时钟

系统的运行离不开系统滴答,就像我前面说过的:系统滴答的作用,就是驱动整个系统工作的心脏,如果没有了它,就等于人没有了心跳。

1.初始化滴答

我们使用ST的滴答SysTick来配置作为操作系统的滴答时钟,芯片SysTick是属于内核(Cortex-M3)的一部分,所以,在初始化的时候是调用CM3里面的源代码(SysTick_Config函数)。

这里说明一下,只要使用Cortex-M3内核的芯片都有这个功能,可以说SysTick是专门为系统而设计的。

系统滴答配置如上图,位于app_cfg.c源文件下面。

2.滴答中断配置

中断函数需要调用系统相关的函数,也就是系统进行滴答相关的函数,这里是规定这么调用的。

Ⅳ、裁剪系统(配置os_cfg.h)

对于我们常说的系统可裁剪,其实就是对系统某些功能打开和关闭,使用到的功能才打开,不使用的功能就关闭(即使能和失能),这个文件就集中在os_cfg.h文件里面。

这里先说一下重要的几个选项:

1.最低优先级OS_LOWEST_PRIO

这个与我们配置任务优先级有关系,最低优先级任务配置的最大值。我们所说的任务优先级关系是:优先级越小,数值越大; 相反,优先级越大,数值越小。

位于os_cfg.h文件第39行:

#define OS_LOWEST_PRIO           63

2.系统每秒滴答数OS_TICKS_PER_SEC

这个宏定义的意思就是说,系统每秒钟滴答多少次,它与系统延时(OSTimeDly)关系比较重要,我们的例子中OS_TICKS_PER_SEC等于100,调用OSTimeDly(100);相当于的延时100个滴答,即延时1秒的意思。

位于os_cfg.h文件第51行:

#define OS_TICKS_PER_SEC        100

3.任务堆栈大小OS_TASK_xxx_STK_SIZE

这个几个宏定义在使用相应功能的时候有用,如果RAM资源有限,这个任务堆栈的大小最好根据任务来评估一下,资源有限时不要太大,当然也不能小于程序正常运行。

位于os_cfg.h文件第55 - 57行:

#define OS_TASK_TMR_STK_SIZE    128

#define OS_TASK_STAT_STK_SIZE   128

#define OS_TASK_IDLE_STK_SIZE   128

4.其他

还有很多与系统其他资源相关的配置,正常的情况下是需要的时候才开启,不用尽量关闭。一是节约资源,二是减少编译时间。后期我会将中文注释在后面。

Ⅴ、下载

我将移植完成,建立了3个简单任务的例程放在360云盘供大家下载与参考:

https://yunpan.cn/cRIpR5bwHMCCY  访问密码 3885

UCOS2基于STM32F107的软件工程包(官网原版):

Micrium官网下载地址(需要账号):

https://www.micrium.com/download/micrium_stm32f107_ucos-ii

我360云盘下载地址:

https://yunpan.cn/cRzcf8eSacEhE  访问密码 1235

标准外设库:

ST官网下载地址(需要账号):

http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software.html?querycriteria=productId=SC961

我360云盘下载地址(定期更新):

https://yunpan.cn/cSaCpGejMSfr8  访问密码 60ae

Ⅵ、说明

相关的文章可以到我博客上查看,我也会定期更新,新内容第一时间在微信分享。

当你掌握UCOS在一种平台上的移植,其他平台移植原理类似,请不要局限某一平台。

以上总结仅供参考,若有不对之处,敬请谅解。

Ⅶ、最后

关注微信,回复“更多内容”,将获得更多内容(如:UCOS实例等,不断更新中......)。

如果你喜欢我分享的内容,你又想了解更多相关内容,请关注文章开头的微信公众号,新内容持续更新中,后期将会有更多精彩内容出现。

上一篇文章

UCOS2_STM32F1移植详细过程(二)的更多相关文章

  1. UCOS2_STM32F1移植详细过程

    源:UCOS2_STM32F1移植详细过程(三) UCOS2_STM32移植过程.系统内核.事件描述(汇总)

  2. UCOS2_STM32F1移植详细过程(三)

    Ⅰ.概述 上一篇文章是讲述ST芯片相关的配置和OS裁剪相关的配置,接着上一篇文章来讲述关于UCOS的移植,该文主要针对uC/OS-II Ports下面os_cpu_a.asm.os_cpu_c.c和o ...

  3. UCOS2_STM32F1移植详细过程(一)

    Ⅰ.概述 该文写针对初学µC/OS的朋友,基于以下平台来一步一步移植µC/OS嵌入式操作系统.UCOS移植相关平台: 系统平台:µC/OS-II  (最新V2.92版) 硬件平台:STM32F1    ...

  4. UCOS2_STM32F1移植详细过程(四)

    Ⅰ.概述 上一篇文章是讲述uC/OS-II Ports下面os_cpu_a.asm.os_cpu_c.c和os_cpu.h文件底层端口代码的移植(修改)和说明,接着上一篇文章来讲述关于UCOS移植应用 ...

  5. UCOS2_STM32移植详细过程(汇总)

    Ⅰ.概述 笔者发现一个问题,很多初学者,甚至很多工作一两年的人,他们有一种依赖的思想,就是希望从别处获取的软件代码不做任何修改,直接可以运行或者使用.笔者想说,实践才是检验真理的关键,实践才是掌握知识 ...

  6. android wifi驱动移植详细过程

    转自:http://bbs.imp3.net/thread-10558924-1-1.html 对于刚入手android没多久的人来说,android wifi 驱动的移植确实还是有难度的,不过参考了 ...

  7. Linux(二):VMware虚拟机中Ubuntu安装详细过程

    Linux(二):VMware虚拟机中Ubuntu安装详细过程 目录 1 准备 2 安装 2.1 虚拟机的建立 2.2 虚拟机安装Ubuntu系统 2.3 虚拟机设置 3 完成 1 准备 1.操作系统 ...

  8. STM32F0xx_EXIT中断配置详细过程

    Ⅰ.概述 EXIT外部中断在使用到按键或者开关控制等应用中比较常见,低功耗中断唤醒也是很常见的一种.因此,EXIT在实际项目开发中也是比较常见的一种. STM32F0中外部中断EXIT属于中断和事件的 ...

  9. STM32F0xx_PWR低功耗配置详细过程

    Ⅰ.概述 今天总结PWR部分知识,请看“STM32F0x128参考手册V8”第六章.提供的软件工程是关于电源管理中的停机模式,工程比较常见,但也是比较简单的一个实例,根据项目的不同还需要适当修改或者添 ...

随机推荐

  1. Linux-Apache+Mysql+PHP+PHPWind(重点Apache+PHP集成环境)

    整理Apache+Mysql+PHP+PHPWind(Apache+PHP集成环境) 一.情况简述: 1.虚拟机VM上面CentOS 2.全部yum安装(yum安装与源码安装的安装路径不同) 二.操作 ...

  2. python基础set

    1.set set是一个无序的不重复的集合 li=[11,22,33,11] s=set(li) print(s) {11,22,33}  set提供的方法 1.add(self, *args, ** ...

  3. 配置Tomcat的JVM的大小解决Tomcat内存溢出的问题

    操作步骤如下图所示(图中也有对应的文字说明已比较详细,不再用文字做过多的解释): 1: 2: 3: 4: 5: 下面是配置的参数的说明: -Xms256m                     JV ...

  4. No.006 ZigZag Conversion

    6. ZigZag Conversion Total Accepted: 98584 Total Submissions: 398018 Difficulty: Easy The string &qu ...

  5. pb中读取大文本数据

    string ls_FileName,lb_FileDatas,lb_FileData  long ll_FileLen,ll_Handle,ll_Loop,ll_Bytes,ll_Loops,ll_ ...

  6. c# 利用 两个TREEVIEW控件完成TEENODE的鼠标拖动操作

    功能说明: 我们有两个TREEVIEW控件——TREEVIEW1,TREEVIEW2.Treeview1内有三个NODE,Treeview2内有三个NODE.将Treeview1内的NODE拖动到Tr ...

  7. 织梦dedecms中html和xml格式的网站地图sitemap制作方法

    sitemap是网站上各网页的列表.创建并提交sitemap有助于百度(Google)发现并了解您网站上的所有网页,包括百度通过传统抓取方式可能找不到的网页.还可以使用sitemap提供有关你网站的其 ...

  8. sql case when 多条件

    when  'ChangeProductName'=   case  --联名借姓名    --when  a.ChangeProductName is not null   then (substr ...

  9. Excel2007给表格设置成只读加密属性 让他人无法修改

    在制作一些报表和公司的表格时,我们常常需要给Excel表格加密或者设置成只读属性来加以防护这些重要表格.给表格加密可以预防他人无法打开表格,只有通过输入正确的密码后才可以正常打开.设置成只读的话,可以 ...

  10. Android IOS WebRTC 音视频开发总结(五五)-- 音视频通讯中的抗丢包与带宽自适应原理

    本文主要分析webrtc中的抗丢包与带宽自适应原理,文章来自博客园RTC.Blacker,欢迎关注微信公众号blacker,更多详见www.rtc.help 文章内容主要来自中国电信北京研究院丁博士在 ...