原创

在 mbed平台使用 airkiss_cloudapi sdk 过程中碰到问题解决方法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/daxiebao/article/details/52614480

在 mbed平台使用 airkiss_cloudapi 过程中碰到不少问题。问题的根源在于mbed大部分驱动是用c++实现的。c++(在mian.cpp中) 调用 c静态库 

libwxcloud.a 中的函数(airkiss_cloud_loop()),反过来 c静态库 libwxcloud.a 引用c 函数(airkiss_porting.cpp中的ak_socket airkiss_tcp_socket_create()),

再调用c++函数了(airkiss_tcp_socket_create()函数又调用 c++ 类 TCPSocketConnection )。

使用extern "C"修饰符 就可以很好解决这个问题。标记那些是c函数那些是c++函数。

一、程序引用c静态库 libwxcloud.a中的函数。


在这里我使用的w5500 网络模块,其驱动是使用c++。但是 airkiss sdk 是以静态库的形式提供的(libwxcloud.a),而且是c静态库。
在 main.cpp 中调用静态库 libwxcloud.a 中的函数  airkiss_cloud_loop(); 就会提示 

main.cpp:10||undefined reference to `airkiss_cloud_loop()'|


像这种情况可能 没有引用 -wxcloud,或者是引用静态库先后顺序出问题。

但是在这里是 c 编译器 跟c++编译器生成函数的机制不一样,需要 extern "C"修饰符 声明

#include "mbed.h"
#include "EthernetInterface.h"

extern "C" {
#include "airkiss_cloudapi.h"   //标记头文件airkiss_cloudapi.h中的函数是c函数
}

int main() {
    airkiss_cloud_loop();  //在这里调用就不会提示 引用未定义函数,在c静态库 libwxcloud.a 实现
}



二、c静态库 libwxcloud.a反过来引用程序中的函数。


1、用airkiss_porting.c c文件来实现被引用函数。

编译提示:
airkiss_core.c:(.text.airkiss_cloud_loop+0x14)||undefined reference to `airkiss_gettime_ms'|


airkiss_cloudapi 需要我们实现 airkiss_porting.h中的函数。那么问题又来了--c静态库 libwxcloud.a 要引用我们程序中的函数。
那么我们定义 airkiss_porting.c文件来实现函数就可以解决问题
如果实现airkiss_porting.c 使用c实现函数 uint32_t airkiss_gettime_ms() 是可以的解决问题的。
但是我们实现像下面的函数需要使用w5500驱动,它是c++实现的。

ak_socket airkiss_tcp_socket_create();
int airkiss_tcp_connect(ak_socket sock, char* ipaddr, uint16_t port);
int airkiss_tcp_checkstate(ak_socket sock);
int airkiss_tcp_send(ak_socket socket, char*buf, uint32_t len);
那么问题又来了。提示下面的错:
mbed\platform.h|23|fatal error: cstddef: No such file or directory|


我们的c文件又包含c++文件,在 platform.h中包含了<cstddef> c++头文件,所以报错
#include "TCPSocketConnection.h"
#include "airkiss_porting.h"
#define MAX_SOCKET_COUNT 5
TCPSocketConnection *tcp_socket_array[MAX_SOCKET_COUNT]={0,0,0,0,0};
int airkiss_printfImp(const char *fmt, ...)
{
    return-1;
}



2、用airkiss_porting.cpp c++文件来实现被引用函数。


如果实现airkiss_porting.cpp 使用c++实现函数 airkiss_gettime_ms是可以的,但是 c静态库 libwxcloud.a 要引用这些函数的时候是又提示:
airkiss_core.c:(.text.airkiss_cloud_loop+0x14)||undefined reference to `airkiss_gettime_ms'|
又找不到函数的实现,这里我们是实现 c++的airkiss_gettime_ms 函数,所以链接的时候会报错。

#include "TCPSocketConnection.h"		//头文件TCPSocketConnection.h中函数是c++函数
extern "C" {  					//标记下面的函数是c函数
#include "airkiss_porting.h"
#define MAX_SOCKET_COUNT 5
TCPSocketConnection *tcp_socket_array[MAX_SOCKET_COUNT]={0,0,0,0,0};
int airkiss_printfImp(const char *fmt, ...)
{
    return-1;
}
uint32_t airkiss_gettime_ms()
{
     return -1;
}
}


这样就可以解决 c++(在mian.cpp中) 调用 c静态库 libwxcloud.a 中的函数(airkiss_cloud_loop()),
反过来 c静态库 libwxcloud.a 引用c 函数(airkiss_porting.cpp中的ak_socket airkiss_tcp_socket_create()),
再调用c++函数了(airkiss_tcp_socket_create()函数又调用 c++ 类 TCPSocketConnection )。

展开阅读全文

用GPRS进行PPP的过程碰到问题

10-18

我目前使用的是SIMCOM300的GPRS,当LCP协商好PAP后,总是验证不通过,希望各位大侠能帮我找一下原因,下面是我协商过程的数据!rn接收数据(来自ISP)rn7E FF 7D 23 C0 21 7D 21 7D 22 7D 20 7D 3C 7D 21 7D 24 7D 26 40 7D 23 7D 24 C0 23 7D 25 rn7D 26 7D 2C 3C 65 C9 7D 22 7D 26 7D 20 7D 20 7D 20 7D 20 7D 27 7D 22 7D 28 7D 22 5A 5D 7E rn7E FF 7D 23 C0 21 7D 22 20 7D 20 7D 28 7D 21 7D 24 7D 22 28 74 4B 7E rn7E FF 7D 23 C0 21 7D 21 7D 23 7D 20 7D 3C 7D 21 7D 24 7D 26 40 7D 23 7D 24 C0 23 7D 25 7D rn26 7D 2C 3C 65 C9 7D 22 7D 26 7D 20 7D 20 7D 20 7D 20 7D 27 7D 22 7D 28 7D 22 7D 32 7D 2F 7E rn7E FF 7D 23 C0 21 7D 21 7D 24 7D 20 7D 28 7D 23 7D 24 C0 23 EE B3 7E rn7E FF 7D 23 C0 21 7D 25 7D 20 7D 20 7D 3E 50 41 50 20 41 75 74 68 65 6E 74 69 63 61 74 69 6F rn6E 20 46 61 69 6C 75 72 65 E4 90 7E rn0D 0A 4E 4F 20 43 41 52 52 49 45 52 0D 0A 0D 0A 43 61 6C 6C 20 52 65 61 64 79 0D 0A rnrnrn发送数据(从终端发往ISP)rn7E FF 7D 23 C0 21 7D 21 20 7D 20 7D 28 7D 21 7D 24 7D 22 28 A4 C1 7E rn7E FF 7D 23 C0 21 7D 24 7D 23 7D 20 7D 38 7D 21 7D 24 7D 26 40 7D 25 7D 26 7D 2C 3C 65 C9 7D 22 rn7D 26 7D 20 7D 20 7D 20 7D 20 7D 27 7D 22 7D 28 7D 22 5B 50 7E rn7E FF 7D 23 C0 21 7D 22 7D 24 7D 20 7D 28 7D 23 7D 24 C0 23 3E 39 7E rn7E FF 7D 23 C0 23 7D 21 21 7D 20 7D 2C 7D 23 61 62 63 7D 23 31 32 33 E4 3C 7E rn7E FF 7D 23 C0 21 7D 26 7D 20 7D 20 7D 3E 50 41 50 20 41 75 74 68 65 6E 74 69 63 61 74 69 6F rn6E 20 46 61 69 6C 75 72 65 F1 F1 7E 论坛

没有更多推荐了,返回首页