我想在一个规范的公司里,产品技术说明书是必不可少的,写好一份技术说明书也是一个产品设计者必备的技能。
一份技术说明书应该涵盖哪几个点呢?
带着这个疑问,我查看了我现在所处公司技术说明书,并记录模板如下,这个模板虽然不能说覆盖一切产品,但我觉得也是相当来说比较全面的了。
XXXXXXXXXX接收机
技术说明书
xxx.xxx.xxxxx
XXXXXXXXXXXXXX
2011年3月
目 次
1 前言. 1
2 概述. 1
2.1 组成与用途. 1
2.2 主要技术指标. 2
2.3 外形尺寸、重量. 3
3 工作原理. 4
3.1 使用原理及特点. 4
3.2 主要分系统(分机)功能原理. 4
3.3总体电功能原理及总体控制电路原理. 8
3.4 总体机械传动原理. 9
3.5 关键(或重要)功能电路、结构功能原理. 9
3.6 关键器(部)件作用原理及工作原理. 9
4 接口关系. 9
4.1 内部接口关系. 9
4.2 外部接口关系. 10
5 产品成套. 13
5.1 成套设备. 13
5.2 随机文件. 14
5.3 备附件. 14
6. 附图. 15
2.1.1 产品组成
2.1.2 产品用途
2.2 主要技术指标 2.3 外形尺寸、重量 3 工作原理 3.1使用原理及特点 3.2 主要分系统(分机)功能原理3.3总体电功能原理及总体控制电路原理
3.4 总体机械传动原理 3.5 关键(或重要)功能电路、结构功能原理 3.6 关键器(部)件作用原理及工作原理 4 接口关系 4.1 内部接口关系 4.2 外部接口关系4.2.1主机对外接口关系
5 产品成套 5.1 成套设备 5.2 随机文件 5.3 备附件5.3.1 备件
5.3.2 附件
6. 附图
1.编写驱动程序(hello.c),并且把驱动程序放在linux-2.6.38/drivers/char下。
#include<linux/module.h>
#include<linux/init.h>
static int __init hello_init(void)
{
printk(KERN_ALERT"hello world\n");
return0;
}
static void __exit hello_exit(void)
{
printk(KERN_ALERT"good bye,world\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("BQL");
2.把hello加入内核代码树,并编译
Step1:编辑配置文件Kconfig,加入驱动选项,使之在makemenuconfig的时候出现
打开linux-2.6.38/drivers/char/Kconfig文件,添加如下所示:
config HELLO_WORLD_MODULE
tristate"This is an example of hello world "
depends on CPU_S3C6410
defaulty
help
This is an example of hello world
保存退出,这时在linux-2.6.38目录位置运行一下make menuconfig就可以在 Device
Drivers---> Character devices菜单中看到刚才所添加的选项了,按下空格键将会选择为<M>,
此意为要把该选项编译为模块方式;再按下空格会变为<*>,意为要把该选项编译到内核中,在此选择<M>表示模块形式加载驱动。
Step2:通过上一步,虽然可以在配置内核的时候进行选择,但实际上此时执行编译内核还是不能hello.c编译进去的,还需要在Makefile中把内核配置,选项和真正的源代码联系起来,
打开linux-2.6.38/drivers/char/Makefile,
如下添加并保存退出:
obj-$(CONFIG_HELLO_WORLD_MODULE)+=hello.o
Step3:这时回到linux-2.6.38源代码根目录位置,执行makemodules,就可以生成所需要的内核模块文件hello.ko了,注意:执行makemodules之前,必须先执行makezImage,只需一次就可以了。至此,已经完成了模块驱动的编译。
3.把Hello下载到开发板并安装使用
在此使用 ftp命令把编译出的hello.ko下载到板子中,并把它移动
到/lib/modules/2.6.38-FriendlyARM目录然后在板子中现在执行
#modprobe hello
可以看到该模块已经被装载了(注意:使用modprobe命令加载模块不需要加“ko”尾
缀)
再执行以下命令,可以看到该模块被卸载
#rmmod hello
注 意 :要 能 够 正 常 卸 载 模 块,必 须 把 模 块 放 入 开 发 板 的
/lib/modules/2.6.38-FriendlyARM目录
另外需要注意的是:因为内核有时会升级更新,如果内核版本已经改变,请依
照具体的内核版本重新建立一个模块存放目录,在此为/lib/modules/2.6.38-FriendlyARM
-
通过wlw发布在我的博客funba.cn
希望csdn能重新支持wlw
Epublib是一个用于处理epub文件的java类库,可以对epub文件进行读写处理;而且提供了一个阅读器,可以直接运行(java -jar 方式),并可以打开epub类型的文件进行阅读。
http://www.siegmann.nl/epublib/getting-started
按http://www.siegmann.nl/epublib/example-programs/epub-sample-simple1运行示例时,发现几个问题,在此说明下(目前最新的是3.1)
1、这个例子在epublib-core\src\examples\java\nl\siegmann\epublib\examples下,如果自己在eclipse里新建项目,需要把epublib-core\src\test\resources\book1复制到你代码所在的Source folder下,
当然也可以自己改代码,不过目的是快速测试下epublib的可用性,第一步工作就力求简单了。
2、运行报错,
Exception in thread "main" java.lang.NoClassDefFoundError: org/xmlpull/v1/XmlPullParserFactory
at nl.siegmann.epublib.epub.EpubProcessorSupport.createXmlSerializer(EpubProcessorSupport.java:79)
at nl.siegmann.epublib.epub.EpubProcessorSupport.createXmlSerializer(EpubProcessorSupport.java:73)
at nl.siegmann.epublib.epub.NCXDocument.createNCXResource(NCXDocument.java:182)
at nl.siegmann.epublib.epub.NCXDocument.createNCXResource(NCXDocument.java:178)
at nl.siegmann.epublib.epub.EpubWriter.initTOCResource(EpubWriter.java:67)
at nl.siegmann.epublib.epub.EpubWriter.write(EpubWriter.java:51)
at outfox.cps.epub.Simple1.main(Simple1.java:56)很明显是NoClassDefFoundError,实际是没有引入依赖包kxml2
实际在mvn package时,已经下载了,可以打开epublib-core\pom.xml查看如下代码,
<dependency>
<groupId>net.sf.kxml</groupId>
<artifactId>kxml2</artifactId>
<version>2.3.0</version>
</dependency>下载目录是你的m2的repository目录
C:\Users\Administrator\.m2\repository\net\sf\kxml\kxml2\2.3.0
将kxml2-2.3.0.jar引入工程,再运行ok
3、生成的epub文件直接打开是乱码,需要用epub阅读器打开,Epublib自带了一个阅读器,
通过epublib-tools\target\epublib-tools-viewer-3.1.jar打开生成的epub文件即可