热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

UC/OS和UCGUI移植札记

本文移植基于STM32F103RB(内核为ARMCortexM3);UCOS版本:V2.86;UCGUI版本:V3.90对于UCOS和UCGUI移
       本文移植基于STM32F103RB(内核为ARM Cortex M3);UC/OS版本:V2.86;UCGUI版本:V3.90
    对于UC/OS和UCGUI移植,网上铺天盖地都是资料,内容大部分都差不多,按步骤一步步来,一般问题不大,但是没有理解本质,一旦出现问题,就是大麻烦,下面是基于本人实践对网上资料的一些补充,如果按照网上的资料最后有问题的,可以作为参考。

 一、 UC/OS移植(网上资料有的步骤不重复)
    1. OS_CPU.h
    三个作用:(1)声明全局变量,一般不做改动;
               (2) 类型定义:就是一些typedef,对于常用的编译器一般也不做改动;
               (3) 函数声明:这里要注释掉三个函数声明:void OS_CPU_SysTickHandler(void); 
                                                       
void  OS_CPU_SysTickInit(void);
                                                       INT32U  OS_CPU_SysTickClkFreq(void);
    因为这三个函数是系统滴答定时器中断的初始化,需要自己根据不同的CPU的systick来实现。
    2. OS_cfg.h
    配置UC/OS的功能,不用的功能可以关掉,裁剪内核
    3.OS_CPU_C.c
       (1) 把SysTick寄存器的地址映射全部注释掉,我们自己提供系统的滴答时钟,所以直接用系统默认的地址映射就行。
       (2) 把void OS_CPU_SysTickInit()这个函数也注释掉,这个函数需要自己根据不同的CPU编写。
    4.编写SysTickInit()函数(这个函数要在移植之前确保正确!否则系统没有心跳,一切调度工作都没法进行)
    
void SysTick_Init(void)
    {
SystemInit(); //复位外设始终,SysTick默认使用内部高速时钟
if(SysTick_Config(SystemCoreClock/OS_TICKS_PER_SEC))    //配置并开启SysTick定时器中断
{
while(1);
}
    }  
    5.修改启动文件(*.s的文件) 
   (1) 把所有PendSVHander全部换成OS_CPU_PendSVHander
    (2)  把所有SysTickHander全部换成OS_CPU_SysTickHander
    因为OSStart()启动任务时Sys还没有初始化(系统时钟是在开始第一个任务时初始化的),进入的是PendSVHander,而任务开始后,系统服务函数进入的是SysTickHander,所以两个都要更换为OS中定义的。

    按照网上的资料一步步进行移植,一般不会有问题,如果移植完毕,任务之间不能启动,多半是 PendSVHander这里有问题,如果任务可以启动但不能完成多任务切换,则可能 SysTickHander有问题,或者系统时钟初始化不对,要检查SysTick的时钟源是否是使用的内部高速时钟。
    在stm32F051(Cortex M0内核)上移植过程跟上面是一样的,本人也已经移植过,没有问题。
    在stm8s207上移植的时候,主要注意是八位的单片机,堆栈结构要改;单片机的flash空间较小,要尽量裁剪内核,最小可以裁剪到3K左右;stm8没有SysTick,需要用定时器中断给OS提供系统时钟,本人也已经移植过,没有问题。

 
二、UCGUI移植(网上资料有的步骤不重复)
    UCGUI移植,没有UC/OS那么复杂,主要注意的就是LCD底层函数编写的时候,文件名和函数名都不要以LCD开头,最好以具体的驱动芯片名称开头,不然最后和UCGUI里面的文件或者函数发生冲突的时候会很麻烦。移植步骤应该是先调试好几个底层的函数之后(最重要的2个函数,读点和画点一定要正确,任何图形显示操作最后都是调用这两个函数),再进行移植,按网上资料一步步来应该不会有问题。
本人移植过程参考以下网址:
http://wenku.baidu.com/link?url=nB60DaLnXpDuX3RLFFWSg_Z2YQ-f4EturtbVpPAHD3omO1vVsLxrCq05kCmoyFdcodqxTQEjZsVpHcziZRAHDNhai5D7hLOHy9bLKUeOFju
     


推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • vivo发布iQOO 11系列:搭载骁龙8 Gen2与多项创新技术
    vivo正式推出iQOO 11系列智能手机,该系列搭载最新的高通骁龙8 Gen2处理器,并引入多项创新技术,致力于为用户提供卓越的性能和游戏体验。 ... [详细]
  • 电脑蓝屏故障的成因与解决方案(下)
    本文深入探讨了导致电脑蓝屏的具体原因,并提供了相应的解决方法,帮助用户更好地理解和处理这一常见问题。 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 尽管深度学习带来了广泛的应用前景,其训练通常需要强大的计算资源。然而,并非所有开发者都能负担得起高性能服务器或专用硬件。本文探讨了如何在有限的硬件条件下(如ARM CPU)高效运行深度神经网络,特别是通过选择合适的工具和框架来加速模型推理。 ... [详细]
  • 解析SQL查询结果的排序问题及其解决方案
    本文探讨了为什么某些SQL查询返回的数据集未能按预期顺序排列,并提供了详细的解决方案,帮助开发者理解并解决这一常见问题。 ... [详细]
  • 本文详细介绍了C语言的起源、发展及其标准化过程,涵盖了从早期的BCPL和B语言到现代C语言的演变,并探讨了其在操作系统和跨平台编程中的重要地位。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • Logback使用小结
    1一定要使用slf4j的jar包,不要使用apachecommons的jar。否则滚动生成文件不生效,不滚动的时候却生效~~importorg.slf ... [详细]
author-avatar
手机用户2502902913
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有