ch395查询SINT_STAT_SENBUF_FREE连续发送数据,用ucos实时多任务系统连接网络芯片CH395查询SINT_STAT_SENBUF_FREE连续发送数据响应中断例程
时间: 2023-08-03 10:05:32 浏览: 94
以下是一个基于uC/OS的CH395查询SINT_STAT_SENBUF_FREE连续发送数据响应中断的例程:
```c
#include <includes.h>
#include "ch395.h" // CH395驱动头文件
#define APP_TASK_STK_SIZE 512
#define APP_TASK_PRIO 5
#define CH395_SEND_BUF_SIZE 1024 // CH395发送缓冲区大小
#define CH395_SEND_BUF_NUM 4 // CH395发送缓冲区数量
static OS_STK AppTaskStk[APP_TASK_STK_SIZE];
static void AppTask(void *p_arg)
{
CPU_INT08U err = 0;
CPU_INT08U ch395_send_buf[CH395_SEND_BUF_SIZE * CH395_SEND_BUF_NUM];
CPU_INT16U free_buf_num;
CPU_INT16U buf_idx;
// 初始化CH395
CH395_Init();
while (1) {
// 查询SINT_STAT_SENBUF_FREE
free_buf_num = CH395_QuerySINTStat(SEND_BUF_FREE);
// 连续发送数据
for (buf_idx = 0; buf_idx < free_buf_num; buf_idx++) {
// 填充发送缓冲区
// ...
// 发送数据
CH395_SendBuf(ch395_send_buf + buf_idx * CH395_SEND_BUF_SIZE, CH395_SEND_BUF_SIZE, &err);
if (err != CH395_ERR_NONE) {
// 发送失败处理
// ...
}
}
// 延时50ms
OSTimeDlyHMSM(0, 0, 0, 50);
}
}
int main(void)
{
OSInit();
OSTaskCreate(AppTask,
(void *)0,
&AppTaskStk[APP_TASK_STK_SIZE - 1],
APP_TASK_PRIO);
OSStart();
return 0;
}
```
在该例程中,任务会不断查询SINT_STAT_SENBUF_FREE,然后连续发送数据到CH395发送缓冲区。发送数据时,可以通过填充发送缓冲区实现。当发送失败时,需要根据具体情况进行处理。同时,为了避免对网络性能的影响,还需要添加适当的延时。
阅读全文