2012年11月28日
摘要: 写在前面:为什么是三呢,一和二懒得搬过来了,详见 懒兔子 。图被缩放了,看不清的请点击图片看大图。 ModelSim作为仿真利器,是做CPLD和FPGA不可或缺的一款软件。在进行仿真之前,先要说说和谐安装的问题。安装软件可以在www.modelsim.com上下载,官方提供了最新的安装包以及许多历史版本,根据需要选择相应版本后,随便填写一下个人信息(这个表格貌似没有任何验证)。 之后你需要一个和谐工具,这种crack工具网上有很多,但都不是很全,使用最常出现的问题就是License不正确。表现为这样的提示: 阅读全文
posted @ 2012-11-28 10:50 风行雪舞 阅读(717) 评论(1) 推荐(0) 编辑
摘要: 看了某兄的一篇文章,讲到学FPGA切不可急功近利,大概是受到STM32的C语言库快速入门的影响,在学习FPGA时,给自己制定了学习方针如是:掌握FPGA开发的一般流程 → 学习基本外设的设计方法 → NIOS II硬件系统的搭建→设计并DIY简单的项目 → …… 回首而顾,这不正是急功近利的典型例子?在经历了漫长的综合编译并成功在开发板上搭建NIOS II以后,发现自己并没有学会什么,自己不过是在将FPGA一步步转化成MCU来用。为了防止这弯路越走越深,开始学习基础的电路设计知识和Verilog用法,同时翻出了尘封已久的数电书(阿杜一定恨死朱红了,哈哈)。之后准备再了解一下Quartus下的仿真,以及Modelsim,如果没有用好仿真工具,也是会平添许多麻烦的。 阅读全文
posted @ 2012-11-28 10:49 风行雪舞 阅读(1564) 评论(0) 推荐(0) 编辑
摘要: FPGA学习手记(一) FPGA入门及建立FPGA开发环境 一直没有勇气涉足FPGA领域,虽说在学院限选课里也学过大规模可编程逻辑器件,接触过Quartus II和VerilogHDL,但毕竟大学课程都是些理论与皮毛,大可不必当真。此后将目光投向ARM,并一直在学习或参与基于各种MCU的设计,学习CPLD/FPGA的设想就一直仅作为设想而搁置一旁。 后来临末之时,突然又起了兴趣。这一方面是将来必然要涉及更高速度的电路和数据处理,也因为手头还算宽裕。索性就淘宝了一款阿杜觊觎已久的FPGA核心板(后来大呼上当 _),开始试足于FPGA的深水中,但求小心徐行,不要被淹屎才好。 作手记,已备重拾只用。 阅读全文
posted @ 2012-11-28 10:48 风行雪舞 阅读(2739) 评论(0) 推荐(0) 编辑
摘要: 现在就开始一步步入手ModelSim,并通过与Quartus无缝衔接实现仿真。本文使用了ModelSim10.0c + QuartusII 10.0,其他版本基本雷同,请自行研究。 看不清图的点开看大图! 1.设置第三方EDA工具 在Tools - Options中设置ModelSim的安装路径,注意要设置到win32文件夹(64位软件对应的就是win64)。 阅读全文
posted @ 2012-11-28 10:47 风行雪舞 阅读(1045) 评论(0) 推荐(0) 编辑
  2012年11月27日
摘要: 吸电流、拉电流输出、灌电流输出 拉即泄,主动输出电流,从输出口输出电流; 灌即充,被动输入电流,从输出端口流入; 吸则是主动吸入电流,从输入端口流入。 吸电流和灌电流就是从芯片外电路通过引脚流入芯片内的电流;区别在于吸收电流是主动的,从芯片输入端流入的叫吸收电流。灌入电流是被动的,从输出端流入的叫灌入电流;拉电流是数字电路输出高电平给负载提供的输出电流,灌电流时输出低电平是外部给数字电路的输入电流。这些实际就是输入、输出电流能力。 拉电流输出对于反向器只能输出零点几毫安的电流,用这种方法想驱动二极管发光是不合理的(因发光二极管正常工作电流为5~10mA)。 上、下拉电阻 一、定义 阅读全文
posted @ 2012-11-27 16:42 风行雪舞 阅读(2330) 评论(0) 推荐(0) 编辑
  2012年8月11日
