如何看待ARM新发布的mbed OS

如何看待ARM新发布的mbed OS,第1张

准确的说,mbed OS是专门为物联网定制的一个 *** 作系统: 下面一段定义来自于ARM官网: 专为基于ARM Cortex-M处理器的设备所设计的免费 *** 作系统,将物联网所需的所有基础组件,包括安全, 通信传输与设备管理等功能,整合为一套完整软件,以协助开发低功耗,产品级的物联网设备并实现量产。 这套 *** 作系统将自2014年第四季度起作为初期开发工具提供给mbed合作伙伴,首批采用mbed *** 作系统的设备预计于2015年问世。 mbed官网是这样定义自己的: We are creating a modern full-stack operating system that is designed specifically for ARM Cortex®-M-based MCUs 这是一个为物联网打造的 *** 作系统,不要把它想做可以和Android或IOS相抗衡的 *** 作系统,ARM提供一大堆套件,不得不说这些套件都很好很强大。

目前市场上的物联网 *** 作系统有十数种,分两条技术路线:
一是嵌入式 *** 作系统,称之为Linux系列。主要有Google Brillo,华为LiteOS、微软Win10 IOT、苹果Embedded Apple iOS等。二是实时 *** 作系统,可称为RTOS系列。代表有ARM Mbed OS、上海庆科MICO,Nucleus RTOS、WindRiver VxWorks,Green Hills Integrity。
哪个更好的话,还真不好说。
由于物联网产业处在发展初期,碎片化特点必将导致物联网时代对软件的多样性需求。一种 *** 作系统和开发工具很难支持物联网系统中的所有设备,短时间内,物联网 *** 作系统很难形成像智能手机中Android和iOS两家独占市场的局面。物联网 *** 作系统市场是一个增量市场。目前并没有一款成熟产品能够完全适应物联网应用。以安全性和集成化为代表的物联网新需要给传统嵌入式软件带来挑战,也给以互联网企业为代表的产业新人带来机遇。可以说当前物联网 *** 作系统发展现状,犹如智能手机 *** 作系统的7年混战时期,各霸一方,独自为营。

LIBUSB是一款简单好用的USB通讯开发库,一般HID设备用该库通讯能大大降低开发周期,使用如下,首先需要为设备安装驱动
在libusb的bin目录下有一个inf_wirzedexe的文件,该文件是生成驱动所用,具体步骤可以网上百度,很是傻瓜式 *** 作,安装好驱动之后就可以使用其通讯函数了,
安装好驱动之后的情况如下

使用visual studio开发,将lib_msvc目录下的libusblib文件添加到工程目录并将lusb0_usbh文件加入工程,如下

之后在MFC工程中如下 *** 作
OnInitDialog方法中调用usb_init函数,这是初始化函数库的,每个工程需要而且仅仅需要初始化一次
查找系统中全部USB的方法如下
usb_find_busses();
usb_find_devices();//重新寻找设备
for (bus = usb_get_busses(); bus; bus = bus->next)
{
for (dev = bus->devices; dev; dev = dev->next)
{
usbCount++;
deviceNameEmpty();
handle = usb_open(dev);
usb_get_string_simple(handle,dev->descriptoriProduct,nameBuffer,128);
usb_close(handle);
pidBuffer[usbCount-1] = dev->descriptoridProduct;//枚举所有设备
vidBuffer[usbCount-1] = dev->descriptoridVendor;
pvnBuffer[usbCount-1] = dev->descriptorbcdDevice;
deviceNameAppendFormat("%s",nameBuffer);
((CComboBox)GetDlgItem(IDC_COMBO_USB_DEVICE_ENMU))->AddString(deviceName);
}
}
打开usb设备的方法如下
//现在遍历全部设备,找到对应PID vid的设备打开
usb_find_busses();
usb_find_devices();//重新寻找设备
for (bus = usb_get_busses(); bus; bus = bus->next)
{
for (dev = bus->devices; dev; dev = dev->next)
{
if(dev->descriptoridProduct == myPid && dev->descriptoridVendor)
{
//PID VID相同
usb_handle = usb_open(dev);
}
}
}
发送数据的方法
char sendBuffer[64] = {0};
CString sendString;
GetDlgItem(IDC_EDIT_USB_SEND_MESSAGE)->GetWindowText(sendString);
for(int i = 0; i < 64; i++)
{
if(i >= sendStringGetLength())sendBuffer[i] = 0;
else
{
sendBuffer[i] = sendStringGetAt(i);
}
}
usb_claim_interface(usb_handle, 0);//默认设备
usb_interrupt_write(usb_handle,0x01,sendBuffer,64,100);
usb_release_interface(usb_handle, 0);
接收数据的方法
char receiveBuffer[64] = {0};
CString receiveString;
int recvCount = 0;
usb_claim_interface(usb_handle, 0);//默认设备
recvCount = usb_interrupt_read(usb_handle,0x81,receiveBuffer,64,100);
usb_release_interface(usb_handle, 0);
if(recvCount > 0)
{
GetDlgItem(IDC_EDIT_USB_RECV_SHOW)->GetWindowText(receiveString);
for(int i = 0; i < recvCount; i++)
{
receiveStringAppendChar(receiveBuffer[i]);
}
GetDlgItem(IDC_EDIT_USB_RECV_SHOW)->SetWindowText(receiveString);
每次发送和接手之前需要调用usb_claim_interface将函数库和 *** 作系统关联起来
有了这些基本方法,通讯应该就不成问题了
详细代码见链接
>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/13364686.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-22
下一篇 2023-07-22

发表评论

登录后才能评论

评论列表(0条)

保存