当前位置: 首页 > news >正文

备份一个简易队列写法

备份一个简易队列写法

定义

typedef struct {uint8_t data[14];
} can_frame_t;typedef struct {can_frame_t frames[CAN_FRAME_QUEUE_SIZE];volatile uint8_t head;volatile uint8_t tail;volatile uint8_t count;
} can_frame_queue_t;
can_frame_queue_t g_can1_frame_queue = {0};

队列满

static inline bool queue_is_full(can_frame_queue_t *queue) {return queue->count >= CAN_FRAME_QUEUE_SIZE;
}

队列空

static inline bool queue_is_empty(can_frame_queue_t *queue) {return queue->count == 0;
}

入队

static bool enqueue_frame(can_frame_queue_t *queue, const uint8_t *frame_data) {if (queue_is_full(queue)) {return false;}memcpy(queue->frames[queue->head].data, frame_data, 14);queue->head = (queue->head + 1) % CAN_FRAME_QUEUE_SIZE;queue->count++;return true;
}

出队

static bool dequeue_frame(can_frame_queue_t *queue, uint8_t *frame_data) {if (queue_is_empty(queue)) {return false;}memcpy(frame_data, queue->frames[queue->tail].data, 14);queue->tail = (queue->tail + 1) % CAN_FRAME_QUEUE_SIZE;queue->count--;return true;
}
http://www.zskr.cn/news/10236.html

相关文章:

  • 【SPIE出版】第四届环境遥感与地理信息技术国际学术会议(ERSGIT 2025)
  • NanoCAD 24.0安装包下载地址与安装教程
  • 改 187 个接口参数:Postman 卡壳时,Apipost 凭什么 5 分钟搞定?
  • 第四周课前思考
  • 二维差分模板
  • HDFS读写机制深度解析:分布式存储的核心奥秘 - 指南
  • 不定高元素动画实现方案(下)
  • F010 Vue+Flask豆瓣图书推荐大素材可视化平台系统源码
  • 记一次debian13 进入紧急模式
  • Rust 登堂 之 Sized和不定长类型 DST(七) - 实践
  • 科研人必知:293F与HEK293细胞在蛋白表达中的不同“超能力”
  • Trae与Gitee MCP深度集成:AI编程工具链迎来重大升级
  • 【2025-09-22】加班感悟
  • OpenAI Codex 使用 智谱 API
  • 使用Go语言实现高效定时任务功能
  • 创建者模式:工厂方式模式
  • 洛谷题单指南-进阶数论-P3811 【模板】模意义下的乘法逆元
  • Interlocked.Increment学习
  • 【F#学习】记录 Record
  • vue2 项目实例 动态路由菜单(四)
  • envoy和nginx的区别
  • 基于自适应差分进化算法的MATLAB实现
  • 【SPIE出版、主题宽泛、快速检索】2025年可持续发展与数字化转型国际学术会议(SDDT 2025)
  • Sping Boot 打包排除相关jar依赖包,CMD 启动方式 pom.xml 说明.
  • langfuse使用的postgresql异机备份和恢复(docker)并进行langfuse版本升级
  • java列队多种实现方式,
  • Ashampoo Music Studio 12.0.3 音频编辑处理
  • Gitee:本土化代码托管平台如何重塑中国开发者协作生态
  • WEB项目引入druid监控配置
  • PyCharm 2025.1安装包下载与安装教程