几种常用大模型工具生成基于hi3861的OpenHarmony代码的尝试

server/2024/10/15 17:37:40/

引言

最近在上智能物联网的课程,讲授基于hi3861的OpenHarmony编程,所以尝试一下使用大模型工具生成相关的代码,看看效果如何。提问的方式比较简单粗暴:

在OpenHarmony的hi3861平台上,如何编程访问https的网站?

Kimi

Kimi是我用得最多的平台,它经过文献搜索之后给出如下答案。

e12fe77f12a4454d898e6f4dd5a27d90.png

 

在OpenHarmony的hi3861平台上访问https的网站,通常需要以下几个步骤:

  1. Wi-Fi连接:首先,确保hi3861开发板已经连接到互联网。这通常涉及到扫描可用的Wi-Fi网络,然后连接到一个具体的网络。可以通过以下API实现:

    c

    wifi_scan(NULL); // 扫描周边可用的Wi-Fi网络
    wifi_connect(ssid, key); // 连接到指定的Wi-Fi网络

    其中ssid是网络名称,key是网络密钥。连接成功后,可以通过wifi_set静态ip设置静态IP地址,以保证设备的网络连接稳定性。

  2. 配置网络参数:在进行网络编程之前,需要根据你的无线路由、Linux系统IP修改net_params.h文件的相关代码,包括热点名称、热点密码、服务器IP地址和端口号等。

  3. 使用LwIP Socket API编程:OpenHarmony的hi3861平台支持LwIP协议栈,可以使用LwIP的Socket API进行网络编程。例如,创建一个UDP客户端进行网络通信的步骤如下:

    • 创建Socket:socket()
    • 设置目标服务器地址和端口:sockaddr_in
    • 发送和接收数据:sendto() recvfrom()
    • 关闭Socket:close()

    具体的代码实现可以参考提供的示例。

  4. 访问HTTPS网站:对于HTTPS的支持,通常需要一个SSL/TLS库来处理加密和证书验证。在嵌入式设备上,这通常意味着使用一个轻量级的SSL库,如wolfSSL、mbedTLS等。你需要集成这样的库到你的OpenHarmony项目中,并使用它来创建一个安全的连接。

  5. 调试和验证:在开发过程中,可以通过printf打印日志或者通过asm文件定位panic问题来进行调试验证。

请注意,由于hi3861是一个轻量级的IoT设备,它的资源有限,因此可能需要对SSL/TLS库进行适当的配置以适应其资源限制。同时,确保你的OpenHarmony版本支持你选择的SSL/TLS库。由于搜索结果中没有直接提供如何在OpenHarmony上实现HTTPS的具体代码,你可能需要参考官方文档或者社区论坛来获取更多信息。

Kimi的大思路是对的,但是没有给出具体的代码,主要的原因大概是网络上找不到现成的例子。 

文心一言

同样的问题甩给文心一言后,它也很快地给出了答案。

a5c16141125d45838bb10683d46c2f8f.png

在OpenHarmony的hi3861平台上访问HTTPS网站,你通常需要用到一些网络通信库来处理HTTP请求和SSL/TLS加密。由于OpenHarmony是一个轻量级的操作系统,很多标准的库可能需要进行适配或者移植。以下是一个基本的步骤指南,用于在OpenHarmony的hi3861平台上编程访问HTTPS网站。

1. 准备工作

  1. 开发环境:确保你已经设置好OpenHarmony的开发环境,包括必要的SDK和工具链。
  2. 了解hi3861平台:熟悉hi3861的硬件规格和OpenHarmony在该平台上的支持情况。

2. 选择和移植库

OpenHarmony可能没有直接提供完整的HTTP和SSL/TLS库,因此你可能需要选择并移植这些库。

可能的库选择

  • libcurl:一个支持多种协议的客户端URL传输库,包括HTTPS。
  • mbedTLS:一个轻量级的SSL/TLS库,适合嵌入式系统。
  • OpenSSL:一个功能强大的SSL/TLS库,但可能较为庞大。

