本站动态:

预览模式: 普通 | 列表

shoColorCode代码加亮程序更新记录

代码排版中的缩进和行长

大家都知道,代码的排版虽然不影响代码的编译和程序的运行,但是对于开发人员来说,它同样很重要。当我们看到排版整齐质量又高的代码的时候,我们会像欣赏艺术品一样去欣赏它,而如果代码排版混乱,哪怕思想再好的代码也会让你看了心烦。本文主要和大家探讨一下代码排版中的缩进和行长问题。

代码的缩进主要使用两个字符:tab键的缩进(\t)和空格。而对于到底使用tab还是空格,目前基本上没有形成统一的说法。使用tab的好处是需要缩进的时候,程序员只要敲一下tab键即可,而且多数程序员(包括我)都比较习惯使用tab。缺点是:tab的宽度是可变的。正常情况下,一个tab的长度是8个普通字符的宽度,而习惯上,我们认为用4个普通字符的宽度作为tab的长度是比较理想的,大多数代码编辑器都可以设定tab的长度。而空格除了缩进比较麻烦(得敲多个空格键),在对齐上比较容易。

另外还有一个问题,如果使用tab,在不同的编辑下显示的效果不同。比如在VC下排版得很好,可是用source insight或者Clear Case里的Merge工具打开,发现排列不整齐了。这个事情真的很头疼,所以有人(公司)就直接规定不许使用tab,只使用空格缩进。不过这样做对开发者来说确实是烦人的事情。

查看更多...

分类:程序开发 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 212

MainMenuWidget简介

之前开发了一个MainMenuWidget,主要用于主菜单的12宫格。它具有以下功能:

1、宫格数可以由用户确定,最大宫格数由宏由MW_ITEM_ROW_MAX_NUM和MW_ITEM_COL_MAX_NUM控制。工程中使用的MainMenuWidget支持n * m宫格(n <= MW_ITEM_ROW_MAX_NUM && m <= MW_ITEM_COL_MAX_NUM)的任意组合。

2、任意一个宫格都可以设置是否支持可选中状态。

3、可以有动画移动效果,也可以关闭动画移动效果。

4、每个选中的宫格都支持animation动画,也可以关闭该功能。各个宫格的动画帧数可以不一致,也可以设置animation动画的播放次数(0次到无限)

查看更多...

分类:brew开发 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 204

RFID代码编写问题汇总

最近在做RFID的开发,驱动由另外一个同事负责,而OEM/AEE和上层的Applet全部由我开发。

OEM层的作用主要是实现IRFID接口,该接口主要通过调用驱动提供的函数读取芯片里的数据。驱动在收到请求后做出处理,最后通过回调的方式将请求结果发还给OEMRfid,OEMRfid再通知上层Applet将数据显示到界面上。

OEM向Applet发送请求结果的方式,当时主要考虑了回调的方式、ISHELL_SendEvent和ISHELL_PostEvent。因为可选的方式较多,所以当初在设计的时候定义了一个宏来向Applet发送结果,这样一来可以简化代码,看上去更简洁,二是如果想选择另外的方式,不需要到处修改代码,而只需要将这个宏的定义调整一下就好。

查看更多...

分类:brew开发 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 238

背景:工作中,UI工程师提供图片资源是分目录放置的,可是提交给CM的时候却需要在一个目录下的,如果手动拷贝非常麻烦,而如果直接用COPY 或 XCOPY命令把文件从A目录拷贝到B目录,B目录还是会维持A目录的目录结构。昨天晚上手动写了一根批处理工具,正是用来解决该问题的。具体用法代码中也有,这里不赘述。

