许老师,3861在STA模式下如何获取本机的IP地址,可以修改hostname吗,就是在路由器上显示的名称?
答:可以用Hi3861 SDK提供的netifapi_netif_get_addr接口,获取本机的IP地址;
可以用Hi3861 SDK提供的netifapi_set_hostname接口,设置主机名称(路由器配置界面上可以查看到);
2. 今天上课所讲的是属于南向的通信,通过之前的公开课我大概理解了北向开发之间的实时互联,南北之间实现实时互联的一个逻辑是什么?
答:目前来说,南北向之间的互联,有两种实现方式:
1. 使用鸿蒙的“分布式软总线”,优点是软总线本身已经实现了设备发现、传输层安全等特性,可以比较方便的实现安全、可靠的互联;限制是,对端设备也必须是搭载鸿蒙鸿蒙系统或者HMS Core的Android配备(必须是华为的设备);
2. 使用传统的网络协议,例如TCP/UDP/MQTT等;优点是,对端设备只要支持TCP/IP协议即可,可以是任意OS,任意形态,不一定是华为设备,不一定是手机;缺点是,需要开发者自己实现设备发现、连接管理、传输层安全等特性,开发难度和工作量较大;
3. 请问鸿蒙系统支持以太网,WIFI多网络共存,是否支持优先级控制?请问支持最新的wifi6吗?
答:LwIP支持多网口,鸿蒙网络协议栈用的是LwIP,是支持WiFi以太网共存的,比如3516开发板。目前不支持wifi6。
4. 请问老师刚开始讲课时提到,鸿蒙的API跟海思的API都提供了 wifi不同模式,那么在代码里面的体现方式有什么不一样吗?
答:最直观的区别是命名风格,鸿蒙API命名是大驼峰,海思API是下划线。
5. Harmony OS所带的TCP/IP协议栈和LwIP的比较?
答:鸿蒙带的就是LwIP,只不过有一些修改;海思Hi3861下的lwip添加了一些新的接口例如DHCP服务端等;
liteos-a上的lwip是socket接口的内核实现,对上接口是glibc风格的,和其他Unix系统基本一致。
6. 怎样在hi3516用js写app,调用硬件的能力?像上网,摄像头,喇叭?
答:目前开源的openharmony,js引擎使用的JerryScript,使用硬件能力需要:
1. 借助JerryScript的C扩展,实现JS调用C代码(具体可以参考JerryScript项目的C扩展文档:https://jerryscript.net/ext-reference-module/,其中最重要的是jerry_create_external_function这个接口);
2. hi3516上面的话,ace框架对JerryScript的C扩展做了一层封装,在ace框架的封装之上实现扩展,相比直接使用JerryScript的C扩展要容易一些;
3. 在C扩展接口的实现中,用C语言实现硬件的访问和控制;
7. 请问许老师,如果鸿蒙3861控制机器人,是不是先编写STA链接WIFI,在写UDP绑定端口得代码,然后发送指令?
答:是这样的思路,具体实施过程可能需要查阅机器人相关的SDK文档。
8. 请问3861和智能音箱该怎么结合呢?例如天猫精灵,打开卧室灯光?
答:天猫精灵有SDK,具体信息可以在他们的SDK页面上了解。
9. 这个bsd socket跟一般PC上的socket编程有什么不一样的地方么?
答:一样的,Socket API最早来源于BSD Unix发行版,所以也叫BSD Socket。
10. 请问老师,鸿蒙中主要是异步编程嘛?和go的异步模型有什么区别?
答:鸿蒙支持异步编程,但不是主要的方式;少部分API接口是异步的,大部分是同步的。go的异步是由协程(goroutine)和管道(channel)实现的CSP(Communicating Sequential Processes)模型;鸿蒙目前还没有支持协程,但是支持进程和线程(liteos-a上两者都支持,liteos-m上只支持线程)。
11. 可以应用到物联网么?比如农业/畜牧业?
答:可以的
12. 支持鸿蒙系统4G/5G的开发板型号是什么?
答:目前还有没有支持4G/5G的鸿蒙系统开发板。
13. 鸿蒙的liteos-a内核成熟后会不会不再使用linux内核?
答:应该不会,liteos-a和linux内核目标设备的资源等级不同,linux用来支持系统资源更丰富的芯片平台,未来一段时间应该是会并行演进的。
14. 鸿蒙跟liteos有什么区别?
答:鸿蒙是完整的OS,liteos只是内核,两者关系类似于Linux发行版(如Debian、Ubuntu)和Linux内核的关系。
15. 鸿蒙OS的开源程度?开源到什么程度,是100%开源吗?
答:9月10号的开发者大会上有开源路线图(可以在网上搜到回放),目前不是100%开源,下一步会开源的是鸿蒙的Linux内核。
16. Harmony的优先级范围,如何处理优先级反转问题?
答:目前liteos-m和liteos-a的优先级有32个,最高是0,最低是31;“优先级反转问题”LiteOS里面有优先级继承来规避这个问题,但是应用程序使用信号量之类时还是需要细致和小心。
17. 请问老师注册的任务是如何执行的?
答:启动过程中执行的,具体源码解析可以取社区里面看连志安老师之前发过一篇帖子。
18. 必须用windows开发么?可以用linux开发么?
答:不是必须的,可以用Linux开发,但是目前烧录工具都是Windows版的,在Linux上需要使用Wine运行烧录工具。
19. HarmonyOS使用什么开发环境?
答:南向开发用的是VSCode + DevEco Device Tool,北向用的是DevEco Studio;
20. 鸿蒙OS能够实现跨端应用吗?
答:可以实现。
21. 鸿蒙OS开发应用能够支持热加载吗?
答:目前开源的代码里面还不支持热加载。
22. 鸿蒙OS开发应用有没有大小限制?
答:有一定限制,主要受限于内核和设备本身的内存闪存等硬件资源,例如目前Hi3516开发板有1G RAM,内核的DDRMEMSIZE 定义的是 512M;Hi3518芯片集成64M RAM,Hi3861芯片集成352 KB SRAM。
23. 鸿蒙OS适合于开发离线应用吗?
答:可以开发离线应用,但鸿蒙支持分布式特性(分布式软总线,分布式调度等),更适合于开发多端协同的应用。
24. HarmonyOS这用的是什么开发语言,要如何玩起来,可以用来解决生活中什么问题?
答:南向开发用的是C/C++,北向开发用的是Java/JavaScript,可以用在智能家居之类的应用场景中。
25. 编译文件gn和Makefile相比有什么特别之处?
gn是两阶段的构建,先gn将.gn文件转为.ninja描述的依赖关系文件,再用ninja命令执行实际的构建过程。
特别之处——gn的语法是C风格的(作用域、判断、循环等),对于有C系列语言基础的程序员更友好。
26. 这个用的哪些库?
LwIP —— 一个轻量级的TCP/IP协议栈
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
我创建了一个由于“在运行时执行的单例元类定义”而无法编码的对象(这段代码的描述是否正确?)。这是通过以下代码执行的:#defineclassXthatmyusesingletonclassmetaprogrammingfeatures#throughcallofmethod:break_marshalling!classXdefbreak_marshalling!meta_class=class我该怎么做才能使对象编码正确?是否可以从对象instance_of_x的classX中“移除”单例组件?我真的需要一个建议,因为我们的一些对象需要通过Marshal.dump序列化机制进行缓存。
我正在查看Ruby日志记录库Logging.logger方法并从sourceatgithub提出问题与这段代码有关:logger=::Logging::Logger.new(name)logger.add_appendersappenderlogger.additive=falseclass我知道类 最佳答案 这实际上删除了方法(当它实际被执行时)。这是确保close不会被调用两次的保障措施。看起来好像有嵌套的“class 关于Ruby元编程问题,我们在StackOverflow上找到一
使用Paperclip,我想从这样的URL抓取图像:require'open-uri'user.photo=open(url)问题是我最后得到一个像“open-uri20110915-4852-1o7k5uw”这样的文件名。有什么方法可以更改user.photo上的文件名?作为一个额外的变化,Paperclip将我的文件存储在S3上,所以如果我可以在初始分配中设置我想要的文件名就更好了,这样图像就会上传到正确的S3key。像这样:user.photo=open(url),:filename=>URI.parse(url).path 最佳答案
我正在开发一个xcode自动构建系统。在执行一些预构建验证时,我想检查指定的证书文件是否已被撤销。我了解securityverify-cert验证其他证书属性但不验证吊销。我如何检查撤销?我正在用Ruby编写构建系统,但我对任何语言的想法都持开放态度。我阅读了这个答案(Openssl-Howtocheckifacertificateisrevokedornot),但指向底部的链接(DoesOpenSSLautomaticallyhandleCRLs(CertificateRevocationLists)now?)进入的Material对我的目的来说有点过于复杂(用户上传已撤销的证书是一
是否可以在不实际下载文件的情况下检查文件是否存在?我有这么大的(~40mb)文件,例如:http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm这与ruby不严格相关,但如果发件人可以设置内容长度就好了。RestClient.get"http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm",headers:{"Content-Length"=>100} 最佳答案
我在这方面尝试了很多URL,在我遇到这个特定的之前,它们似乎都很好:require'rubygems'require'nokogiri'require'open-uri'doc=Nokogiri::HTML(open("http://www.moxyst.com/fashion/men-clothing/underwear.html"))putsdoc这是结果:/Users/macbookair/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/open-uri.rb:353:in`open_http':404NotFound(OpenURI::HT