摘要: Linux脚本编写语法基础介绍: 1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。 当编写脚本完成时,如果要执行该脚本,还必须使其可执行。 要使编写脚本可执行: 编译 chmod +x filename 这样才能用./filename 来运行 2 注释 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。 如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。 3 变量 在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写: #!/ 阅读全文
posted @ 2012-08-11 01:03 风行雪舞 阅读(533) 评论(0) 推荐(0) 编辑
摘要: #sample Makefile edit : main.o kbd.o command.o display.o \ #第一次:作为目标“edit”的依赖文件列表出现 insert.o search.o files.o utils.o cc -o edit main.o kbd.o command.o display.o \#第二次:规则命令行中作为“cc”的参数列表 insert.o search.o files.o utils.o main.o : main.c defs.h cc -c main.c kbd.o : kbd.c defs.h command.h cc -c kbd.c command.o : command.c defs.h command.h cc -c command.c display.o : display.c defs.h 阅读全文
posted @ 2012-08-11 01:01 风行雪舞 阅读(546) 评论(0) 推荐(0) 编辑
摘要: 经过长时间学习linux Makefile,于是和大家分享一下,看完本文你肯定有不少收获,希望本文能教会你更多东西。 假设我们有一个程序由5个文件组成,源代码如下: /*main.c*/ #include "mytool1.h" #include "mytool2.h" int main() { mytool1_print("hello mytool1!"); mytool2_print("hello mytool2!"); return 0; } /*mytool1.c*/ #include "mytool1.h" #include void mytool1_print(char *print_str) 阅读全文
posted @ 2012-08-11 01:00 风行雪舞 阅读(452) 评论(0) 推荐(0) 编辑
摘要: t ~]# pgrep -l gaim 5031 gaim 5031 gaim [root@localhost ~]# kill -9 5031 特殊用法: kill -STOP [pid] 阅读全文
posted @ 2012-08-11 00:41 风行雪舞 阅读(474) 评论(0) 推荐(0) 编辑
摘要: Linux程序前台后台切换1、在Linux终端运行命令的时候,在命令末尾加上 & 符号,就可以让程序在后台运行Ubuntu$"root@Ubuntu$ ./tcpserv01 & 2、如果程序正在前台运行,可以使用 Ctrl+z 选项把程序暂停,然后用 bg %[number] 命令把这个程序放到后台运行Ubuntu"cat@Ubuntu:~/unp/unpv13e/tcpcliserv$ ./tcpserv01 ^Z [1]+ Stopped ./tcpserv01 cat@Ubuntu:~/unp/unpv13e/tcpcliserv$ bg %1 [1]+ ./tcpserv01 & cat@Ubuntu:~/unp/unpv13e/tcpcliserv$ 3、对于所有运行的程序,我们可以用jobs –l 指令查看cat@Ubuntu:~/unp/unpv13e/tcpclis 阅读全文
posted @ 2012-08-11 00:37 风行雪舞 阅读(796) 评论(0) 推荐(0) 编辑
摘要: kill -STOP 1234 将该进程暂停。 如果要让它恢复到后台,用kill -CONT 1234 (很多在前台运行的程序这样是不行的) 如果要恢复到前台,请在当时运行该进程的那个终端用jobs命令查询暂停的进程。 然后用 fg 〔job号〕把进程恢复到前台。 如果jobs只查询到一个进程,只用 fg 即可。 例:root@dWorks:~# bc -q [1]+ Stopped bc -q root@dWorks:~# bc -q [2]+ Stopped bc -q root@dWorks:~# jobs [1]- Stopped bc -q [2]+ Stopped bc -q root@dWorks:~# fg 2 bc -q 1+1 2 A,Shell支持作用控制,有以下命令: 阅读全文
posted @ 2012-08-11 00:34 风行雪舞 阅读(2125) 评论(0) 推荐(0) 编辑
  2012年8月9日
