博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uCOS-II移植-STM32F10x_Keil
阅读量:6164 次
发布时间:2019-06-21

本文共 1578 字,大约阅读时间需要 5 分钟。

【@.1 移植步骤】

网上关于STM32的移植工程很多,不过实际上很多移植工程其中的中断都不能用的,因为没有把STM32中断入口地址与uCOS-II的中断管理机制联系在一起。估计很多移植工程只是简单的写了些跑马灯就好了,没有具体写中断函数测试。这里的移植过程跟我之前做过的过程类似,也是改文件,改函数名,但是还是那句话,如果你不了解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对应的电机驱动任务。当然我在开发板中的电机驱动任务使用小灯闪烁来代替的。实际处理时我采用了动态改变中断服务函数的方法,即,当外部中断下降沿来临之后,会重新注册外部中断为上升沿触发,改变其对应的服务函数。

模板下载:

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

转载于:https://www.cnblogs.com/apollius/archive/2013/03/28/2987020.html

你可能感兴趣的文章
P2P应用层组播
查看>>
Sharepoint学习笔记—修改SharePoint的Timeouts (Execution Timeout)
查看>>
CSS引入的方式有哪些? link和@import的区别?
查看>>
Redis 介绍2——常见基本类型
查看>>
asp.net开发mysql注意事项
查看>>
(转)Cortex-M3 (NXP LPC1788)之EEPROM存储器
查看>>
ubuntu set defult jdk
查看>>
[译]ECMAScript.next:TC39 2012年9月会议总结
查看>>
【Xcode】编辑与调试
查看>>
用tar和split将文件分包压缩
查看>>
[BTS] Could not find stored procedure 'mp_sap_check_tid'
查看>>
PLSQL DBMS_DDL.ALTER_COMPILE
查看>>
Activity生命周期
查看>>
高仿UC浏览器弹出菜单效果
查看>>
Ubuntu忘记密码,进不了系统的解决方法
查看>>
[原创]白盒测试技术思维导图
查看>>
<<Information Store and Management>> 读书笔记 之八
查看>>
Windows 8 开发之设置合约
查看>>
闲说HeartBeat心跳包和TCP协议的KeepAlive机制
查看>>
MoSQL
查看>>