在TouchGFX中使用C代码

您可能已经知道,TouchGFX是用C ++实现的,而TouchGFX API也是C ++。这意味着至少直接与UI相关的代码必须是C ++代码。但是,并不需要整个系统都以C ++实现。
本文介绍了如何在应用程序中混合使用C ++和C。

基于任务的C和C ++分离

一个好的方法是在应用程序的UI任务中使用C ++,在所有其他任务中使用C。

UI任务显然将与TouchGFX API紧密联系在一起,因此主要是C ++代码。如文章  “将UI连接到系统”中所述,我们建议使用OS提供的任务间通信机制在UI任务和其余系统之间传递数据。通常,这意味着在任务之间发送以C结构表示的消息/邮件。这样的结构在C和C ++中都可以理解,因此可以在UI任务(C ++)和系统中的任何其他任务(C或C ++)之间提供方便且可移植的接口。

使用这种方法,您可以使系统中的所有非GUI代码均为常规C代码,而只有GUI任务为C ++。

从C ++调用C函数

如果确实需要从C ++代码中调用C函数,则可以通过添加由extern "C"以下内容包围的函数声明来轻松实现:

Codefile.cpp:

extern "C"
{
// function prototypes
int func();
// OR include header files containing C function declarations
#include <example.h>
}
/// func() and any functions in example.h can now be called from C++ code.

从C调用C ++函数

走另一条路需要更多的工作。严格来讲不可能从C代码调用C ++,因此您将需要创建一个使用C样式名称修饰的C ++包装函数,从而使其可以从C调用。

Codefile.cpp:
// The extern declaration makes cpp_func callable from C
extern "C" void cpp_func(); // C++ wrapper function implementation.
void cpp_func()
{
// C++ code
HAL::getInstance()->someFunction();
} mycode.c:
// Declaration of wrapper function
void cpp_func(); //cpp_func() is callable from this C code file.



来源

【TouxhGFX】集成 之 《Using C code with TouchGFX》的更多相关文章

  1. CI集成phpunit Error: No code coverage driver is available 的解决

    CI集成phpunit时,运行报No code coverage driver is available的错误,如下图: yanglingdeMacBook-Pro:tests yangling$ p ...

  2. ASP.NET Core 中文文档 第二章 指南(1)用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序

    原文:Your First ASP.NET Core Application on a Mac Using Visual Studio Code 作者:Daniel Roth.Steve Smith ...

  3. C语言工具---Code::Blocks

    Code::Blocks Code::Blocks 是一个开源的全功能的跨平台C/C++集成开发环境. Code::Blocks是开放源码软件.由纯粹的C++语言开发完成,它使用了著名的图形界面库wx ...

  4. iOS 持续集成

    iOS 持续集成系列 - 开篇 前言 iOS 开发在经过这几年的野蛮生长之后,慢慢地趋于稳定.无论开发语言是 Objective-C 还是 Swift,工程类型是 Hybird 还是原生,开发思想是 ...

  5. Memcached理解笔2---XMemcached&Spring集成

    一.Memcached Client简要介绍 Memcached Client目前有3种: Memcached Client for Java SpyMemcached XMemcached 这三种C ...

  6. jenkins-为什么要持续集成

    持续集成(Continuous Integration),也就是我们经常说的 CI,是现代软件开发技术的基础.本文论述了当前软件开发过程中存在的问题,讲解了持续集成.持续集成服务器的概念,最终探讨了为 ...

  7. 持续集成平台jenkins

    一. 什么是持续集成 1. 概念 持续集成(Continuous Integration),也就是我们经常说的CI 持续集成(CI)是一种实践,可以让团队在持续的基础上收到反馈并进行改进,不必等到开发 ...

  8. Code::Blocks

    Code::Blocks 是一个开放源码的全功能的跨平台C/C++集成开发环境. Code::Blocks是开放源码软件.Code::Blocks由纯粹的C++语言开发完成,它使用了著名的图形界面库w ...

  9. Memcached笔记——(二)XMemcached&Spring集成

    今天研究Memcached的Java的Client,使用XMemcached 1.3.5,做个简单的测试,并介绍如何与Spring集成. 相关链接: Memcached笔记--(一)安装&常规 ...

  10. 高效扩展工具让 VS Code 如虎添翼

    Codelf 变量命名神器 Star:10688 https://github.com/unbug/codelf 新建项目,变量,类,方法,接口都需要命名,一个好的命名可以一眼看出这个地方的功能,Co ...

随机推荐

  1. Shell脚本实践总结

    对比大小 符号用法:(必须使用双括号) < 小于     (( "$a" < "$b" ))  <= 小于等于   (( "$a&q ...

  2. 记录一次K8s pod被杀的排查过程

    问题描述 今天下午运维反馈说我们这一个pod一天重启了8次,需要排查下原因.一看Kiban日志,jvm没有抛出过任何错误,服务就直接重启了.显然是进程被直接杀了,初步判断是pod达到内存上限被K8s ...

  3. 降低node版本,怎么降低node版本

    降低node版本,怎么降低node版本? 部分老旧项目需要使用低版本的node,网上很多是无效的,高版本无法直接安装低版本node,但是低版本nodejs可以安装部分高版本node,从而达到升级效果. ...

  4. AI与低代码解锁无限可能

    前言 近年来,人工智能(AI)和低代码开发技术逐渐成为数字化转型的重要推动力.AI作为一项具有革命性潜力的技术,正在改变我们生活的方方面面.而低代码开发则提供了一种快速构建应用程序的方法,使得开发者无 ...

  5. Multi-Architecture镜像制作指南已到,请查收!

    摘要:使用Multi-Architecture镜像,可以让docker根据系统架构去拉取对应的镜像,服务的部署脚本等可以在不同架构的系统间使用相同的配置,减化服务配置,提高了服务在不同系统架构间的一致 ...

  6. Solon Cloud 2.2.10 架构图发布

    Solon Cloud 是在 Solon 的基础上构建的微服务开发套件.以标准与规范为核心,构建丰富的开放生态.为微服务开发提供了一个通用防腐层(即不用改代码,切换配置即可更换组件). 本次发布,展示 ...

  7. H-ui JQuery 给单选按纽赋值不生效

    H-ui JQuery 给单选按纽赋值不生效 $("#sex-1").attr('checked',true) 原因,iradio-blue 样式的原因 把下面代码注释掉就可以了 ...

  8. PPT 商务PPT 如何展示你的产品

    PPT 商务PPT 如何展示你的产品 如何优雅的展示产品 如何展示互联网产品 直接产品截图,比较生硬,简单粗暴 使用场景+样机 放一个电脑或手机的外壳 如何展示产品 如何展示现实中的产品 多角度剪裁 ...

  9. PPT 做出动态路线动画

    https://www.iconfont.cn/ 插入,起点.终点,两图标 编辑顶点,调整路线 添加淡出动画,持续时间1秒 再添加直线 从上一项开始 效果选项中,选择自动翻转 计时 -> 期间 ...

  10. MongoDB 占用CPU资源过高

    情况如下 db.currentOp() 发现有全表扫描 将 Collscan 对应的 Collection 建索引 db.Table1.createIndex({"DataTime" ...