连续签到天数:1天 | 签到总天数:214天 | 签到总奖励:1390金币 |
|
发表于 2014-12-2 16:57:05
|
显示全部楼层
本帖最后由 xiayelianqu 于 2014-12-3 14:47 编辑
/****************************************************************
初始化串口任务函数
****************************************************************/
void PilAppUARTInit(void)
{
int lSize = sizeof(Uart_TaskData) ;
theSink.UART_Task = mallocPanic(lSize);
memset(theSink.UART_Task, 0, lSize);
theSink.UART_Task->uart_task.handler = uart_handler;
MessageSinkTask(StreamUartSink(),&theSink.UART_Task->uart_task);
StreamUartConfigure(VM_UART_RATE_9K6 ,VM_UART_STOP_ONE,VM_UART_PARITY_NONE);
}
串口发送子函数
****************************************************************/
void uart_send(const char *data, uint16 lenth)
{
Sink uart = StreamUartSink();
if (uart == 0)
{
/*SppTxData(uart_send_data_fail,strlen(uart_send_data_fail));*/
return;
}
if(SinkClaim(uart, lenth) != 0xFFFF)
{
memcpy(SinkMap(uart), data, lenth);
(void) PanicZero(SinkFlush(uart, lenth));
}
}
/****************************************************************
串口任务处理函数
****************************************************************/
void uart_handler(Task task, MessageId id, Message message)
{
switch(id)
{
case SEND_UART_DATA: /*发送 */
{
uart_send(u8SendBuf, 7);
MessageCancelAll(task, SEND_UART_DATA);
}
break;
case MESSAGE_MORE_DATA: /*接收 类似中断*/
{
Source source = StreamUartSource();
uint16 size = SourceSize(source);
uint8* data = (uint8*)SourceMap(source);
uint16 i;
/*DEBUG(("uart received bytes: %d\r\n", size));*/
/* for(i = 0; i < size; i++) DEBUG(("%d\r\n", data));*/
SourceDrop(source, size);
}
break;
default:
break;
}
}另外;
有几处PSK和xide属性也需修改。
在xide平台属性将transport设置为RAW, 再用pstool配置波特、以及host inteface选择vm access to uart
/*********************************************************************************/
PilAppUARTInit放在主函数里就可以了,上电运行。
发送就直接调用uart_send函数,(也可以释放ID号 MessageSend(&theSink.UART_Task->uart_task,SEND_UART_DATA,0); )
收到数据自动进 case MESSAGE_MORE_DATA:
/***********************头文件*****************************************/
sink_private.h 文件hsTaskData结构体里面添加 Uart_TaskData *UART_Task;
/* Sink application data */
typedef struct
{
/* Main task */
TaskData task;
Uart_TaskData *UART_Task; /*添加添加添加添加添加添加添加*/
/* Config variables */
ButtonsTaskData *theButtonsTask;
...
}
/*至少包含如下头文件*/
#include "sink_private.h"
#include <panic.h>
#include <stddef.h>
#include <led.h>
#include <string.h>
#include <stream.h>
#include <message.h>
自定义头文件
typedef struct
{
TaskData uart_task;
}
Uart_TaskData;
enum
{
SEND_UART_DATA
};
|
|