硬件平台:STM32F769IDISCOVERY

软件平台:KEIL5.1

UCOSIII简介:

uC/OS-III是一个可扩展的,可固化的,抢占式的实时内核,它管理的任务个数不受限制。它是第三代内核,提供了现代实时内核所期望的所有功能包括资源管理、同步、内部任务交流等。uC/OS-III 也提供了很多特性是在其他实时内核中所没有的。比如能在运行时测量运行性能,直接发送信号或消息给任务,任务能同时等待多个信号量和消息队列。它与UCOSII的最大不同之处在于:

1.对任务数量没有要求,对任务的优先级没有要求,允许存在同一优先级不同的任务。

2.支持时间片轮转。对相同优先级的任务,允许设置每个任务运行的时间,按顺序执行任务。

3.取消消息邮箱,不通过消息队列发消息给任务,不通过信号量标记任务。

4.支持运行时配置,任务的停止与恢复支持嵌套。

UCOSIII移植:

由于我之前第二个评测时,已经创建了一个工程文件,实现了最基本的功能--LED灯的闪烁。因此,我们依然使用这个工程文件来进行移植,要实现的功能依然是LED灯的闪烁。

工程文件的下载地址:创建第一个工程文件——STM32F769I图像处理能力评测之二()

好了,接下来开始移植:

1.登录MICRIUM官网,下载UCOSIII。下载地址:。由于官方基本都是使用IAR平台进行UCOS的移植,并没找到MDK平台的移植,不过没关系,可以下载下来,重新进行移植。官网移植的芯片针对STM32F746,并没有STM32F769,但是二者都是基于M7内核,除了外设和浮点运算,基本上差异不大。

原版的UCOSIII工程文件,在附件里有提供。

2.打开之前的工程文件,创建一个文件夹,命名为UCOSIII。然后在里面创建5个子文件夹,依次为APP、BSP、uC_CPU、uC _LIB 和uCOS-III。APP文件夹用于存放我们编写的应用程序,比如我们要实现的LED闪烁,以及应用程序的配置,比如堆栈的配置。BSP文件夹主要用于配置底层驱动,比如IO口的配置。uC_CPU文件夹是存放UCOS与目标芯片相关的内核文件。uC _LIB文件夹存放UCOS相关的库函数,比如:数学运算、字符串转换。uCOS-III文件夹存放操作系统的内核文件。如下图所示:

创建UCOSIII文件夹

在UCOSIII文件夹下创建5个文件夹

3.打开uC_CPU文件夹,并创建如下3个文件夹:

打开uC _LIB文件夹,并创建如下3个文件夹:

打开uCOS-III文件夹,并创建如下3个文件夹:

4.解压我们刚才下载的UCOSIII工程文件,开始添加文件。找到如下文件路径,添加文件到我们刚才新创建的文件夹uCOS-III\Source。

找到如下文件路径,添加文件到我们刚才新创建的文件夹uCOS-III\Port。

找到如下文件路径,添加文件到我们刚才新创建的文件夹uCOS-III\Config。

至此,uCOS-III文件夹的文件添加完毕。

5. 找到如下文件路径,添加文件到我们刚才新创建的文件夹uC _LIB\Source。

找到如下文件路径,添加文件到我们刚才新创建的文件夹uC _LIB\Port。

找到如下文件路径,添加文件到我们刚才新创建的文件夹uC _LIB\Config。

至此,uC _LIB文件夹的文件添加完毕。

6. 找到如下文件路径,添加文件到我们刚才新创建的文件夹uC _CPU\Source。

找到如下文件路径,添加文件到我们刚才新创建的文件夹uC _CPU\Port。

找到如下文件路径,添加文件到我们刚才新创建的文件夹uC _CPU\Config。

至此,uC _CPU文件夹的文件添加完毕。

7. 找到如下文件路径,添加文件到我们刚才新创建的文件夹APP,并把文件修改为。

8. 找到如下文件路径,添加文件到我们刚才新创建的文件夹BSP。

9.至此,我们已经把UCOSIII的文件添加到项目中。接着打开KEIL工程文件,将刚才添加的UCOSIII文件添加到KEIL项目中,添加完成后如下图所示:

创建APP目录,添加APP文件夹下的文件

创建BSP目录,添加BSP文件夹下的文件

创建uC_CPU_Port目录,添加uC_CPU\Port文件夹下的文件

创建uC_CPU_Souce目录,添加uC_CPU\Souce文件夹下的文件

创建uC_CPU_Config目录,添加uC_CPU\Config文件夹下的文件

创建uC_LIB_Port目录,添加uC_ LIB\Port文件夹下的文件

创建uC_LIB_Source目录,添加uC_ LIB\Source文件夹下的文件

创建uC_LIB_Config目录,添加uC_ LIB\Config文件夹下的文件

