初级会员

- 积分
- 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();
}
试了下,把统计任务关了就可以跑了,可以发送数据,转化相应的铂电阻值。郁闷就是为毛线非得关了统计任务。 |
|