OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8958|回复: 3

UCOSII 消息邮箱移植到F4板子失败,求解!

[复制链接]

46

主题

329

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1544
金钱
1544
注册时间
2012-4-9
在线时间
80 小时
发表于 2014-6-19 10:20:55 | 显示全部楼层 |阅读模式
5金钱
基本按照原子的战舰寄存器例程,UCOSII实验2,信号量与邮箱,移植到F4的板子上,功能就是按键扫描,如果按下就产生消息邮箱,使全局变量状态改变,从而在主任务中使LED翻转,但现在的问题是,消息邮箱中的全局变量无法从一个任务传递给另一个任务的情况,函数都没用错,可能是OSMboxPost(),OSMboxPend()这两个函数的调用问题,检查了很久,没结果,求解!

最佳答案

查看完整内容[请看2#楼]

已解决,是一些相关设置的问题,以后用的功能多了可能就会碰到FPU的问题。
STM32
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

46

主题

329

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1544
金钱
1544
注册时间
2012-4-9
在线时间
80 小时
 楼主| 发表于 2014-6-19 10:20:56 | 显示全部楼层
已解决,是一些相关设置的问题,以后用的功能多了可能就会碰到FPU的问题。
STM32
回复

使用道具 举报

46

主题

329

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1544
金钱
1544
注册时间
2012-4-9
在线时间
80 小时
 楼主| 发表于 2014-6-19 20:21:02 | 显示全部楼层
主函数代码如下,是在F429的板子上做的,关于delay延时部分也是参照原子的代码去修改的,之前做两个灯同时闪的实验,也就是对应原子的UCOSII的第一个实验,能正常运行,但是做UCOSII的第二个实验时就不行了
问题1:红灯可以闪,但是按键按下之后绿灯不翻转,求解!
问题2:在UCOSII中,中断是否交给UCOSII的底层代码去处理,我只用分配每个任务的优先级就行了,这么理解对吗?
#include <stm32f4xx.h>
#include "delay.h"
#include "exti.h"
#include "key.h"
#include "led.h"
#include "includes.h"

//////////////////////////////////////////////////////////////
/******* UCOSII任务设置 *******/
/* 
os_cfg.h中OS_TICKS_PER_SEC设置为200,即时间节拍为5ms,
OS_MAX_TASKS设置为10,即总共最多10个任务
*/

/* START任务 */
#define START_TASK_PRIO  10            //设置任务优先级为最低
#define START_STK_SIZE   64            //设置任务堆栈大小
OS_STK  START_TASK_STK[START_STK_SIZE];//任务堆栈
void START_Task(void *pdata);          //任务函数

/* REDLED任务 */
#define RLED_TASK_PRIO    7            //设置任务优先级
#define RLED_STK_SIZE    64            //设置任务堆栈大小
OS_STK  RLED_TASK_STK[RLED_STK_SIZE];  //任务堆栈
void RLED_Task(void *pdata);           //任务函数

/* 主任务 */
#define MAIN_TASK_PRIO    4            //设置任务优先级
#define MAIN_STK_SIZE   128            //设置任务堆栈大小
OS_STK  MAIN_TASK_STK[MAIN_STK_SIZE];  //任务堆栈
void MAIN_Task(void *pdata);           //任务函数

/* 按键任务 */
#define KEY_TASK_PRIO     3            //设置任务优先级
#define KEY_STK_SIZE     64            //设置任务堆栈大小
OS_STK  KEY_TASK_STK[KEY_STK_SIZE];    //任务堆栈
void KEY_Task(void *pdata);            //任务函数
//////////////////////////////////////////////////////////////

/* 全局变量设置 */
OS_EVENT * msg_key;  //按键邮箱事件块指针 

int main(void)
{
F4_Clock_Init();
Delay_Init(150);                 //延时初始化
LED_Init();                      //LED端口初始化
KEY_Init();                      //按键初始化

OSInit();
OSTaskCreate(START_Task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO);//创建起始任务
OSStart();

}

//起始任务
void START_Task(void *pdata)
{
OS_CPU_SR cpu_sr = 0;
pdata = pdata;

msg_key  = OSMboxCreate((void *)0);//创建消息邮箱
//OSStatInit(); //初始化统计任务.这里会延时1秒钟左右

OS_ENTER_CRITICAL();//进入临界区,系统不响应任何中断
OSTaskCreate(RLED_Task,(void *)0,(OS_STK *)&RLED_TASK_STK[RLED_STK_SIZE-1],RLED_TASK_PRIO);
//OSTaskCreate(GLED_Task,(void *)0,(OS_STK *)&GLED_TASK_STK[GLED_STK_SIZE-1],GLED_TASK_PRIO);
OSTaskCreate(MAIN_Task,(void *)0,(OS_STK *)&MAIN_TASK_STK[MAIN_STK_SIZE]-1,MAIN_TASK_PRIO);
OSTaskCreate(KEY_Task,(void *)0,(OS_STK *)&KEY_TASK_STK[KEY_STK_SIZE-1],KEY_TASK_PRIO );
OSTaskSuspend(START_TASK_PRIO);//挂起起始任务
OS_EXIT_CRITICAL(); //退出临界区,系统正常相应中断
}

//REDLED任务
void RLED_Task(void *pdata)
{
while(1)
{
LED_On(REDLED);
Delay_ms(80);
LED_Off(REDLED);
Delay_ms(920);
}
}

//主任务
void MAIN_Task(void *pdata)
{
u32 key = 0;
u8 err;
while(1)
{
key = (u32)OSMboxPend(msg_key,10,&err);//获取(请求)消息
switch(key)
{
case 1:
LED_Toggle(GREENLED);
break;
default:
break;
}
Delay_ms(10);
}
}

//按键扫描任务
void KEY_Task(void *pdata)
{
u8 key;
while(1)
{
key = KEY_Scan(0);
if(key)
{
OSMboxPost(msg_key,(void*)key);//发送消息
}
Delay_ms(10);
}
}
STM32
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-6-19 22:30:10 | 显示全部楼层
暂时还没在F4移植ucosii,你找找f4版本的ucosii移植好了的,看看是不是FPU没做处理的原因?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 22:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表