创建uCOS _Port目录,添加uCOS-III\Port文件夹下的文件

创建uCOS _Source目录,添加uCOS-III\Source文件夹下的文件

创建uCOS _Config目录,添加uCOS-III\Config文件夹下的文件

10.待上述步骤完成后,开始修改文件。打开uC_CPU_Port目录下的文件,按如下步骤进行修改:

1.修改第39行——第51行的内容,修改完成后如下所示:

2. 修改第58行——第59行的内容,修改完成后如下所示:

3. 修改第129行的内容,将其改为:CPU_WaitForInt

4. 修改第144行的内容,将其改为:CPU_ CPU_WaitForExcept

5. 修改第191行的内容,将其改为:CPU_CntLeadZeros

6. 修改第238行的内容,将其改为:CPU_ CPU_CntTrailZeros

7. 修改第273行的内容,将其改为:CPU_ CPU_CPU_RevBits

11. 打开uC_CPU_Port目录下的文件,按如下步骤进行修改:

1. 删除第86行的内容。

2.修改第318行的内容,将其改为:

#define CPU_INT_DIS()         do { cpu_sr= CPU_SR_Save(); } while (0)

3.修改第319行的内容,将其改为:

#define  CPU_INT_EN()          do { CPU_SR_Restore(cpu_sr); } while(0)

4.修改第353行的内容,将其改为:

#define CPU_MB()       __dsb(0xF)

5.修改第354行的内容,将其改为:

#define CPU_RMB()      __dsb(0xF)

6.修改第355行的内容,将其改为:

#define CPU_WMB()      __dsb(0xF)

12. 打开uC_CPU_Config目录下的文件,按如下步骤进行修改:

1.修改第101行的内容,将其改为:

#define CPU_CFG_TS_32_EN                      DEF_DISABLED

2 .修改第131行的内容,将其改为:

#if 0

#define CPU_CFG_INT_DIS_MEAS_EN

#endif

13. 打开uC_LIB_Port目录下的文件,按如下步骤进行修改:

1. 修改第56行的内容,将其改为:EXPORT  Mem_Copy

2. 修改第63行的内容,修改完成后,如下所示:

3. 修改第105行的内容,将其改为:Mem_Copy

4. 修改第110行的内容,将其改为:Mem_Copy_1

5. 修改第115行的内容,将其改为:Mem_Copy_2

6. 修改第120行的内容,将其改为:Mem_Copy_3

7. 修改第124行的内容,将其改为:Chk_Align_32

8. 修改第133行的内容,将其改为:Pre_Copy_1

9. 修改第140行的内容,将其改为:Pre_Copy_1_Cont

10. 修改第148行的内容,将其改为:Chk_Align_16

11. 修改第155行的内容,将其改为:Pre_Copy_2

12. 修改第166行的内容,将其改为:Copy_32_1

13. 修改第190行的内容,将其改为:Copy_32_2

14. 修改第198行的内容,将其改为:Copy_32_3

15. 修改第206行的内容,将其改为:Copy_16_1

16. 修改第244行的内容,将其改为:Copy_16_2

17. 修改第252行的内容,将其改为:Copy_08_1

18. 修改第290行的内容,将其改为:Copy_08_2

19. 修改第299行的内容,将其改为:Mem_Copy_END

14. 打开uC_LIB_Config目录下的文件,按如下步骤进行修改:

1. 修改第72行的内容,将其改为:

#define LIB_MEM_CFG_ARG_CHK_EXT_EN    DEF_ENABLED

2. 修改第118行的内容,定义UCOS的动态内存,根据需要进行修改,我这里改为2k动态内存,将其改为:

#define LIB_MEM_CFG_HEAP_SIZE            (2u * 1024u)

15. 打开uCOS _Port目录下的os_文件,按如下步骤进行修改 :

1. 修改第34行——第51行的内容,修改完成后如下所示:

2. 修改第68行——第69行的内容,修改完成后如下所示:

3. 修改第83行——第94行的内容,修改完成后如下所示:

4. 修改第108行——第115行的内容,修改完成后如下所示:

16. 打开uCOS _Port目录下的文件,按如下步骤进行修改:

1. 修改第60行的内容,将其改为:#include  ""

17. 打开uCOS _Port目录下的os_文件,按如下步骤进行修改:

1. 修改第76行的内容,将其改为:#ifdef  __TARGET_FPU_VFP

2. 修改第91行的内容,将其改为:

#define OS_TASK_SW_SYNC()         __isb(0xF)

18. 打开uCOS_Config目录下的文件,对UCOS系统组件进行裁剪,这个根据自己项目的需要。我这里做如下修改:

1. 修改第46行的内容,将其改为:

#define OS_CFG_TS_EN                    DEF_DISABLED              //禁止时间戳