copydir.bat代码如下:

  1. :: Auther: Shosh
  2. :: Site:  http://www.wscxy.com
  3. :: Date:  2010.03.13
  4. :: This bat copies all the files under a directory and all levels of subdirectories to another folder(no subfolder)
  5. @ECHO OFF
  6.  
  7. SET DefSrcRootDir=.
  8. SET DefDestDir=.
  9.  
  10. :FunBegin
  11. SET bConfirm=NO
  12. IF "%1" == "/?" GOTO FunUsage
  13.  
  14. SET bHaveOption=FALSE
  15. IF "%1" == "/c" SET bHaveOption=TRUE
  16. IF "%1" == "/C" SET bHaveOption=TRUE
  17. IF "%1" == "-c" SET bHaveOption=TRUE
  18. IF "%1" == "-C" SET bHaveOption=TRUE
  19.  
  20. IF bHaveOption == TRUE (
  21.         SET bConfirm=YES
  22.         IF "%2" == "" (
  23.                 SET srcRootDir=%DefSrcRootDir%
  24.                 SET destDir=%DefDestDir%
  25.         ) ELSE (
  26.                 IF NOT "%4" == "" GOTO FunErrorUsing
  27.                 SET srcRootDir=%2
  28.                 SET destDir=%3
  29.         )
  30. ) ELSE (
  31.         SET bConfirm=NO
  32.         IF "%1" == "" (
  33.                 SET srcRootDir=%DefSrcRootDir%
  34.                 SET destDir=%DefDestDir%
  35.         ) ELSE (
  36.                 IF NOT "%3" == "" GOTO FunErrorUsing
  37.                 SET srcRootDir=%1
  38.                 SET destDir=%2
  39.         )
  40. )
  41. IF "%destDir%" == "" GOTO FunErrorUsing
  42.  
  43. ::confirm settings
  44. ECHO ================================================================
  45. ECHO   Source Root Dir: %srcRootDir%
  46. ECHO          Dest Dir: %destDir%
  47. ECHO Overwrite Confirm: %bConfirm%
  48. ECHO ================================================================
  49. SET /P choice=Start executing? [Y/N] 
  50. if NOT %choice% == Y (
  51.         if NOT %choice% == y GOTO FunCancel
  52. )
  53. ::check input directories settings
  54. IF NOT EXIST %srcRootDir% ECHO [%srcRootDir%] not found!!!
  55. IF NOT EXIST %destDir% ECHO [%destDir%] not found, we will create it.
  56.  
  57. ::check source root dir before starting coping
  58. IF NOT EXIST %srcRootDir% GOTO FunPause
  59. IF %bConfirm% == YES (
  60. :: confirm overwriting
  61.         FOR /R %srcRootDir% %%i IN (.) DO XCOPY "%%i" "%destDir%" /-Y /V /F /I /K
  62. ) ELSE (
  63. :: no confirm
  64.         FOR /R %srcRootDir% %%i IN (.) DO XCOPY "%%i" "%destDir%" /Y /V /F /I /K
  65. )
  66.  
  67. ECHO ================================================================
  68. ECHO Finish!!! 
  69. ECHO Thank you for using copydir.bat written by Shosh!!!
  70. ECHO Welcome to visit my website http://www.wscxy.com
  71. GOTO FunPause
  72.  
  73. :FunErrorUsing
  74. ECHO !!! Error using copydir.bat !!!
  75. GOTO FunUsage
  76.  
  77. :FunUsage
  78. ECHO USAGE:    copydir [/C] [source root dir] [dest dir]
  79. ECHO           [/C] Confirm if a file needs overwriting. if not set, it will overwrite without confirm.
  80. ECHO If set both src root dir and dest dir to ., that means all the files in all levels of subfolders will be copied to the current folder.
  81. goto FunPause
  82.  
  83. :FunCancel
  84. ECHO You've canceled executing.
  85. GOTO FunPause
  86.  
  87. :FunPause
  88. ECHO ================================================================
  89. SET /P a=Press ENTER key to continue... 
分类:程序开发 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 368

头文件的部分规则:重定义相关

Author: Shosh
Site: http://www.wscxy.com

