在线问答
直播中

himol

11年用户 607经验值
擅长:可编程逻辑 电源/新能源 MEMS/传感技术 测量仪表 嵌入式技术 制造/封装 模拟技术 连接器 EMC/EMI设计 光电显示 存储技术 EDA/IC设计 处理器/DSP 接口/总线/驱动 控制/MCU RF/无线
私信 关注

【OK210试用体验】项目篇+物联仓库管理系统+前端数据中心 +控制M0命令发送模块 09

第九节M0命令发送控制
1. 功能描述
发送接收到的M0控制命令.
2. 数据描述
数据类型
数据名称
功能
unsigned char
dev_uart_mask
接收到的需要发出的命令
int
dev_uart_fd
串口设备描述符
pthread_cond_t
cond_uart_cmd
串口发送命令模块被唤醒条件
pthread_mutex_t
mutex_uart_cmd
串口发送命令模块互斥锁
dota_cache_list
dota_cache_list
发送命令链表缓存头结点
m0_cache_tail
发送命令链表缓存尾结点
3. 流程图

M0命令控制.png
4. 代码
#include "data_global.h"
extern unsigned char dev_uart_mask;
extern int dev_uart_fd;
extern pthread_cond_t cond_uart_cmd;
extern pthread_mutex_t mutex_uart_cmd;
extern dota_cache_list m0_cache_head, m0_cache_tail;
void *pthread_uart_cmd (void *arg)
{
        unsigned char *uart_p = NULL;
        dota_cache_list uart_cache_p = NULL;
        printf ("pthread_uart_cmd is okn");
        while (1)
        {
                pthread_mutex_lock (&mutex_uart_cmd);
                pthread_cond_wait (&cond_uart_cmd, &mutex_uart_cmd);
                while ((uart_cache_p = GetCacheNode (m0_cache_head, &m0_cache_tail)) != NULL)
                {
                        pthread_mutex_unlock (&mutex_uart_cmd);
                        uart_p = (unsigned char *)uart_cache_p->data;
                        dev_uart_mask = *uart_p;
                        write (dev_uart_fd, &dev_uart_mask, 1);
                        free (uart_p);
                        uart_p = NULL;
                        free (uart_cache_p);
                        uart_cache_p = NULL;
                        usleep (200000);
                        pthread_mutex_lock (&mutex_uart_cmd);
                }
                pthread_mutex_unlock (&mutex_uart_cmd);
        }
}

更多回帖

发帖
×
20
完善资料,
赚取积分