2. 修改第51行的内容,将其改为:

#define OS_CFG_SCHED_ROUND_ROBIN_EN     DEF_ENABLED                    //使能时间片轮转

3. 修改第57行的内容,将其改为:

#define OS_CFG_FLAG_EN                  DEF_DISABLED                  //禁止事件标志

4. 修改第74行的内容,将其改为:

#define OS_CFG_Q_EN                     DEF_DISABLED                 //禁止消息队列

5. 修改第96行的内容,将其改为:

#define OS_CFG_TASK_DEL_EN              DEF_ENABLED                            //使能任务删除

19. 打开uCOS _Config目录下的文件,这里可以修改中断堆栈的大小,统计任务的优先级、运行频率和堆栈大小、定时器任务的优先级、定时时间和堆栈大小等等。可以根据项目需要进行修改,我这里做如下修改:

1. 修改第63行的内容,将其改为:

#define OS_CFG_TICK_TASK_PRIO          2u                    //滴答定时器任务的优先级为2级

20. 打开BSP目录下的文件,这个文件用来编写与底层硬件驱动相关的各种函数接口。我们要在这里完成LED驱动函数的编写。我这里做如下修改:

1. 删除第45行至第47行的内容,这两个是原版工程文件定义头文件,我们不需要。

2.添加LED初始化函数。

3.添加系统滴答定时器的初始化函数。

4.修改BSP_Init函数。

21. 打开APP目录下的文件,这个文件用来定义我们所编写任务的优先级及其堆栈大小。我们的目标实现LED的闪烁功能,因此,只需要一个任务初始化函数,并在里面实现LED的闪烁。我这里做如下修改:

1. 修改第52行的内容,将其改为:

#define APP_CFG_TASK_START_PRIO  1u        //UCOS启动后,第一个调用的任务。设置优先级为1

2. 删除第53行和第54行的内容,这两个是原版工程文件定义的任务优先级,我们不需要。

3. 删除第64行和第65行的内容,这两个是原版工程文件定义的任务的堆栈大小,我们不需要。

22. 打开APP目录下的文件,这个文件是供用户编写任务函数的地方。我这里做如下修改:

1. 删除第54行和第55行的内容,这两个是原版工程文件定义的头文件,我们不需要。

2. 删除第62行和第63行的内容,这两个是原版工程文件的定义,我们不需要。

3.修改第72行的内容,将其改为:OS_TCB       AppTaskStartTCB;

4. 修改第73行的内容,将其改为:CPU_STK      AppTaskStartStk[APP_CFG_TASK_START_STK_SIZE];

5. 删除第76行至第102行的内容, 我们只保留起始任务相关的定义,其余一概不要。

6.修改第82行的内容,将其改为:void  AppTaskStart (void  *p_arg);

7. 删除第83行至第89行的内容, 我们只保留起始任务相关的定义,其余一概不要。

8. 保留AppTaskStart函数定义,其余函数定义一概不要。

9. 修改AppTaskStart函数,完成LED闪烁功能, 如下所示:

23. 打开CMSIS目录下的文件,对堆栈和堆得大小做出修改,这个要根据实际项目的需求做出更改,我这里做如下修改:

1.修改第48行的内容,将其改为:Stack_Size      EQU     0x00001000;

2.修改第59行的内容,将其改为:Heap_Size       EQU     0x00001000

3.将该文件里的关键字PendSV_Handler,全部用OS_CPU_PendSVHandler替代。

24. 打开USER目录下的文件,修改滴答定时器中断函数。

1.添加头文件    #include ""

2.添加头文件    #include ""

3.修改滴答定时器中断函数

25. 打开USER目录下的文件,做如下修改:

1.添加头文件    #include ""

2. 添加头文件    #include""

3.删除之前定义的的LED初始化函数和延时函数

4.添加外部声明  extern OS_TCB       AppTaskStartTCB;

5.添加外部声  extern CPU_STK   AppTaskStartStk[APP_CFG_TASK_START_STK_SIZE];

6.添加外部声明  extern void AppTaskStart( void *p_arg );

7.对main函数进行修改,如下所示

26.至此,所有的文件修改完毕。接下来只要设置Keil的包含文件路径,就可以进行编译,下载到开发板中。本应该在这个章节测试LORA模块,板子周围的原件基本焊接完成,但是两块主芯片sx1276和stm32l152迟迟未到,看来计划要泡汤了,对此抱歉哈。

