当前位置: 首页 > 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.hskmm.com/?act=detail&tid=14649

相关文章:

  • 【SPIE出版】第四届环境遥感与地理信息技术国际学术会议(ERSGIT 2025)
  • PyTorch和cude版本不兼容导致无法检测到GPU
  • 嵌入式系统arm高级系统调试技能-24./proc/slabinfo 记录解读与内存异常分析
  • 2025无人机在低空物流中的应用实践
  • ssh如何打开可视化界面
  • NanoCAD 24.0安装包下载地址与安装教程
  • 改 187 个接口参数:Postman 卡壳时,Apipost 凭什么 5 分钟搞定?
  • 使用AWS Amplify、Lambda、API Gateway和DynamoDB部署静态Web应用
  • vscode的ssh-remote插件经常掉线
  • 记录第一次CCPC(2025)网络赛前后
  • 第四周课前思考
  • 声像新境:东芝电视以火箭炮SOUND重塑家庭艺术馆新标准
  • c语言数组与指针
  • 开发微信机器人/微信协议/个人微信api接口
  • 深入解析:frp实现内网穿透,公网服务器或云服务器配置frps,本地内网配置frpc
  • 【五行】根据天干、地支、生肖起姓名(9月出生的宝宝可参考)
  • 全差分放大器(FDA)电路设计计算问题及电压范围估算[原创www.cnblogs.com/helesheng]
  • 使用WTAPI开发智能微信机器人文档
  • [Android]自定义view - 详解
  • 不定高元素动画实现方案(下)
  • 详细介绍:C 语言:第 20 天笔记:typedef(类型重命名规则、应用场景与实战案例)
  • Screaming Architecture:让架构自己说话
  • BOE(京东方)携手UNESCO联合主办WCBR“科学十年”分会 彰显中国科技企业可持续发展实力
  • 使用Cyclops.PdfKit根据pdf模板生成pdf文件
  • 一款文本编辑器的介绍
  • 随笔-决战保研篇
  • 科研人必知:293F与HEK293细胞在蛋白表达中的不同“超能力”
  • Redis Cluster
  • 如何使用C语言实现Vigenre密码加解密
  • 【F#学习】列表 List