OpenEdv-开源电子网

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

使用UCOS系统+IO中断采集数据完毕后使用消息邮箱发送,可是任务在接受时候,没数据

[复制链接]

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-10-10
在线时间
1 小时
发表于 2013-10-10 20:00:35 | 显示全部楼层 |阅读模式
void main_task(void *pdata)
{
     u8 err; 
     
   while(1)
   {
     value=OSMboxPend(msg_AD7793DATA,10,&err);  
     TRes=(float)(*value)*4750/0xFFFFFF/16;
   } 
}

void EXTI3_IRQHandler()
{
        OS_CPU_SR  cpu_sr;
cpu_sr=OS_CPU_SR_Save();
        OSIntEnter();
OS_CPU_SR_Restore(cpu_sr);
        AD7793Write(0x58); 
flag = AD7793Read(24);  //读取AD7793转换好的数据
AD7793_Voltage = &flag;  
OSMboxPost(msg_AD7793DATA,AD7793_Voltage);  
EXTI->R=1<<3;  //清除LINE3上的中断标志位 
OSIntExit(); 
}
AD7793_Voltage和value定义的是指针,可是主任务接收不到数据,不知道为什么...各位大侠咋看?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-10 22:34:58 | 显示全部楼层
回复【楼主位】新进职员:
---------------------------------
你收到的是什么?
你确定EXTI3中断服务函数进入了么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-10-10
在线时间
1 小时
 楼主| 发表于 2013-10-11 21:34:25 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,我昨天试了下,

#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "uart.h"
#include "AD7793.h"
#include "port.h"
#include "exti.h"
#include "lcd.h"
#include "includes.h"
unsigned long value;
unsigned long AD7793_Voltage;
unsigned long flag;
float TRes,PRESSRes;
long n;


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

//采集任务
//设置任务优先级
#define AD7793_TASK_PRIO        9
//设置任务堆栈大小
#define AD7793_STK_SIZE   64
//任务堆栈
OS_STK AD7793_TASK_STK[AD7793_STK_SIZE];
//任务函数
void AD7793_task(void *pdata);


OS_EVENT *msg_AD7793DATA; //AD7793邮箱事件块指针 ]

void ucos_load_main_ui(void)
{
LCD_Clear(WHITE); //清屏
  POINT_COLOR=RED; //设置字体为红色 
LCD_ShowString(30,10,200,16,16,"WarShip STM32");
LCD_ShowString(30,30,200,16,16,"UCOSII TEST2");
LCD_ShowString(30,50,200,16,16,"ATOM@ALIENTEK");
LCD_DrawLine(0,70,lcddev.width,70);
LCD_DrawLine(150,0,150,70);
  POINT_COLOR=BLUE;//设置字体为蓝色 
   LCD_ShowString(160,30,200,16,16,"CPU:   %");
}   
int main(void)
{
   Stm32_Clock_Init(9);
   delay_init(72);
   uart_init(72,9600);
   port_init();
   led_init();
   AD7793_init(); 
   LCD_Init(); 
   ucos_load_main_ui(); //加载主界面
   EXTIX_Init();
   OSInit();         //初始化UCOSII      
   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_AD7793DATA=OSMboxCreate((void*)0); //创建消息邮箱   
OSStatInit(); //初始化统计任务.这里会延时1秒钟左右
  OS_ENTER_CRITICAL(); //进入临界区(无法被中断打断)                    
  OSTaskCreate(
             AD7793_task,
             (void *)0,
 (OS_STK*)&AD7793_TASK_STK[AD7793_STK_SIZE-1],
 AD7793_TASK_PRIO);              
  OSTaskSuspend(START_TASK_PRIO); //挂起起始任务.
OS_EXIT_CRITICAL(); //退出临界区(可以被中断打断)
}  
void AD7793_task(void *p_arg)
{  
   u8 err;        
   while(1)
   {     
     value=*(unsigned long*)OSMboxPend(msg_AD7793DATA,0,&err);   
 TRes=(float)value*4750/0xFFFFFF/16;
   } 
    
}

void EXTI3_IRQHandler()
{   
    OS_CPU_SR  cpu_sr;
cpu_sr=OS_CPU_SR_Save();
    OSIntEnter();
OS_CPU_SR_Restore(cpu_sr);
    AD7793Write(0x58); 
AD7793_Voltage = AD7793Read(24); 
    OSMboxPost(msg_AD7793DATA,(void*)&AD7793_Voltage);  
EXTI->R=1<<3;  //清除LINE3上的中断标志位 
OSIntExit();
}
试了下,把统计任务关了就可以跑了,可以发送数据,转化相应的铂电阻值。郁闷就是为毛线非得关了统计任务。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-12 10:13:36 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

0

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2019-6-3
在线时间
5 小时
发表于 2016-3-26 13:46:01 | 显示全部楼层
感谢,正点原子,论坛. 我也遇到这个问题,成功解决. 谢谢.
回复 支持 反对

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2013-7-30
在线时间
31 小时
发表于 2016-3-30 09:28:36 | 显示全部楼层
IO中断的优先级怎么设置啊
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 09:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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