首页 文章 精选 留言 我的

精选列表

搜索[嵌入式操作系统],共10000篇文章
优秀的个人博客,低调大师

IOS嵌入式数据库SQLite3使用简析

1.Sqlite3数据类型及存储类 每个存放在sqlite数据库中(或者由这个数据库引擎操作)的值都有下面中的一个存储类: (1)NULL,值是NULL (2)INTEGER,值是有符号整形,根据值的大小以1,2,3,4,6或8字节存放 (3)REAL,值是浮点型值,以8字节IEEE浮点数存放 (4)TEXT,值是文本字符串,使用数据库编码(UTF-8,UTF-16BE或者UTF-16LE)存放 (5)BLOB,只是一个数据块,完全按照输入存放(即没有准换) 注:①Sqlite没有单独的布尔存储类型,它使用INTEGER作为存储类 型,0为false,1为true ②Sqlite没有另外为存储日期和时间设定一个存储类集,内置的sqlite日期和时间函数能够将日期和时间以TEXT,REAL或INTEGER形式存放 TEXT作为IS08601字符串("YYYY-MM-DD HH:MM:SS.SSS") REAL从格林威治时间11月24日,4174 B.C中午以来的天数 INTEGER从1970-01-01 00:00:00 UTC以来的秒数 2.Sqlite3函数功能简介 1)基本函数及结构体 sqlite3 *pdb//数据库句柄,跟文件句柄FILE很类似 sqlite3_stmt *stmt //这个相当于ODBC的Command对象,用于保存编译好的SQL语 句 sqlite3_open() //打开数据库 sqlite3_exec() //执行非查询的sql语句 sqlite3_prepare() //准备sql语句,执行select语句或者要使用parameter bind 时 , 用这个函数(封装了sqlite3_exec). sqlite3_step() //在调用sqlite3_prepare后,使用这个函数在记录集中移动。 sqlite3_close() //关闭数据库文件 2)绑定函数 int sqlite3_bind_null(sqlite3_stmt*, int); int sqlite3_bind_int(sqlite3_stmt*, int, int); int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*)); int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*)); 3)取值函数 sqlite3_column_text(),取text类型的数据 sqlite3_column_blob(),取blob类型的数据 sqlite3_column_int(),取int类型的数据 3.Sqlite3使用步骤 1) 首先获取iPhone上Sqlite 3的数据库文件的地址 2) 打开Sqlite 3的数据库文件 3) 定义SQL文 4) 邦定执行SQL所需要的参数 5) 执行SQL文,并获取结果 6) 释放资源 7) 关闭Sqlite 3数据库。 4.Sqlite3数据操作 由于整个例子代码比较繁琐,这里只列出数据库操作的部分代码作为参考: 1.添加开发包libsqlite3.0.dylib 首先是设置项目文件,在项目中添加iPhone版的sqlite3的数据库的开发包,在项目下的Frameworks点击右键,然后选择libsqlite3.0.dylib文件。 libsqlite3.0.dylib 文件地址: /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/usr/lib/libsqlite3.0.dylib 2.获取sqlite3的数据库文件地址: //数据库路径 -(NSString*)databasePath { NSArray*path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); NSString*pathname=[pathobjectAtIndex:0]; return[pathnamestringByAppendingPathComponent:@”database.sqlite3”]; } 3.打开数据库 -(BOOL)openDatabase { if(sqlite3_open([[selfdatabasePath]UTF8String],&database)!=SQLITE_OK) { sqlite3_close(database); printf("failedtoopenthedatabase"); returnNO; } else { printf("openthedatabasesuccessfully"); returnYES; } } 4.创建表 //创建TimerTable表 -(BOOL)createTimerTable { if([selfopenDatabase]==YES) { char*erroMsg; NSString*createSQL=[NSStringstringWithFormat:@"CREATETABLEIFNOTEXISTS%@(timeridINTEGERPRIMARYKEYAUTOINCREMENT,timeINTEGER,remaintimeINTEGER,iconuriBLOB,vibrateINTEGER,statusINTEGER,messageTEXT)",TableName]; if(sqlite3_exec(database,[createSQLUTF8String],NULL,NULL,&erroMsg)!=SQLITE_OK) { sqlite3_close(database); printf("createtablefaild"); returnNO; } else { printf("tablewascreated"); returnYES; } } else returnNO; } 5.添加数据 //添加Timer -(BOOL)insertTimer:(TimerInfo*)timerInfo { boolisOpen=[selfopenDatabase]; if(isOpen!=YES) { returnNO; } sqlite3_stmt*statement; staticchar*insertTimerSql="INSERTINTOTimerTable(time,remaintime,iconuri,vibrate,status,message,type)VALUES(?,?,?,?,?,?)"; if(sqlite3_prepare_v2(database,insertTimerSql,-1,&statement,NULL)!=SQLITE_OK) { NSLog(@"Error:Failedtoinserttimer"); returnNO; } sqlite3_bind_int(statement,1,timerInfo.time);//timerInfo是一个封装了相关属性的实体类对象 sqlite3_bind_int(statement,2,timerInfo.remainTime); sqlite3_bind_text(statement,3,[timerInfo.iconuriUTF8String],-1,SQLITE_TRANSIENT); sqlite3_bind_int(statement,4,timerInfo.vibrate); sqlite3_bind_int(statement,5,timerInfo.status); sqlite3_bind_text(statement,6,[timerInfo.messageUTF8String],-1,SQLITE_TRANSIENT); intsuccess=sqlite3_step(statement); sqlite3_finalize(statement); if(success==SQLITE_ERROR) { NSLog(@"Error:failtoinsertintothedatabasewithmessage."); returnNO; } NSLog(@"insertedonetimer"); returnYES; } 6.查询数据 //查询数据库中所有的TimerInfo,返回一个包含所有TimerInfo的可变数组 -(NSMutableArray*)getAllTimers { NSMutableArray*arrayTimers=[[NSMutableArrayalloc]init]; NSString*queryStr=@"SELECT*FROMTimerTable"; sqlite3_stmt*statement; if(sqlite3_prepare_v2(database,[queryStrUTF8String],-1,&statement,NULL)!=SQLITE_OK) { printf("Failedtogetalltimers!\n"); } else { while(sqlite3_step(statement)==SQLITE_ROW) { TimerInfo*timerInfo=[[TimerInfoalloc]init]; timerInfo.timerId=sqlite3_column_int(statement,0); timerInfo.time=sqlite3_column_int(statement,1); timerInfo.remainTime=sqlite3_column_int(statement,2); timerInfo.vibrate=sqlite3_column_int(statement,4); timerInfo.status=sqlite3_column_int(statement,5); char*messageChar=sqlite3_column_text(statement,6); if(messageChar==NULL) timerInfo.message=nil; else timerInfo.message=[NSStringstringWithUTF8String:messageChar]; [arrayTimersaddObject:timerInfo]; [timerInforelease]; } } sqlite3_finalize(statement); NSLog(@"arrayTimersCount:%i",[arrayTimerscount]); returnarrayTimers; } 此外,还有数据库数据的更新及其删除操作就不再依依列出,它们之间只是执行的SQL文不同,其他部分的代码较为类似。 运行效果:(具体页面控件及事件:略) 注:由于我自己目前仍是IOS开发的初学者,在这里只是做下小结,其中难免有说的不对的地方,所以希望大家多多给予指正。 本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/863169,如需转载请自行联系原作者