摘要: SQlite3数据库连接完成之后,就可以执行SQL命令了。下面将要介绍的prepare和step函数都是用来操作和执行SQL命令的。 典型的函数操作流程(伪代码): /* create a statement from an SQL string */ sqlite3_stmt *stmt = NULL; sqlite3_prepare_v2( db, sql_str, sql_str_len, &stmt, NULL ); /* use the statement as many times as required */ 阅读全文
posted @ 2012-08-09 17:16 风行雪舞 阅读(1259) 评论(0) 推荐(0) 编辑
摘要: 使用jdbc测了一下sqlite3的插入数据的效率,使用整体事务与不使用整体事务,差别非常明显。 cpu: 1G, 内存:512MB 使用整体事务:1000000条记录,需要93秒钟。 使用逐个插入提交事务:1秒钟只能处理20条记录。 启动程序时把java堆最 使用jdbc测了一下sqlite3的插入数据的效率,使用整体事务与不使用整体事务,差别非常明显。 cpu: 1G, 内存:512MB 使用整体事务:1000000条记录,需要93秒钟。 使用逐个插入提交事务:1秒钟只能处理20条记录。 启动程序时把java堆最大空间设大一些,不然可能出现内存不够的异常。 java -Xmx256M TestConn 阅读全文
posted @ 2012-08-09 17:07 风行雪舞 阅读(934) 评论(0) 推荐(0) 编辑
摘要: 在sqlite编程中多线程同时写时会出现异常,我写了个类来解决这个问题。 思路很简单,就是在开始写操作时,记下写操作的托管线程id,表示目前有线程正在做写操作;其他线程来写时,需要先检测是否有进程正在做写操作,如果有就需要等待,等待到某一个配置的超时时间时,会抛出异常终止等待;如果没有则直接放行,此线程可以获得写锁。最后写操作执行完毕时需要释放锁。 下面是具体的代码: 阅读全文
posted @ 2012-08-09 17:06 风行雪舞 阅读(1243) 评论(0) 推荐(0) 编辑
摘要: SQLite和其他大部分现代SQL数据库在基本设计目标上是不同的,它的目标是简单。SQLite遵循这一目标,即使这样偶尔会导致某些特性实现的低效化。下面列举了SQLite的一些缺陷: SQL-92特性方面 正如前面提到的,SQLite不支持SQL-92的在很多企业数据库系统中可用的一些特性。 如: 外键约束(可解析的,但非强制) 很多ALTER TABLE特性 一些TRIGGER相关的特性 RIGHT和FULL OUTER JOIN 更新一个VIEW GRANT和REVOKE 你可以在SQLite的主页上获取最新信息。 http://www.sqlite.org/omitted.html http://www.sqlite.org/cvstrac/wiki?p=UnsupportedSql 阅读全文
posted @ 2012-08-09 17:05 风行雪舞 阅读(1014) 评论(0) 推荐(0) 编辑
摘要: sqlite 内存数据库的attach 我已经往内存数据库A插入了10W条数据,我现在想把A导入一个物理文件B(具有相同表结构),是不是应该用attach指令?有没有高人详细指点一下? sqlite3_open(":memory:", &db); ... ret = sqlite3_exec(db, "CREATE TABLE new_table1 (id integer primary key autoincrement,name vchar(32))", 0, 0, &zErrMsg); ret = sqlite3_exec(db,"begin transaction",0,0,&zErrMsg); ret = sqlite3_exec(db, "insert into new_table1 (name) values ('123');", 0, 0,&zErrMsg); 阅读全文
posted @ 2012-08-09 17:04 风行雪舞 阅读(1166) 评论(0) 推荐(0) 编辑
摘要: Sqlite3 的确很好用。小巧、速度快。但是因为非微软的产品,帮助文档总觉得不够。这些天再次研究它,又有一些收获,这里把我对 sqlite3 的研究列出来,以备忘记。 这里要注明,我是一个跨平台专注者,并不喜欢只用 windows 平台。我以前的工作就是为 unix 平台写代码。下面我所写的东西,虽然没有验证,但是我已尽量不使用任何 windows 的东西,只使用标准 C 或标准C++。但是,我没有尝试过在别的系统、别的编译器下编译,因此下面的叙述如果不正确,则留待以后修改。 下面我的代码仍然用 VC 编写,因为我觉得VC是一个很不错的IDE,可以加快代码编写速度(例如配合 Vassist )。下面我所说的编译环境,是VC2003。如果读者觉得自己习惯于 unix 下用 vi 编写代码速度较快,可以不用管我的说明,只需要符合自己习惯即可,因为我用的是标准 C 或 C++ 。不会给任何人 阅读全文
posted @ 2012-08-09 16:53 风行雪舞 阅读(1425) 评论(0) 推荐(0) 编辑
  2012年8月4日