移植步骤

  1. 下载源码:从库的官方网站下载源码。
  2. 配置编译:根据hi3861的编译环境,配置库的编译选项。
  3. 编译库:使用OpenHarmony的编译工具链编译库文件。
  4. 集成库:将编译好的库文件集成到你的OpenHarmony项目中。

3. 编写代码

以下是一个使用libcurl访问HTTPS网站的示例代码:

 

c复制代码

 #include <stdio.h>
 #include <stdlib.h>
 #include <curl/curl.h>
  
 // 回调函数,用于处理从服务器接收到的数据
 size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
 {
 ((char *)userp)[0] = '\0';
 strncat((char *)userp, (char *)contents, size * nmemb);
 return size * nmemb;
 }
  
 int main(void)
 {
 CURL *curl;
 CURLcode res;
 char readBuffer[1024 * 1024]; // 缓冲区,用于存储从服务器接收到的数据
  
 // 初始化libcurl
 curl_global_init(CURL_GLOBAL_DEFAULT);
 curl = curl_easy_init();
 if(curl) {
 // 设置URL
 curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com");
  
 // 设置回调函数
 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
  
 // 设置回调函数的数据参数
 curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)readBuffer);
  
 // 执行请求
 res = curl_easy_perform(curl);
  
 // 检查请求是否成功
 if(res != CURLE_OK)
 fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
 else
 printf("Response: %s\n", readBuffer);
  
 // 清理
 curl_easy_cleanup(curl);
 }
 curl_global_cleanup();
  
 return 0;
 }

4. 编译和运行

  1. 修改CMakeLists.txt:将你的代码和依赖的库添加到CMakeLists.txt中。
  2. 编译项目:使用OpenHarmony的编译工具链编译你的项目。
  3. 烧录和运行:将编译好的固件烧录到hi3861开发板上,并运行程序。

5. 调试和测试

  • 查看日志:使用OpenHarmony提供的日志工具查看程序的输出和调试信息。
  • 测试不同URL:尝试访问不同的HTTPS网站,确保程序能够正确处理各种情况。

注意事项

  • 内存限制:hi3861是一个资源有限的嵌入式平台,注意控制内存使用。
  • 安全性:确保你使用的SSL/TLS库是安全的,并经常更新以修复可能的安全漏洞。
  • 兼容性:测试你的程序在不同版本的OpenHarmony和hi3861硬件上的兼容性。

通过以上步骤,你应该能够在OpenHarmony的hi3861平台上编程访问HTTPS网站。如果遇到具体问题,可以查阅相关库的文档和OpenHarmony的开发者指南。

 

文心一言给的大方向也还是可以,但是这里面有些问题。一个是libcurl是不是可以在hi3861上运行,这个不确定,另一个是它没有考虑到OpenHarmony所使用的编译系统并不是CMake。所以它给的解答可能在Linux上没有问题,但是在hi3861上不一定能用。

星火飞码

星火飞码(iFlyCode)是讯飞星火提供的VSCode插件,它是针对编程设计的,所以我也向它提了同样的问题。

64d9ff34a0c543dea1a40a52fcc87086.png 

OpenHarmony是由华为开发的开源物联网操作系统,它支持多种芯片和硬件平台。在hi3861平台上访问HTTPS网站需要使用相关的网络库和任务处理机制。下面我将为您生成一个示例代码框架,演示如何在OpenHarmony上实现这一功能:

首先,您需要在系统中包含必要的网络库,并初始化相关配置。然后,创建一个任务来执行HTTPS请求,并处理响应数据。

 

新建插入复制比较

