打印

stm32 V3.4库函数移植ucos2.86遇到问题心得

[复制链接]
3607|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dahai043|  楼主 | 2012-8-29 10:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*问题:移植UCOS-II后,程序总是在  
B    OSStartHang ,//根据提示,应当永远不会到这步的。
其实很简单,因为STM32本身的异常中断PendSV_Handler替代了UCOS的异常中断OSPendSV,使其不能正常执行。这样我们就需要更改PendSV_Handler为OSPendSV以让中断正常。
第一种
更改startup_stm32f10x_md.s(V3.4.版本)
1、DCD     PendSV_Handler            ; PendSV Handler
更改为:
DCD     OSPendSV                 ; OSPendSV 中断
2、PendSV_Handler    PROC
EXPORT  PendSV_Handler             [WEAK]
B      
ENDP
更改为:
OSPendSV        PROC
EXPORT  OSPendSV                   [WEAK]
B       .
ENDP
第二种:startup_stm32f10x_md.s中定义了中断向量表(中断函数的入口地址),stm32f10x_it.c 中断服务函数的C语言代码。
在startup_stm32f10x_md.s中有两段代码如下:
DCD     PendSV_Handler
DCD     SysTick_Handler
在stm32f10x_it.c中的服务函数如下
void PendSV_Handler(void)
void SysTick_Handler(void)
1:ucos系统中断函数更名为PendSV_Handler,注释掉stm32f10x_it.c文件中void PendSV_Handler(void)函数。
2:在void SysTick_Handler(void)函数中添加如下代码:
void SysTick_Handler(void)
{
OS_CPU_SR  cpu_sr;
OS_ENTER_CRITICAL(); // Tell uC/OS-II that we are starting an ISR
OSIntNesting++;
OS_EXIT_CRITICAL();
OSTimeTick();          // Call uC/OS-II’s OSTimeTick()
OSIntExit();            // Tell uC/OS-II that we are leaving the ISR
}
目标就是1、注释掉STM32f10x_it.c中的中断函数 ,使os_cpu.asm中的OSPendSV与启动函数中的中断定义PendSV_Handler匹配起来
*/
//void PendSV_Handler(void)
//{
//}
沙发
figo20042005| | 2012-8-29 10:51 | 只看该作者
学习了

使用特权

评论回复
板凳
13249207512| | 2012-12-30 14:53 | 只看该作者

使用特权

评论回复
地板
一般首席| | 2013-9-15 21:10 | 只看该作者
今天刚看到这,说的不错

使用特权

评论回复
5
2008雨声| | 2013-9-15 23:30 | 只看该作者
最近也学ucosii  学习了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

16

帖子

0

粉丝