嵌入式程序上下文切换和解耦的工具

2023-05-16

关注+星标公众,不错过精彩内容

df908bac58dddd444fd5603ee5782e70.jpeg

作者 | NevermindZZT

C语言是一种面向过程的语言,做嵌入式项目的时候,如果不变相面向对象,项目到后期很难做好,且不容易维护。

今天就给大家推荐一个用于C语言程序上下文切换和解耦的工具。

源码地址:

https://github.com/NevermindZZT/cpost

源码不多,主要就4个文件:

bb4391d0a991de0eb8a3b9c4dffb25dc.png

具体源码就不一一描述了,大家可以直接下载,这里给大家介绍并描述下使用方法。

简介

cpost是一个c语言编写的,用于c语言程序上下文切换和解耦的工具。

cpost包含cpostcevent两个工具,cpost用于c语言的上下文切换,cevent用于程序模块之间的解耦。

cpost借鉴了Android的Handler机制,在c语言环境中,可以通过调用cpost接口,将函数抛出到另外的线程(上下文)中运行,对于某些场景,尤其是嵌入式编程无操作系统环境下的中断延迟处理。

cevent借鉴了Android的广播机制,在c语言环境中,当程序运行至相应的位置,可以通过cevent接口抛出一个事件,其他模块可以通过注册的方式,监听这个事件,当事件发生时,调用注册的函数,能很大程度上实现模块间的解耦。

使用

cpostcevent可以同时使用,也可以独立使用,特别针对于嵌入式无操作系统的环境,使用cpostcevent,可以简化编程,更容易实现模块化的编程。

cpost使用

以使用在嵌入式无操作系统中为例,主要用作中断延迟处理的情况

  1. 配置系统tick

    配置cpost.h中的宏CPOST_GET_TICK(),配置成获取系统tick

  2. 配置处理进程

    在main loop调用cpostProcess函数,通过cpost执行的函数都会在cpostProcess中执行

cevent使用

cevent使用注册的方式监听事件,会依赖于编译环境,目前支持keil,iar,和gcc,对于gcc,需要修改链接文件(.ld),在只读数据区添加:

_cevent_start = .;
KEEP (*(cEvent))
_cevent_end = .;
  1. 初始化cevent

    系统初始化时,调用ceventInit

    ceventInit();
  2. 注册cevent事件监听

    在c文件中,调用CEVENT_EXPORT导出事件监听

    CEVENT_EXPORT(0, handler, (void *)param);
  3. 发送cevent事件

    在事件发生的地方,调用ceventPost抛出事件

    ceventPost(0);

API

cpost提供了简单的接口用于延迟处理函数,其接口设计和Android的Handler设计类似,cevnet提供了一个事件发送接口,用于抛出事件

post

cpost 提供一个统一接口 cpost(...) 进行事件抛出,此接口通过宏定义,需要在 c99 以上的标准运行

#define cpost(...) \
        cpostAddHandler(&((CpostParam){__VA_ARGS__}))
  • 参数

    typedef struct
    {
        void *handler;
        void *param;
        size_t delay;
        struct {
            unsigned char flag : 2;
            unsigned char paramDiff: 1;
        } attrs;
    } CpostParam;
    • handler 被抛出执行的函数

    • param 传递给函数的参数

    • delay 延迟时间

    • attrs.flag 任务冲突时处理 flag

    • attrs.paramDiff 比较任务时是否区分参数

    • ... 抛出的参数,用于构造 CpostParam 对象

event post

event post接口会抛出事件,事件定义为一个unsigned short整形,建议通过宏定义所有事件

void ceventPost(unsigned short event);
  • 参数

    • event 事件

event export

event post接口会静态注册一个事件监听,注意,此接口实际上为定义一个全局的常量,所以需要写在函数体外

CEVENT_EXPORT(_event, _func, ...)
  • 参数

    • _event 被监听的事件

    • _func 事件发生时,执行的函数

    • ... 需要传递给_func函数的参数

声明:本文部分素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。

------------ END ------------

e24e24d938e380cc49cfd9c53dae775d.gif

