导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→在混合接口. C和.XC实现[liufengzhong]

 *第58117篇: 在混合接口. C和.XC实现

  
楼 主:liufengzhong 2014年10月1日10:24
 在混合接口. C和.XC实现

你好,

我有一个.xc调用的任务。 c函数从我想沟通使用接口(客户端)。 这样的实现将是什么样子? 你能提供一个例子吗?

谢谢


回答:

如果你想做它从客户端然后最好的办法是编写C原型接口函数的包装器。 例如假设我有:

interface my_if {
  void f(int x);
  void g(char y);
};

您可以编写以下文件:

--my_if_c_api.h---
#include   <xccompat.h>  
void my_if_f(CLIENT_INTERFACE(my_if, i), int x);
void my_if_g(CLIENT_INTERFACE(my_if,i), char y); 
--my_if_c_api.xc-- 
#include   <my_if_c_api.h>  
void my_if_f(client interface my_if i, int x) { i.f(x); }
void my_if_g(client interface my_if i, char y) { i.g(y); }
---- 


然后,您可以包括my_if_c_api。 h C程序和使用功能。

目前还没有简单的方法做接口通信的服务器端直接从最简单的事情是顶级的选择在我然后调用C函数

// These are defined in a C file
extern() void my_c_f_handler(int x);
extern void my_c_g_handler(int y);
void my_task(server my_if i) {
  while (1) {
    select {
    case i.f(int x):
      my_c_f_handler(x);
      break;
    case i.g(int y):
      my_c_g_handler(y);
      break;
   }
 }


回复:

好吧,让我们一步一步的做。
1。 我有一个工作代码。 我与一个接口。
我有:
——my_interface.h
接口my_interface
{
int function_a(int x,int y);
空白function_b(int,int,int);
};
 
 
——my_client_application.h
# include“my_interface.h”
 
空白my_client_application(客户端接口my_interface我);
 
 
——my_client_application.xc
# include“my_client_application.h”
# include“some_c_code.h”
 
空白my_client_application(客户端界面my_interface我)
{
int =我。 function_a(1、2);
我。 function_b(3、4、5);
some_c_function();
}
 
构建和运行的应用程序。 但需要的是电话 i.function_a 从内 some_c_function 离开 i.function_b 里面 my_client_application。
 
2。 现在我添加一个c包装头就我理解:
 
--my_interface_c_api.h--
#include   <xccompat.h>  
 
int c_wrapper_function_a(CLIENT_INTERFACE(my_interface, i), int x, int y);
 
到目前为止应用程序构建。 不知道我找到了正确的参数。
 
3。 现在我添加包装实现:
 
--my_interface_c_api.xc--
#include "my_interface_c_api.h"
 
int c_wrapper_function_a(client interface my_interface i, int x, int y) {i.function_a(x, y);}
 
试图构建应用程序不使用包装器函数。 我得到:
 
my_interface_c_api。 h:错误:接口声明的参数列表
my_interface_c_api。 我:错误:接口声明在参数列表
在功能“c_wrapper_function_a”:
my_interface_c_api。 我:参数错误:“我”不完整类型
my_interface_c_api。 我:错误:试图调用接口函数不完整的接口类型
 
在这一点上我感到困惑。 我做错了什么?
 
然后我还不太理解的观点 some_c_function() 应该像和接口如何包装里面打来的电话。
 
谢谢
 

回答:

你需要包括my_interface_c_api接口的定义。 我的文件即。

#include "my_interface_c_api.h"
#include "my_interface.h"
int c_wrapper_function_a(client interface my_interface i, int x, int y) {i.function_a(x, y);}
 
回复:

如果我包括“my_interface。 h”到 my_interface_c_api.xc 文件,我得到:
my_interface_c_api。 h:错误:接口声明的参数列表。
现在,如果我把“my_interface。 h”内 my_interface_c_api.h ,代码编译。
我现在错过了第四步,即:
我怎么可能值使用里面的接口吗 some_c_function() 吗?

步骤4。

我有:

-my_interface_c_api.h--
#include   <xccompat.h>  
#include "my_interface.h"
 
int c_wrapper_function_a(CLIENT_INTERFACE(my_interface, i), int x, int y);
 
--my_interface_c_api.xc--
#include "my_interface_c_api.h"
 
int c_wrapper_function_a(client interface my_interface i, int x, int y) {return i.function_a(x, y);}
--c_code.h--
void some_c_function(void);
 
--c_code.c--
#include "c_code.h"
#include   <stdio.h>  
void some_c_function(void){
    int value = c_wrapper_function_a(???what shoud be here???, 1, 2);
    printf("value: %i\n", value);
}
 
请在这里正确的什么是错误的和评论什么应该被添加/改变。
谢谢


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:PWM教程——限制较低的值

[下一篇主题]:[转帖]xTimeComposer硬件检测失败