tensorflow2.0 图像处理项目_UCOSIII移植——STM32F769I 图像处理能力评测之五相关推荐

  1. tensorflow2.0 图像处理项目_游戏爱好者应该看看这个开源项目

    关注公众号 "转角遇到GitHub" ,每天推荐给你优秀开源项目 大家好,我是欧盆索思(opensource),每天为你带来优秀的开源项目! 今天推荐一个日本人开发的 2D 游戏库 ...

  2. tensorflow2.0 图像处理项目_航天泰坦丨国产自主遥感图像处理软件当自强

    点击蓝字关注 国产自主遥感图像处理软件当自强 航天泰坦公司超算平台产品 通过浙江省自然资源监测中心验收 近日,航天泰坦公司自主研发的泰坦超算平台产品在浙江省信息化测绘创新基地通过了浙江省自然资源监测中 ...

  3. TensorFlow2.0实战项目之车道偏离预警

    目录 1 项目介绍--什么是车道偏离预警? 2 项目实施框架 3 项目实施具体步骤 3.1 获取视频流 3.2 颜色识别 3.3 图像去噪 3.4 拟合直线 3.5 数据标注 3.6 训练模型 3.7 ...

  4. 9大项目实战!tensorflow2.0框架实战(免费资料+干货合集)

    (翻至底部还有超多免费资料+干货合集) 随着PyTorch的不断发展,你是否开始抛弃TF转而向PT发起进攻了呢? 即便现在Pytorch发展迅速,但TensorFlow就像一个定时炸弹,你不知道什么时 ...

  5. Java OpenCV-4.0.0 图像处理22 图像模板匹配

    Java OpenCV-4.0.0 图像处理22 图像模板匹配 参考链接:https://blog.csdn.net/qq_34814092/article/details/95813654 Java ...

  6. Java OpenCV-4.0.0 图像处理11 自定义图像滤波(降噪) 算子

    @[TOC](Java OpenCV-4.0.0 图像处理11 自定义图像滤波(降噪) 算子) Java OpenCV-4.0.0 自定义图像线性滤波(降噪) package com.xu.image ...

  7. 回归项目实战:预测燃油效率 (tensorflow2.0官方教程翻译)

    最全TensorFlow2.0学习路线 www.mashangxue123.com 在回归问题中,我们的目标是预测连续值的输出,如价格或概率. 将此与分类问题进行对比,分类的目标是从类列表中选择一个类 ...

  8. 【TensorFlow2.0】数据读取与使用方式

    大家好,这是专栏<TensorFlow2.0>的第三篇文章,讲述如何使用TensorFlow2.0读取和使用自己的数据集. 如果您正在学习计算机视觉,无论你通过书籍还是视频学习,大部分的教 ...

  9. 【TensorFlow2.0】以后我们再也离不开Keras了?

    TensorFlow2.0 Alpha版已经发布,在2.0中最重要的API或者说到处都出现的API是谁,那无疑是Keras.因此用过2.0的人都会吐槽全世界都是Keras.今天我们就来说说Keras这 ...

最新文章

  1. SVO(SVO: fast semi-direct monocular visual odometry)
  2. Java学习总结:11(final关键字)
  3. GitHub超3万星最全面试题库:计算机面试题一网打尽
  4. ubuntu apt-get dpkg应用中的一些问题及解决方法
  5. 深度学习---英文名称简写大全
  6. 获取客户端浏览器信息
  7. 任正非:华为三十年大限快到了,想不死就得新生
  8. 什么是python 包_什么是python
  9. 应用程序初次运行数据库配置小程序(Java版)
  10. 从零实现深度学习框架——手写前馈网络实现电影评论分类
  11. android组件不能加适配器,Android 针对继承BaseAdapter的自定义适配器应注意的几个地方...
  12. 【原创】基于Qt5.14的一站式安卓开发环境搭建
  13. 13、TWS API和IB中的历史数据
  14. Tensorflow手写数字识别
  15. 安科瑞预付费水电集团物业解决方案-Susie 周
  16. ❤️React Hooks⭐
  17. 基于滴滴云主机搭建 FTP 文件共享服务器(一)
  18. BUUCTF WEB exec+lovesql
  19. 通过ext排查MySQL服务器间歇性卡顿问题
  20. U-Boot 之零 源码文件、启动阶段(TPL、SPL)、FALCON、设备树

热门文章

  1. 正则表达式入门30分钟——很经典的入门教材
  2. linux 11Gasm启动crs,11GR2重建CRS
  3. mysql 自定义函数教程_Mysql 自定义函数
  4. NMS 原理和c++实现,已测试通过
  5. box怎么用 latency_box-sizing使用场景
  6. 2018年4月计算机组成原理试题,全国2018年4月自考(02318)计算机组成原理试题及答案.pdf...
  7. pcie标准_24Pin接口再见!华擎推出首款ATX12VO标准的Z490主板
  8. windows7没pdf打印机_公司中常见的八种打印机故障解决方法
  9. 吴裕雄 python 机器学习——人工神经网络与原始感知机模型
  10. [Swift]LeetCode227. 基本计算器 II | Basic Calculator II