RULE1: 每个头文件都用以下宏包起来,防止被其他文件多次包含。
    #ifndef __FILENAME_H__
    #define __FILENAME_H__

查看更多...

分类:C/C++ | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 498

杂谈:Brew上的应用开发

Author: Shosh
Site: http://www.wscxy.com

对于MMI工程师在BREW上的开发需求,往往是以Applet为单位的。Brew上的Applet就是一个应用程序,和Application的概念类似。

大多数Applet都需要UI界面(Daemon程序的需求往往很少),他们往往需要完成一定的功能,所以有逻辑的部分,如计算器程序,就是要处理用户输入的数据并给出计算结果;另外,我们需要提供显示界面和用户进行交互,越是动感越是绚丽的界面效果越能赢得用户的喜爱。话说回来,MMI层次上开发的应用,逻辑上大多比较简单,不需要复杂的算法。开发者不必了解太多的底层知识和硬件知识,只要有扎实的程序语言开发功底(BREW上多数用C,也有用C++的),基本上都能写出一般的应用来。另外,逻辑部分的代码变动性不强,而界面效果在不同的工程间则可以相差很大,还是拿计算器程序来举例,我们在不同的手机上看到的计算器程序,有的界面效果看上去很一般,而有的则很漂亮,但是他们完成的功能是差不多的。而对于一个公司来讲,他们往往希望同一套代码能够适应不同工程项目上的需求,这样可以在很大程度上减少工作量。其实这是客制化的一部分,最理想的客制化是不需要修改代码,只要替换图片资源、字符串资源和其他一些资源如音频资源即可达到目的。但是如果差异较大,光靠资源的替换是很难满足需求的,还是需要修改到代码的。我们会希望尽量少地改动到逻辑代码,最好是只需要修改到一些数据,而不用去修改实质性的代码,而功能逻辑上的一致性给了我们一定的可能。说了这么多,其实是说:我们在设计的时候尽量考虑通用性,以提高代码的复用率以及风格变换的简易性。

目前,在Brew上开发界面,主要使用BUIW。在BUIW中,主要有Form, RootForm, Container, Widget, Decorator, Model等概念。下面简单介绍一下这些基本概念:

Model:其实Model是一个用来存放数据的结构。它提供专门的接口让用户设置Model的值或得到Model的值。另外Model还负责维护Listener List,并提供接口允许对象监听它(将Listener加入到Listener List中)。当用户通过Model提供的设置数据的接口改变Model的值的时候,Model就会逐个给监听它的Listener对象发送消息(实际上是直接调用Listener注册的回调函数),监听的对象再做出相应的动作,如使用新设置进来的数据更新画面等。其实这里应用了设计模式中的观察者模式(Abserver Pattern)。Model分很多种,比较常用的有Value Model, Interface Model, Vector Model等,不同种类的Model存放的数据类型不同。一般情况下,一个Widget会关联上一种Model,并监听Model数据的改动。

查看更多...

分类:brew开发 | 固定链接 | 评论: 2 | 引用: 0 | 查看次数: 652

最新Android SDK 地址

最新Android开发地址: http://developer.android.com/sdk/index.html
以前在国内这个地址好像是打不开的,不过现在可以了。

Android快速起步(搭建Android环境)
Quick Start:
The steps below provide an overview of how to get started with the Android SDK. For detailed instructions, start with the Installing guide.

查看更多...

分类:Android开发 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 664

第三章: 进程同步机制

第三章: 进程同步机制

3.1 信号量和P、V操作

信号量:表示资源使用情况的一种数据结构

struct{
	int n; //正数表示当前可用的资源个数,负数表示等待该种资源的进程个数
	PCB* pcbList; //等待该种资源的进程(PCB)列表
}

信号量的值仅由P、V操作来改变

原语:机器指令的延生,往往是为完成某些特定功能而编制的一段系统程序,其操作具有不可分割性(一次性完成)

查看更多...

分类:操作系统 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 671