3 Star 5 Fork 7

yan / cpost

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

cpost

c语言程序上下文切换和解耦的工具

简介

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__}))
  • 参数

    • ... 抛出的参数,用于构造 CpostParam 对象
    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 比较任务时是否区分参数

event post

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

void ceventPost(unsigned short event);
  • 参数

    • event 事件

event export

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

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

    • _event 被监听的事件
    • _func 事件发生时,执行的函数
    • ... 需要传递给_func函数的参数
MIT License Copyright (c) 2020 Letter Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

一种可用于单片机的中断高效处理与事件机制方法,来源:https://github.com/NevermindZZT/cpost。文章:https://blog.csdn.net/qq_34245464/article/details/111804661。 https://blog.csdn.net/qq_34245464/article/details/111427317?spm=1001.201 展开 收起
C
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C
1
https://gitee.com/giteejinyan/cpost.git
git@gitee.com:giteejinyan/cpost.git
giteejinyan
cpost
cpost
master

搜索帮助