扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
你是要学习用还是公司开发采购用的哦?两种要考虑的因素不一样的,建议你自己考虑下。
成都创新互联公司是网站建设专家,致力于互联网品牌建设与网络营销,专业领域包括网站设计制作、成都网站制作、电商网站制作开发、微信平台小程序开发、微信营销、系统平台开发,与其他网站设计及系统开发公司不同,我们的整合解决方案结合了恒基网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,且不断评估并优化我们的方案,为客户提供全方位的互联网品牌整合方案!
现在做开发板批发的公司国内比较出名的也就那么几家,保定飞凌、深圳米尔、杭州迈冲、深圳周立功、广州友善之臂等等。我们公司目前是在用杭州迈冲和保定飞凌的。下面我们来说说这些公司的公司及产品特点。
保定飞凌的产品比较稳定。公司也相对发展比较成熟。整个的走的是稳打稳扎的路线。这个公司的产品相对来说的话也就比较稳定,属于比较传统的公司,比较传统的模式。
深圳米尔的产品也不错的,但没有飞凌的稳定。米尔市场开发意识方面比飞凌要强,目前市场铺的也还可以。价格方面,跟飞凌差不多,毕竟都是多年的老公司了,价格不太容易降下来。
杭州迈冲这家公司相对前面两家来说比较年轻,但是这家的技术比较牛。据传一般搞不定的技术问题这家都能搞的定,也间接说明了技术确实不错。板子稳定性也还可以,但是铺的产品线不多。不过这家的最大的特点是性价比比较高,同样的东西比前两家要便宜很多。
剩下的两家,周立功的和友善之臂的,其实主要是用来学习或者实验用的。
周立功的,产品线比较丰富,资料比较齐全,产品本身的稳定性虽然比不上前三家,但是也算不错了。适合学生用来做做研究。
友善之臂最大的特点是产品更新快,产品线丰富。但是同时带来的弊端就是产品不稳定,常出bug,而且有一些还没开发出来的功能就拿来做宣传。所以友善之臂比较适合对arm工控板狂热爱好者拿来做研究开发自行扩展。说不定你就成了行业先驱哦。
如果你是打算长期使用的,是给生产制造业的工厂或者其他工控系统里面用的,建议你用前面三家:保定飞凌、深圳米尔、杭州迈冲;如果你是自己学习研究用的,而且专业知识比较薄弱的话,建议用周立功或者友善之臂的。
具体用哪个型号的,需要你整理下你所需要的性能配置,然后找各个厂家让厂家去推荐下最合适的产品,然后你做个对比就可以啦。
(1) 一定要支持比较新的Android版本这里我把Android手机也算在Android开发板里面吧。目前,支持Android源码版本最好的手机/开发板应该就是Google的干儿子了(Nexus系列),官方最新源码编译好了就可以直接在上面跑了,唯一我觉得不太方便的就是手机的接口太有限,比如没有串口、有线网口、丰富的GPIO等等,调试和扩展起来比较受限。如果不是购买官方源码支持的Android设备/开发板,那么你就需要开发板生产商提供对应的Android源码(其实主要是patch包),因此,我举得如果一个Android开发板只能提供Android 2.3版的源码,建议你就不用考虑了。(2)最好选购比较热门的开发板孤军奋战,遇到问题没人交流是最痛苦的事儿了,因此,我会比较看重那些社区比较完善和活跃、关注度和开发者比较多的开发板,这里比较推荐一些开源硬件,如树莓派,Beaglebone等等,国内国外都很火,不仅有很多大牛分享开发经验,而且遇到问题也很容易在社区搜到解决方案。(3)其他的综合考虑对于我来说,上面两个因素是我最看重的,当然,也还有其他的可以参考的因素,比如:价格,文档资料,开发板的接口(串口、网络、USB OTG、HDMI等等),开发板的处理器厂商(TI?高通?Marvell?)开发板的性能(CPU、内存大小等)。
迅为RK3399开发板平台采用瑞芯微RK3399处理器,是一款低功耗、高性能的应用处理器芯片,开发板的结构设计为底板+核心板方式,拆装方便,扩展性好。
RK3399开发板提供四种系统,全开源,Android8.1系统;Ubuntu16.04系统;Linux-QT5.7系统;Debian9系统。
支持天嵌的TQIMX6Q_BASEC开发板,能在安卓系统下,进行多屏同显与多屏异显。其中,可使用的高清视频输出端口有LCD、LVDS、HDMI。不错的开发平台高配置(2G
DDR3/8G EMMC),低价格,资料还很齐全。
一.认识android的架构
Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA的application framework之上。
android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。
二.搭建环境
搭建开发环境
对国内的开发者来说最痛苦的是无法去访问android开发网站。为了更好的认识世界,对程序员来说,会翻墙也是的一门技术,带你去领略墙外的世界,好了,不废话了, 国内开发者访问(androiddevtools) 上面已经有了所有你要的资源,同时可以下载到我们的主角framework
但是这样的搭建只能去阅读源代码,我们无法去更进一步去实现自己的rom,我们看到锤子的系统在早期的开放rom是自己从新实现了framework的代码,现在看起来他成功了,所以我们还要去搭建android系统的源码编译环境。
搭建源码编译环境
(这里详细的介绍了如何下载编译)
三.开始主题
在一开始写c程序的时候都有一个运行的入口,比如
#include iostream
#include cmath
#include algorithm
using namespace std;
//这里的main就是应用的入口
int main(int argc, const char * argv[]){
return 0;
}
在计算机网络原理中我们用socket实现一个服务器端,不断的接听客户端的访问,而且他的代码是这样实现的:
#include winsock2.h
#pragma comment(lib, "WS2_32.lib")
#include stdio.h
void main()
{
WORD wVersionRequested;//版本号
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2, 2);//2.2版本的套接字
//加载套接字库,如果失败返回
err = WSAStartup(wVersionRequested, wsaData);
if (err != 0)
{
return;
}
//判断高低字节是不是2,如果不是2.2的版本则退出
if (LOBYTE(wsaData.wVersion) != 2 ||
HIBYTE(wsaData.wVersion) != 2)
{
return;
}
//创建流式套接字,基于TCP(SOCK_STREAM)
SOCKET socSrv = socket(AF_INET, SOCK_STREAM, 0);
//Socket地址结构体的创建
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//转换Unsigned long型为网络字节序格
addrSrv.sin_family = AF_INET;//指定地址簇
addrSrv.sin_port = htons(6000);
//指定端口号,除sin_family参数外,其它参数都是网络字节序,因此需要转换
//将套接字绑定到一个端口号和本地地址上
bind(socSrv, (SOCKADDR*)addrSrv, sizeof(SOCKADDR));//必须用sizeof,strlen不行
listen(socSrv, 5);
SOCKADDR_IN addrClient;//字义用来接收客户端Socket的结构体
int len = sizeof(SOCKADDR);//初始化参数,这个参数必须进行初始化,sizeof
//循环等待接受客户端发送请求
while (1)
{
//等待客户请求到来;当请求到来后,接受连接请求,
//返回一个新的对应于此次连接的套接字(accept)。
//此时程序在此发生阻塞
SOCKET sockConn = accept(socSrv, (SOCKADDR*)addrClient, len);
char sendBuf[100];
sprintf(sendBuf, "Welcome %s to JoyChou",
inet_ntoa(addrClient.sin_addr));//格式化输出
//用返回的套接字和客户端进行通信
send(sockConn, sendBuf, strlen(sendBuf)+1, 0);//多发送一个字节
//接收数据
char recvBuf[100];
recv(sockConn, recvBuf, 100, 0);
printf("%s\\n", recvBuf);
closesocket(sockConn);
}
}
他采用了一个while死循环去监听客户端的请求。
在一遍啰嗦之后,主角终于闪亮的登场了。
先上源代码
public final class ActivityThread {
public static void main(String[] args) {
SamplingProfilerIntegration.start();
CloseGuard.setEnabled(false);
Environment.initForCurrentUser();
EventLogger.setReporter(new EventLoggingReporter());
Security.addProvider(new AndroidKeyStoreProvider());
final File configDir = Environment.getUserConfigDirectory(UserHandle.myUserId());
TrustedCertificateStore.setDefaultUserDirectory(configDir);
Process.setArgV0("pre-initialized");
Looper.prepareMainLooper();
//从中可以看到为app开辟了一个线程进入了looper之中
ActivityThread thread = new ActivityThread();
thread.attach(false);
if (sMainThreadHandler == null) {
sMainThreadHandler = thread.getHandler();
}
AsyncTask.init();
if (false) {
Looper.myLooper().setMessageLogging(new
LogPrinter(Log.DEBUG, "ActivityThread"));
}
Looper.loop();
throw new RuntimeException("Main thread loop unexpectedly exited");
}
}
看到源码失望了,没有一个while循环啊,其实用了他方法实现
//用一个looper的机制循环监听响应
Looper.prepareMainLooper();
Looper.loop();
进一步深入代码
public static void loop() {
final Looper me = myLooper();
if (me == null) {
throw new RuntimeException("No Looper; Looper.prepare() wasn't called on this thread.");
}
final MessageQueue queue = me.mQueue;
Binder.clearCallingIdentity();
final long ident = Binder.clearCallingIdentity();
// 在这里看到了一个循环监听消息
for (;;) {
Message msg = queue.next(); // might block
if (msg == null) {
// No message indicates that the message queue is quitting.
return;
}
Printer logging = me.mLogging;
if (logging != null) {
logging.println(" Dispatching to " + msg.target + " " +
msg.callback + ": " + msg.what);
}
msg.target.dispatchMessage(msg);
if (logging != null) {
logging.println(" Finished to " + msg.target + " " + msg.callback);
}
// Make sure that during the course of dispatching the
// identity of the thread wasn't corrupted.
final long newIdent = Binder.clearCallingIdentity();
if (ident != newIdent) {
Log.wtf(TAG, "Thread identity changed from 0x"
+ Long.toHexString(ident) + " to 0x"
+ Long.toHexString(newIdent) + " while dispatching to "
+ msg.target.getClass().getName() + " "
+ msg.callback + " what=" + msg.what);
}
msg.recycleUnchecked();
}
}
主要看你是用在哪方面的啊?
如果是生产研发用的,物美价廉,技术给力最重要。建议选择那种有实力的专门做开发板的厂商,比如迈冲科技、米尔科技等。这些厂商一个是做开发板多年,技术方面已经特别成熟。二是一般这种厂商都已经有一些标准版型是在经常大批量生产的,相对于其他的小厂商来说,成本要小一点。对于我们买家来说,也就是价格要便宜一点。
如果是学习用的,那资料齐全最重要。上诉的这些专门做开发板的厂商一般核心板的原理图之类的核心文件是不会给的。那如果你学习用的话又需要的话可能就没法选择这几家了。业内资料比较齐全的属周立功的。可以了解下。
如果你是开发板发烧友,对开发板有狂热的爱好,自己热衷于研究这一块,可以看看友善之臂的板子。他们的板子一般都是业内最新的。但是对于稳定性及技术支持方面就不要抱太大希望那个哦~~
望采纳~
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流