#include <ohos/network/netmgr.h>
#include <ohos/network/https.h>
using namespace OHOS;
class MyHttpsTask : public ::OHOS::AAFwk::Ability
{
public: MyHttpsTask() = default; ~MyHttpsTask() override = default; void OnStart(const Want &want) override { NetmgrStub::GetInstance().Connect(want);
}
void OnConnect() override { // 初始化网络配置 s_netMgr.SetMaxRecommendConnectionCount(5); s_netMgr.SetKeepAliveTime(30); s_netMgr.SetGlobalProxy(nullptr); // 创建并执行HTTPS请求 std::shared_ptr<HttpsConnection> connection = HttpsConnection::Create(/*URL*/ "https://www.example.com", this); if (connection != nullptr) { connection->SendRequest(Want{}); } } void OnResponse(const HttpsResponse &response) override { // 处理HTTPS响应 if (response.GetErrorCode() == ERR_OK) { std::string responseText = response.ReadAll(); // 处理响应文本 } else { // 错误处理 } } private: static NetManager s_netMgr; }; NetManager MyHttpsTask::s_netMgr;

在这个示例中,我们通过HttpsConnection类来实现对HTTPS网站的访问,并实现了OnResponse方法来处理服务器返回的响应数据。请注意,您需要根据实际需求修改URL和其他相关参数。

它的回答显然不是针对hi3861的,没法用。

结语

从目前看,针对像hi3861这样比较小众的平台,大模型工具的表现不是太好。

 


http://www.ppmy.cn/server/132288.html

相关文章

力扣 前缀和

找子数组的个数了解前缀和的基础。 前缀和大致理解为到达某个位置&#xff0c;前面几个数的总和&#xff0c;即s[i1]s[i]a[i1]&#xff0c;可以通过一次循环获得。然后几个前缀和作差&#xff0c;即可得到某个位置到某个位置的和&#xff0c;根据map的键值对进行更新次数。 题…

什么是智能合约?

什么是智能合约&#xff1f; 智能合约&#xff0c;就是一段写在区块链上的代码&#xff0c;一旦某个事件触发合约中的条款&#xff0c;代码即自动执行。也就是说&#xff0c;满足条件就执行&#xff0c;不需要人为操控、不需要第三方信任。区块链的安全性和不可篡改性&#xf…

股指期货和股指期权有什么区别?

在金融衍生品的世界里&#xff0c;股权类衍生品无疑是其中的佼佼者&#xff0c;而股指期货和股指期权更是其中的佼佼者。尽管它们之间有着千丝万缕的联系&#xff0c;但它们之间的区别同样不容忽视。本文衍生股指君将详细解析股指期货和股指期权的核心区别。 一、交易的东西不…

VUE项目基于源码实现可视化编程技术的探索

背景 在面对大型且高度组件化的项目时&#xff0c;传统的开发模式——即边预览边手动修改代码&#xff0c;往往会因项目结构的复杂性而显得效率低下&#xff0c;尤其是对于新加入项目或对项目结构不够熟悉的开发者而言&#xff0c;从UI界面逆向定位到具体代码实现并作出修改的过…

02.06、回文链表

02.06、[简单] 回文链表 1、题目描述 编写一个函数&#xff0c;检查输入的链表是否是回文的。 2、解题思路&#xff1a; 快慢指针找中点&#xff1a; 利用快慢指针的技巧来找到链表的中间节点。慢指针 slow 每次移动一步&#xff0c;而快指针 fast 每次移动两步。这样&…

【git】git add时warning:LF will replaced by CRLF

git add时warning&#xff1a;LF will replaced by CRLF 一&#xff0c;问题现象二&#xff0c;问题原因&解决方法 一&#xff0c;问题现象 二&#xff0c;问题原因&解决方法 这个警告的原因是 Git 在进行文件添加操作时&#xff0c;发现行尾结束符不一致。 在不同的…

深入理解Transformer的笔记记录(精简版本)---- ELMO->GPT->BERT

1、ELMO word embedding无法区分多义词的不同语义,其本质上是个静态的方式,所谓静态指的是训练好之后每个单词的表达就固定住了,以后使用的时候,不论新句子上下文单词是什么,这个单词的Word Embedding不会跟着上下文场景的变化而改变 ELMO根据当前上下文对Word Embed…

http大数据post与put请求

大数据请求情况下出现post请求提交出错而put请求提交不出错 一、http方法特性差异 1、请求语义和用途不同 post通常用于 创建新资源Put一般用于更新现有资源服务器对于不同的HTTP方法可能有不同的处理逻辑和优化策略。在某些情况下&#xff0c;服务器可能对put请求的处理更加…