优秀的个人博客,低调大师

工业生产领域机器视觉技术嵌入式应用趋势

随着柔性制造系统的推广和传感、模式识别等技术的发展,造业自动化需求凸显,推动机器视觉技术在工业生产领域的应用,自动化系统解决方案不断得到优化。随着图像处理能力和速度的增强、光器件性能的提高以及成本相对降低,机器视觉逐步应用于工业生产领域,并成为自动化系统的重要组成部分之一。 工业物联网机器视觉.jpg 视觉和图像技术搭载在摄像头、传感器、雷达等智能硬件内,能够实现图像信息的获取和分析。信息从传统的单一维度数据拓展为包含速度、尺寸、色谱等信息的多维度立体海量数据,并同设计信息和加工控制信息集成,为后续工况监测、质量检验等生产环节提供数据支撑。制造业信息获取渠道得到拓展,信息获取效率大幅提升。华睿科技发布多系列面阵相机、高分辨率定焦镜头产品以及读码、结构光3D相机等最新产品,通过isp算法保证图像质量,可广泛应用于工业生产领域。 在工业应用方面,机器视觉一般用于物品的识别、外观检测和定位,随着信息网络技术不断发展,机器视觉与大数据、云计算等信息网络技术相结合,实现了数据获取后的服务功能延伸,从简单的生产检测应用中衍生出新的服务内容。企业开始利用机器视觉技术获取数据信息,并通过信息网络技术开展大数据计算,辅助进行设备的运营监测和产品的质量分析,推动提升生产线智能化水平。 机器视觉配合逻辑控制、运动控制、数据采集、通信网络等其他功能,能够完成图像识别、检测、视觉定位、物体测量和分拣等作业内容,特别是将机器视觉技术嵌入工业机器人控制系统,通过精准化的识别和抓取,大幅提高了生产过程的柔性和灵活性,自动化系统解决方案实现优化。 机器视觉与多种技术融合,将不断提升智能制造自动化水平。制造业转型升级步伐加快,机器视觉技术与产品的需求逐步增多,应用领域逐渐扩大,将推动企业加速开展产品功能创新,以满足用户个性化需求。机器视觉将融合3D监测、彩色图像处理、人工智能、运动控制、信息网络等多种技术,由单一的检测、定位、测量功能向大数据分析、智能控制方向发展。基于机器视觉的自动化监测、智能控制系统将广泛应用于工业生产各个领域,并主要从中端生产线向前端制造和后端物流环节延伸,成为提升产业自动化水平的重要抓手。 机器视觉技术日益成熟,软硬件产品不断丰富,并逐步在工业生产中发挥重要作用。例如,基于机器视觉的检测系统可以对产品进行自动检测并控制产品质量;将具备机器视觉功能的智能化机器人和机械手臂应用于自动化生产线上,能够实现码垛、焊接、涂装、装配等功能;EMS系统与机器视觉定位技术整合后,可应用在物料、条形码管理和成品检测领域。 未来,朗锐智科(www.lrist.com)认为机器视觉的产业化应用布局将加速,针对具体产业应用的专用视觉系统将会被重点研发,并逐步发展为一般通用系统,通过在加工、装配、检测、包装、物流等环节嵌入机器视觉技术,提高系统集成度,推动智慧工厂建设。

优秀的个人博客,低调大师

《 嵌入式系统设计与实践》一一2.2 从框图到架构

2.2 从框图到架构至此,我们已经有了三种不同的架构设计图,那么下一步怎么做呢?也许会认为开始的时候有些代码没有考虑到,又或者我们会进一步去找出这些模块之间是如何交互的。在开始讨论这些交互(接口)之前,花一些时间讨论一件事情是值得的,那就是:哪些部分将发生变化?在目前这个阶段,所有的事情都是实验性的,因此系统的任何一个部分都可能发生变化。给出了产品需求规格后,我们可能对系统要实现什么功能比较有信心。在我们的例子里,不管最终要做什么,都需要一个显示器,将位图数据发送给它最好的方式就是闪存。很多闪存芯片是SPI接口的,所以这个会发生变化。将要使用哪款闪存芯片也没有确定。液晶显示屏(LCD)、图像或者字体数据也会发生变化。甚至,存储图像或者字体数据的方式也会发生变化。图2-5中的模块通常表示的是理想状况,而不是具体的实现。2.2.1 封

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册