zoukankan      html  css  js  c++  java
  • uCOSII移植STM32F10x_Keil

    【@.1 移植步骤】

    网上关于STM32的移植工程很多,不过实际上很多移植工程其中的中断都不能用的,因为没有把STM32中断入口地址与uCOS-II的中断管理机制联系在一起。估计很多移植工程只是简单的写了些跑马灯就好了,没有具体写中断函数测试。这里的移植过程跟我之前做过的LPC2119移植过程类似,也是改文件,改函数名,但是还是那句话,如果你不了解CPU的内核机制,中断机制,以及OS的任务调度原理,照着别人的移植工程不求甚解,是得不到提升的。

    工程目录建立参考LPC2119,拷贝文件来源于官方移植工程Micrium_STM32xxx_uCOS-II.exe。具体的详细步骤我有机会再详细写写,包括STM32中与ARM7的中断方式的差异。移植时主要注意一下三个关键即可:

    关键1:stm32中的Systick中断的替换OS中的ticker
    关键2:PendSV中断的替换成OS中的OSCtxSw()
    关键3:所有外设中断入口需重写(先经过OS调用后再进入中断服务程序)

    大致的流程如下:

    1.os_cpu_a.asm 中用 PendSV_Handler 代替 OS_CPU_PendSVHandler用作PendSV中断,同时注释掉stm32f10x_it.h和stm32f10x_it.c中PendSV_Handler()函数定义,在os_cpu.h中注释掉OS_CPU_PendSVHandler()函数声明替换为PendSV_Handler()的申明。

    2.注释掉os_cpu.h和os_cpu.c中OS_CPU_SysTickHandler()相关代码,将其内部代码复制到stm32f10x_it.c中的SysTick_Handler()下。注释掉os_cpu.h中OS_CPU_SysTickInit,OS_CPU_SysTickClkFreq的函数声明,这里是用移植工程中bsp中的相关函数初始化systick,之后改用标准库自己初始化。

    3.中断重写,用启动代码中中断函数名代替OS移植中的BSP_IntHandlerXXX(),放在stm32f10x_it.c和stm32f10x_it.h中,源bsp.c和bsp.h中的中断管理函数BSP_IntInit,BSP_IntEn,BSP_IntDis,BSP_IntClr,BSP_IntVectSet,BSP_IntPrioSet(参考移植工程)全改为STM_Int开头,放在stm32f10x_it.c和stm32f10x_it.h中,并在stm32f10x_it.c中添加static  CPU_FNCT_VOID  STM_IntVectTbl[STM_INT_SRC_NBR];定义用于中断函数存放。以后irq中断的注册,enable ,pending都可用移植工程中提供的方法而不用stm stdlib 3.5库中的函数,比如调用STM_IntVectSet函数进行中断服务函数的注册。

    我使用的目标开发板在另一篇博客中有介绍,移植的模板可以见最下面有下载。我在app.c中写了一个简单的测试应用,就是一个带外部中断的按键去抖操作。关于按键去抖在OS中的实现原理可以参考我的这篇文章的最后一个例子,即外部中断通过发送消息Post调度去抖任务,确认去抖之后再Resume对应的电机驱动任务。当然我在开发板中的电机驱动任务使用小灯闪烁来代替的。实际处理时我采用了动态改变中断服务函数的方法,即,当外部中断下降沿来临之后,会重新注册外部中断为上升沿触发,改变其对应的服务函数。

    模板下载:STM32_uCOSPrj.7z

    @.[FIN]      @.date->Mar 28, 2013      @.author->apollius

  • 相关阅读:
    【leetcode】416. Partition Equal Subset Sum
    【leetcode】893. Groups of Special-Equivalent Strings
    【leetcode】892. Surface Area of 3D Shapes
    【leetcode】883. Projection Area of 3D Shapes
    【leetcode】140. Word Break II
    【leetcode】126. Word Ladder II
    【leetcode】44. Wildcard Matching
    【leetcode】336. Palindrome Pairs
    【leetcode】354. Russian Doll Envelopes
    2017.12.22 英语面试手记
  • 原文地址:https://www.cnblogs.com/apollius/p/2987020.html
Copyright © 2011-2022 走看看