●专栏《嵌入式工具

●专栏《嵌入式开发》

●专栏《Keil教程》

●嵌入式专栏精选教程

关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

2933ae98dff6b7fc807e4e4778546069.jpeg

14da73dd90bab50c57ac6ac18407c6c3.png

点击“阅读原文”查看更多分享。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式程序上下文切换和解耦的工具 的相关文章

  • 函数拟合3

    所谓函数拟合 xff0c 就是给定一些输入点 xff0c 输出一个函数曲线 选择的基函数会直接影响线性组合函数的表达能力 当采样点较多 xff0c 而系数较少时 xff0c 会出现欠拟合 xff0c 表达能力不够 当采样点较少 xff0c
  • LDM命令

    http blog 163 com oy mcu blog static 16864297220120193458892 LDM STM指令主要用于现场保护 xff0c 数据复制 xff0c 参数传送等 STMFD指令 STMFD Rn r
  • LE Audio进入商用阶段

    LE Audio进入商用阶段 xff0c TWS耳机要变天了 36氪 蓝牙协议十年来的最大更新 xff0c LE Audio进入商用测试阶段 全球最畅销的IoT设备是什么 xff1f 我很轻松就能告诉你答案 xff1a AirPods 作为
  • CAN XL :CAN协议家族新成员

    十年之前 xff0c 你不认识我 xff0c 我也不认识CAN FD 如今 xff0c CAN FD已经陆续进入乘用车领域 xff0c 几乎所有汽车制造商都将在未来几年内逐步推出搭载CAN FD的乘用车 那十年之后 xff0c 车载网络又会
  • 【整理】嵌入式系统的各种常见外设

    原文地址 xff1a http www crifan com summary embedded system various peripherals 最后更新 xff1a 2013 11 14 TODO xff1a 1 添加更多的常见的外设
  • DDR controller driver

    在SOC中 xff0c DDR是很重要的 xff0c 需要在uboot中进行初始化 xff01 但是DDR异常的复杂 DDR controller也异常的复杂 xff0c 以candence DDR controller为例 xff0c 这
  • 一文看懂IC芯片生产流程:从设计到制造与封装

    origin http forum esm cn com FORUM POST 1000163993 1201257744 0 HTM ga 61 1 101949507 338942905 1436813394 芯片制造的过程就如同用乐高
  • 2015中国国内元器件分销商10亿俱乐部20强榜单

    origin http www v4 cc News 916429 html 元器件分销市场 xff0c 从欧美安富利 xff0c 艾睿 xff0c 富昌等巨头跨度到台湾大联大 xff0c 文晔等新势力 xff0c 花了30年时间 随着电子
  • openvswitch 通过ofproto/trace trace跟踪数据包匹配的流表

    目录 1 解决的问题需求 当vm互访不通时 xff0c 不知道是哪天流表出问题 xff0c 可以通过 ovs提供的工具模拟虚拟机实例发出的数据包来跟踪数据包经过的流表路径 2 使用方法 xff08 一 xff09 解决的问题需求 我们在使用
  • 关于ethercat开发的一些感想

    origin http blog csdn net embededvc article details 50364977 从去年到现在 xff0c 整整一年经历了从ethercat主站到伺服从站的实现过程 xff0c 包括全程负责从站的et
  • modem manager与network manager

    modem manager ModemManager is a DBus system bus activated service meaning it 39 s started automatically when a request a
  • 调试px4串口升级固件

    最近在调试px4的bootloader 实现uart 串口升级 硬件版本为pixhawk bootloader地址为https github com PX4 Bootloader git px4代码地址为https github com P
  • 文章风格: 一级标题使用蓝色字体,二级和三级使用黑色,重点部分使用红色或黄色标记,正文采用浅灰色

    我今天给自己立个规矩 xff0c 以后我自己写的技术类文章 xff0c 一级标题使用蓝色字体 xff0c 二级和三级使用黑色 xff0c 重点部分使用红色或黄色标记 xff0c 正文采用浅灰色 2012 05 03
  • Xlib Programming Manual

    最近看了王垠 写的那篇清华退学的文章 xff0c 看到了他研究linux的过程 xff0c 文中提到了x Windows 我也总想搞一搞这个东西 xff0c 但是不知从何入手 它推荐这本书Xlib Programming Manual xf
  • 第二章 PX4-Pixhawk-RCS启动文件解析

    origin http blog csdn net qq 18112493 article category 6851622 第二章 PX4 RCS 启动文件解析 RCS 的启动类似于 Linux 的 shell 文件 xff0c 如果不知
  • PX4源码开发人员文档(四)——创建后台程序(应用)

    origin http blog csdn net lkk05 article details 48659059 在 Unix 和其他多任务计算机操作系统中 xff0c 后台程序是指 xff0c 作为后台进程运行的计算机 xff0c 而不是
  • 为何选择nuttx

    裸机程序 xff0c 不能处理太复杂的逻辑 xff0c 系统越复杂 xff0c 越需要上os freertos 不支持posix api rtems是gpl版权 nuttx bsd版权 xff0c px4和apm开源飞控都使用nuttx 经
  • https://tieba.baidu.com/p/4311040961?red_tag=2683564864

    dddddd
  • 彻底理解Linux的各种终端类型以及概念

    origin http blog csdn net dog250 article details 78766716 这篇文章的动机有两个 xff0c 上周同事问我关于Linux终端的问题 xff0c 我简要解答后发现有些概念确实自己也说不清
  • 恢复ubuntu14.04默认的经典登录界面

    之前不小心安装了Xubuntu desktop xff0c 卸载后 xff0c 登录界面还是Xubuntu desktop的界面 xff0c 如图所示 xff1a 搞了很久都没能恢复到默认登录界面 xff0c 最后在国外网站找到了解决方法

