积累日常生活的点滴,开发过程的心得。

VxWorks中信号量常见应用

VxWorks中信号量常见应用

1. 互斥进程

互斥信号量有效的内锁对共享资源的进入。

semMutex = semBCreate (SEM_Q_PRIORITY, SEM_FULL);

SEM_FULL 指明用于任务间互斥. 当一个任务要进入资源,首先要得到一个信号量,只要有任务在使用这个信号量,其它的要进入资源的任务要停止执行,当这个任务完成了对资源的使用,它会释放信号量,允许另一个任务来使用资源。

semTake (semMutex, WAIT_FOREVER);

. . 执行互斥任务

semGive (semMutex);
2. 任务同步

发布Sqlite Developer1.68

这个版本主要是允许中断长时间的查询,允许除了utf8外用ansi,utf16来编码和解码数据。另外修改了很多的界面的错误。
下载地址:
http://www.sharpplus.com/downloads/SqliteDev168.zip

发布Sqlite Developer1.4

这一版增加了快速过滤数据库浏览视图以及定制自定义工具的功能。

下载地址 http://www.sharpplus.com/downloads/SqliteDev140.zip
 

发布Sqlite Developer1.3

发布Sqlite Developer 1.3,主要更新就是将原来的Dialog界面大部分都修改为MDI模式,同时将Sqlite Dll升级到3.3.5

下载地址:http://www.sharpplus.com/downloads/SqliteDev130.zip

如何使用VC6调试Symbian UIQ 程序

在命令行下使用abld可以直接编译Symbian的程序,但是abld同时提供了命令行开关可以用来生成vc6的项目文件。使用abld生成的vc6的工程文件,我们就可以在vc6中调试symbian的程序了。步骤如下

Symbian UIQ 2.1开发之环境设置

上周买了一个motorola的FOMA M1000的手机,是基于Symbian UIQ 2.1的系统的。想自己做一些小软件玩玩。开始环境安装。

  1. 首先机器上要安装有VC 6.0的开发环境,Symbian的程序可以用VC 6.0来编译。
  2. 然后是上Symbian的网站上下载UIQ 2.1的开发SDK,注意SDK针对不同的编译器有两个不同的版本,这里我用VC 6来编译所以下的是For Codewarrior的那个版本,不要下载for BCB的版本。最新版本的文件名如下
    • UIQ 2.1 SDK WINS.zip
    • uiq21_update1_wins.zip
  3. 安装完UIQ 的SDK后,在命令行下输入下列命令,进行设备的设置。
    1. >devices
      UIQ_21:com.symbian.UIQ
      UIQ_21:com.symbian.UIQ-runtime
    2. >epoc @UIQ_21:com.symbian.UIQ,如果安装正常的话这条命令会启动UIQ的标准模拟器。
  4. 接下来,到motorola的网站上下载M1000的SDK,安装后运行下列设置命令
    1. >subst Q: D:\Symbian\M1000SDK
    2. >devices –add q:\ q:\ @M1000:com.motorola
    3. >Q:
    4. >epoc @M1000:com.motorola,这条命令用来启动Motorola的模拟器,注意,启动的路径一定要是通过Subst虚拟的路径,有时这样也会启动不了,这时就需要将一个设备指定到COM1的端口上,因为模拟器要随时Polling这个端口。
  5. 最后,将UIQ2.1SDK安装路径下的例子程序拷贝到Motorola的M1000目录下,下面的命令用来编译和安装BasicApp这个例子程序。
    1. >cd \UIQExamples\BasicApp
    2. >bldmake bldfiles @M1000:com.motorola
    3. >abld build wins udeb @M1000:com.motorola
  6. 再次启动模拟器,就可以看到编译后的BasicApp运行在系统中了。

在函数中定义局部变量的限制

前两天写了一个程序处理一些数据,调用时总是报内存无法分配的错误,经研究发现,引起内存分配错误的原因是在函数内部定义了一个20K的局部数据变量。分析由于vxworks为每个Task分配的堆栈空间比较小,当分配较大局部变量时会导致分配错误。解决方案是将函数内部的变量定义为单元的静态变量即可解决问题,这时内存是在编译时就已经分配好了的。

我也老了

今天照镜子时,无意间发现自己也有白头发了,吃惊之下才发现自己原来也已经30岁了,真是岁月像飞刀,刀刀催人老啊。

他安静地走了

2005年12月27日上午9点多钟,爸爸终于摆脱了病痛的折磨,安静地走了,听妈妈说,他走的时候处于昏迷中,很安详很平静。在他最不好的那段日子里,他曾经说过不要儿女送他,但是我知道他其实特别想我回去送他,我要是不去的话,他一定会记恨我的。刚刚订了回沈阳的机票,后天早上送他去天堂,不要让他一个人孤零零的上路。走前在他灵前摆一束花,写上'爸爸,下辈子不要再抽烟了'。

嵌入式应用程序开发几大原则

  • 对于基于实时操作系统的嵌入式程序来说,绝对不能有阻塞操作,因为系统中可能同时运行上百个线程,任何一个Task如果被阻塞了,都会使系统死锁.
  • 尽量起少的线程,尽量少使用信号量等系统紧缺的资源.因为这些资源是系统稀缺资源,大量使用会影响系统性能.
  • 对于共享资源一定要加同步锁.
  • 调试时多使用LOG,因为很多时候RTOS能够提供的交互式调试环境功能有限。
  • 调试时遇到了问题时候,首先要排除硬件的问题,因为嵌入式系统开发中会遇到的硬件问题会比普通应用开发多很多。

同步内容