摘要: 一、各位大侠,有没有什么SQL语句能够删除数据库的前N行数据?(要能用于SQLITE,用C编) 假设数据库有一个Num字段,为整型,是按升序排列的。 假如要删除前8行数据 delete from table where Num in(select Num from table limit 8) 二、sqlite3如何删除指定行数据?(如要删除数据表中第五行数据) delete from TABLE where id = (select id from TABLE Limit 4,1) 阅读全文
posted @ 2012-08-04 01:02 风行雪舞 阅读(5363) 评论(0) 推荐(0) 编辑
摘要: PRAGMA语句是SQLITE数据的SQL扩展,是它独有的特性,主要用于修改SQLITE库或者内数据查询的操作。它采用与SELECT、INSERT等语句一样的形式来发出请求,但也有几个重要的不同: 1. 特定的PRAGMA语句可能被移走,新的PRAGMA语句可能在新的版本中添加。因此,后向兼容无法保证。 2. 未知的PRAGMA命令不会有错误消息出现,它只是简单的忽略。 3. 有些PRAGMA只在SQL的编译阶段起作用,而不是执行阶段。 这意味着如果使用C语言,sqlite3_prepare(), sqlite3_step(), sqlite3_finalize()这几个API,pragma命令可能只在prepare()的调用里运行,而不是在后两个API当中执行。或者,pragma可能在sqlite3_step()执行的时候运行。到底在哪个阶段执行,取决于pragma从本身,以及是哪个s 阅读全文
posted @ 2012-08-04 01:00 风行雪舞 阅读(1936) 评论(0) 推荐(0) 编辑
摘要: 一 SQLITE 操作入门 sqlite 提供的是一些 C 函数接口,你可以用这些函数操作数据库。通过使用这些接口,传递一些标准 sql 语句(以 char * 类型)给 sqlite 函数, sqlite 就会为你操作数据库。 sqlite 跟 MS 的 access 一样是文件型数据库,就是说,一个数据库就是一个文件,此数据库里可以建立很多的表,可以建立索引、触发器等等,但是,它实际上得到的就是一个文件。备份这个文件就备份了整个数据库。 sqlite 不需要任何数据库引擎,这意味着如果你需要 sqlite 来保存一些用户数据,甚至都不需要安装数据库 ( 如果你做个小软件还要求人家必须装了 sqlserver 才能运行,那也太黑心了 ) 。 阅读全文
posted @ 2012-08-04 00:57 风行雪舞 阅读(908) 评论(0) 推荐(0) 编辑
摘要: 前序: Sqlite3 的确很好用。小巧、速度快。但是因为非微软的产品,帮助文档总觉得不够。这些天再次研究它,又有一些收获,这里把我对 sqlite3 的研究列出来,以备忘记。 这里要注明,我是一个跨平台专注者,并不喜欢只用 windows 平台。我以前的工作就是为 unix 平台写代码。下面我所写的东西,虽然没有验证,但是我已尽量不使用任何 windows 的东西,只使用标准 C 或标准C++。但是,我没有尝试过在别的系统、别的编译器下编译,因此下面的叙述如果不正确,则留待以后修改。 下面我的代码仍然用 VC 编写,因为我觉得VC是一个很不错的IDE,可以加快代码编写速度(例如配合 Vassist )。下面我所说的编译环境,是VC2003。如果读者觉得自己习惯于 unix 下用 vi 编写代码速度较快,可以不用管我的说明,只需要符合自己习惯即可,因为我用的是标准 C 或 C++ 。不会 阅读全文
posted @ 2012-08-04 00:56 风行雪舞 阅读(1272) 评论(0) 推荐(0) 编辑
摘要: 一 SQLITE 操作入门 sqlite 提供的是一些 C 函数接口,你可以用这些函数操作数据库。通过使用这些接口,传递一些标准 sql 语句(以 char * 类型)给 sqlite 函数, sqlite 就会为你操作数据库。 sqlite 跟 MS 的 access 一样是文件型数据库,就是说,一个数据库就是一个文件,此数据库里可以建立很多的表,可以建立索引、触发器等等,但是,它实际上得到的就是一个文件。备份这个文件就备份了整个数据库。 sqlite 不需要任何数据库引擎,这意味着如果你需要 sqlite 来保存一些用户数据,甚至都不需要安装数据库 ( 如果你做个小软件还要求人家必须装了 sqlserver 才能运行,那也太黑心了 ) 。 下面开始介绍数据库基本操作。 阅读全文
posted @ 2012-08-04 00:55 风行雪舞 阅读(1274) 评论(0) 推荐(1) 编辑
摘要: /* 项目名称:用c语言动态操作sqilite3数据库 * 项目成员:张双喜 * 编译环境:gcc * 项目功能: * 1、动态创建表 * 2、动态实现对表的基本操作(增、删、改、查) * 3、清空表数据、删除表(附加功能) * 项目总结: * 1、涉及的技术: * 1、int sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void*, char**); 阅读全文
posted @ 2012-08-04 00:49 风行雪舞 阅读(713) 评论(0) 推荐(0) 编辑
摘要: #include #include #include #define _DEBUG_ int main( void ) { sqlite3 *db=NULL;//声明sqlite关键结构指针 char *zErrMsg = 0; int rc; //打开或创建一个数据库文件 阅读全文
posted @ 2012-08-04 00:44 风行雪舞 阅读(2589) 评论(0) 推荐(0) 编辑
摘要: 本文主要介绍sqlite数据库遇到的一些问题以及解决的思路,接下来我们一一介绍。 rowid和Integer主键及自增属性 大多数情况下,sqlite3的表都有一个rowid(也叫oid,_rowid_),这是一个64位的整数,并作为sqlite存储结构B树的主键。因此使用rowid查询会比以其他设定的主键查询,速度会非常快。 在做插入操作的时候,对于rowid的值通常情况下不要去指定,让系统自己去决定该去何值。因为sqlite会通过SQLITE_SEQUENCE来追踪表的rowid取值情况。而且sqlite定义了rowid的取值算法:在未超出rowid的范围内,待插入记录的rowid总是表中存在过的的rowid最大值+1。比如依次插入5条记录,此时最后一条记录的rowid是5,如果把这条记录删除再插入新记录,此时新纪录的rowid是6。而当rowid达到所能表达的最大值时,这时如 阅读全文
posted @ 2012-08-04 00:41 风行雪舞 阅读(431) 评论(0) 推荐(0) 编辑
摘要: SQLite库可以解析大部分标准SQL语言。但它也省去了一些特性并且加入了一些自己的新特性。这篇文档就是试图描述那些SQLite支持/不支持的SQL语法的。查看关键字列表。 如下语法表格中,纯文本用蓝色粗体显示。非终极符号为斜体红色。作为语法一部分的运算符用黑色Roman字体表示。 这篇文档只是对SQLite实现的SQL语法的综述,有所忽略。想要得到更详细的信息,参考源代码和语法文件“parse.y”。 SQLite执行如下的语法: 阅读全文
posted @ 2012-08-04 00:39 风行雪舞 阅读(503) 评论(0) 推荐(0) 编辑
摘要: SQLite自增ID自段 使用方法为 INTEGER PRIMARY KEY AUTOINCREMENT 如: CREATE TABLE 21andy ( id INTEGER PRIMARY KEY AUTOINCREMENT, 21andy VARCHAR(100) NOT NULL, date DATE ); 注意是AUTOINCREMENT, 和MySQL的写法不一样 阅读全文
posted @ 2012-08-04 00:38 风行雪舞 阅读(382) 评论(0) 推荐(0) 编辑
摘要: 在用sqlite设计表时,每个表都有一个自己的整形id值作为主键,其实可以不指定这么一个id值,sqlite内部本来就会为每个表加上一个 rowid,这个rowid可以当成一个隐含的字段使用,但是由sqlite引擎来维护的,在3.0以前rowid是32位的整数,3.0以后是 64位的整数,为什么不直接使用这个内部的rowid作为每个表的id主键呢。 相关的文档在这里:?http://www.sqlite.org/autoinc.html?http://www.sqlite.org/faq.html 用指定INTEGER PRIMARY KEY AUTOINCREMENT 和不指定自增长字段用rowid有什么区别: 使用自增长字段为主键有不少问题,比如维护或是在大型分布应用中主键冲突的解决等。在一些大型分布应用中主键一般选用guid,这可以有效的避免主键冲突,减少对主键维护的工程。当 阅读全文
posted @ 2012-08-04 00:37 风行雪舞 阅读(431) 评论(0) 推荐(0) 编辑
摘要: 用SQL删除重复记录的N种方法 2010-02-19 13:02 例如: id name value 1 a pp 2 a pp 3 b iii 4 b pp 5 b pp 6 c pp 7 c pp 8 c iii id是主键 要求得到 阅读全文
posted @ 2012-08-04 00:36 风行雪舞 阅读(361) 评论(0) 推荐(0) 编辑
  2012年8月2日
摘要: 大多数的数据库引擎(到现在据我们所知的除了sqlite的每个sql数据库引擎)都使用静态的、刚性的类型,使用静态类型,数据的类型就由它的容器决定,这个容器是这个指被存放的特定列。 Sqlite使用一个更一般的动态类型系统,sqlite中,值的数据类型跟值本身相关,而不是与它的容器相关。Sqlite的动态类型系统和其他数据库的更为一般的静态类型系统相兼容,但同时,sqlite中的动态类型允许它能做到一些传统刚性类型数据库所不可能做到的事。 阅读全文
posted @ 2012-08-02 19:08 风行雪舞 阅读(451) 评论(0) 推荐(0) 编辑
无觅相关文章插件,快速提升流量