随机推荐

  • 理工科专业精品书系列

    原文地址 xff1a https bbs et8 net bbs showthread php t 61 938724 本人本科专业飞机设计 不过后来越搞越杂 xff0c 飞机 xff0c 汽车 xff0c 船舶 xff0c 坦克 xff0
  • DHT11模块程序--51单片机

    不讲原理 xff0c 只表达自己的建议以及提供源程序程序 目录 前言 一 建议 二 代码 1 c文件 2 h文件 实验展示 前言 第一次拿到DHT11这个模块 xff0c 于是网上搜索了各种原理以及程序 xff0c 最终都没找到一个合适自己
  • Centos7 kvm环境安装指南

    宿主机要求 CPU支持虚拟化 xff08 大部分都支持 xff09 内存越大越好 xff08 8G以上 xff09 BIOS开启VT DCentos7及以上 xff0c yum update到最新 检查是否支持硬件虚拟化 查看CPU egr
  • 【嵌入式STM32环境搭建】Keil5安装和STM32工程模板搭建

    Keil5安装和STM32工程模板 Keil5安装 STM32入门教程 2022持续更新中 哔哩哔哩 bilibili 网盘提取码 xff1a 8kzh xff0c 链接里压缩包的解压密码 xff1a 32 STM32库函数版工程模板 搭建
  • Nvidia jetson nano硬件架构

    资料来源 官方文档中心 https developer nvidia com embedded downloads gt 选jetson gt Jetson Nano Product Design Guide 产品设计指导 入口 gt 1
  • protues仿真51单片机教程

    protues是一款常用的单片机仿真软件 在很多情况下 我们做一些简单的项目 手边没有单片机或者不想麻烦的情况下 可以借助protues来仿真测试程序 protues内集成了几款常用的51内核的单片机 我们可以很方便的拿来使用 不用再每次编
  • 紧急!公开招录50名工程师升名校研究生!基层人员均可报名提升!

    2023全国高等教育 硕士研究生报名须知 教育部 国家发改委 财政部联合印发 关于加快新时代研究生教育改革发展的意见 xff0c 表示要将 硕士研究生招生规模稳步扩大 并且 xff0c 教育部明确提出要扩大研究生招生规模 为积极落实国家研究
  • 嵌入式开发,数据手册为啥是重要的文档?

    关注 43 星标公众号 xff0c 不错过精彩内容 作者 strongerHuang 微信公众号 strongerHuang 做嵌入式开发 xff0c 特别是底层驱动相关的开发 xff0c 不管是软件还是硬件工程师 xff0c 能熟练阅读数
  • 分享一款基于C语言实现的FIFO模块

    关注 43 星标公众号 xff0c 不错过精彩内容 作者 strongerHuang 微信公众号 strongerHuang FIFO在嵌入式应用的非常广泛 xff0c 可以说有数据收发的地方 xff0c 基本就有FIFO的存在 xff0c
  • 免费开源EDA软件KiCad 7.0.2 发布、Qt 6.2.8 LTS版本正式发布

    免费开源EDA软件KiCad 7 0 2 发布 Nordic推出第四代低功耗无线SoC Qt 6 2 8 LTS版本正式发布 xff08 点击链接 xff0c 阅读原文 xff09 更多视频 xff0c 可以到我视频号查看 xff1a 点击
  • hadoop中输入文件用LongWritable和IntWritable的区别

    xfeff xfeff 这里的LongWritable的key是线的偏移量 xff0c 表示该行在文件中的位置 xff0c 而不是行号 这里的IntWritable的key是行号
  • 嵌入式开发常用的几款虚拟机

    关注 43 星标公众号 xff0c 不错过精彩内容 作者 入门小站 说起虚拟机 xff0c 相信作为技术人员的小伙伴们不会感到陌生 虚拟机的使用场景非常多 xff0c 如搭建测试环境 在 Windows 系统中安装 Linux 或在 Mac
  • "软件开发生命周期"有几个阶段?

    关注 43 星标公众号 xff0c 不错过精彩内容 作者 情报小哥 ID 嵌入式情报局 很多初学软件编程的小伙伴 xff0c 只顾着 编程 xff0c 其他开发相关的一些 技能 很少关注 如果你想以后进入大公司 xff0c 除了写代码之后
  • GUI付费与免费的选择,看了价格你就知道了

    更多视频 xff0c 可以到我视频号查看 xff1a 点击 阅读原文 查看更多分享
  • 通信协议考虑的几点问题

    关注 43 星标公众号 xff0c 不错过精彩内容 素材来源 网络 来源 嵌入式大杂烩 嵌入式开发在很多场景下都需要进行通讯 xff0c 那么通讯协议就必不可少 xff0c 有代表性的通讯协议是如下三种 xff1a 从上表可以看到 xff0
  • 带你看看“了不起的”芯片!

    今天给大家分享一本新书 了不起的芯片 xff0c 文末再送大家5本 xff01 任何一本书的背后都有一段不为人知的曲折故事 xff0c 在此和大家分享一下本书作者写这本书的心路历程 01 为什么要写这本书 xff1f 这是一个人人都在谈论芯
  • Wireshark几个常用技巧

    关注 43 星标公众号 xff0c 不错过精彩内容 作者 假面生 素材来源 CSDN 经典的开源的网络抓包工具 Wireshark 相信大部分人 xff08 或者搞过网络 xff09 的人都知道它 xff0c 用过的人基本了解它的强大功能
  • 预约直播 | 2023年STM32峰会线上直播开启报名!

    点击上方 关注STM32 点击下方文章了解峰会详情 xff1a 速速报名 xff5c 与创新邂逅 xff0c 与生态交融 xff0c 来STM32峰会激发你的创造力 先睹为快 xff01 STM32 中国峰会精彩DEMO导引 文末有奖 约吗
  • 一视频带你了解Apache开源协议

    更多视频 xff0c 可以到我视频号查看 xff1a 点击 阅读原文 查看更多分享
  • 嵌入式程序上下文切换和解耦的工具

    关注 43 星标公众号 xff0c 不错过精彩内容 作者 NevermindZZT C语言是一种面向过程的语言 xff0c 做嵌入式项目的时候 xff0c 如果不变相面向对象 xff0c 项目到后期很难做好 xff0c 且不容易维护 今天就