writing-an-alsa-driver.pdf
Writing an ALSA Driver
Takashi Iwai
tiwai@suse.de
English version book
writing an alsa driver
在Linux中,先后出现了音频设备的两种框架OSS和ALSA,本节将在介绍数字音频设备及音频设备硬件接口的基础上,展现OSS和ALSA驱动的结构。
BREW开发技术文档
前言 11
认识手机的的存储区间 11
手机系统的组成 11
NOR 11
RAM 12
NAND 12
什么是BootLoader? 12
BootLoader 12
引导系统启动 13
下载BIN文件 13
关机充电 13
如何下载BootLoader 13
应用BIN数据区存在哪里? 13
BIN文件数据区 13
一般文件数据保存在哪里? 13
EFS文件系统数据。 13
NAND的数据存储区 13
USB盘区 14
软件开发人员需要做的工作 14
开发人员的工作流程 14
安装开发环境 14
安装VC6++开发工具 14
安装BREW3.15的开发环境 15
安装BUIW开发包 15
设备文件 15
环境变量 16
安装ARM编译器 16
安装调试工具 16
安装其它编译工具 16
安装USB驱动程序 16
应用基本规范 16
应用名称规范 17
应用名称 17
现在的目录状况 17
提示 17
模拟器的dll 17
dll应该小写 17
提示 18
mif文件和资源文件名称 18
mif文件 18
提示 18
应用的目录规范 18
一级目录 18
二级目录 18
注意 19
应用的.c和.h文件 19
文件名称格式 19
文件名称长度 19
文件内容 19
项目文件 19
开发环境的目录宏定义和环境变量定义 20
开发环境 20
错误的开发方式 20
如何设置开发环境 21
应用中的测试窗口 22
功能测试窗口 22
不显示功能窗口 22
开始应用开发 22
新建应用 22
使用VC6++向导 22
手工修改项目文件 23
BID和MIF文件 23
创建BID文件 23
定义宏名称和CLSID值 23
模拟器mif文件的作用 24
创建应用的mif文件 24
创建扩展对象的mif文件 26
通过mif文件设置应用或者对象是否可见 26
编译mif文件 27
VC编译应用 27
必须去掉警告信息 27
区分调试环境和手机环境 27
代码检查 28
设置模拟器应用 28
设置设备文件 29
模拟器调试应用 30
应用开发基本问题(初学者问答) 31
为什么启动不了应用 31
为什么创建对象总是失败 31
程序架构基本规范 31
程序结构标准化的需要 31
主程序结构不合理 31
窗口参数结构传递不合理 32
应用释放所有窗口过程不合理 33
主程序数据结构 34
窗口独立数据结构 34
窗口间参数传递 34
程序结构图示 34
数据结构规范 36
数据结构名称定义 36
结构的名称 36
公共的数据结构 36
曾经的问题 36
数据结构中内存注意事项 37
中英文版本内存不一样。 37
大数据量时内存重复使用问题 37
代码编码规范(简要) 37
编码基本事项 37
示例 38
调试信息问题 40
DBGPRINTF调试信息 40
写文件调试信息 40
调试信息不应该放的地方 40
程序内存和堆栈 41
程序总的可用内存 41
总的内存 41
误区 41
内存需求空间检查 41
应用需求内存检查 41
接口需求内存检查 41
函数内栈空间问题和错误rex.c 841 42
著名的841错误 42
使用数组的情况 42
数组改用指针 42
使用异步消息 42
入参使用指针 42
参数错误例子 43
中英文版本资源规范 43
版本目录和资源ID 43
版本资源文件 43
资源ID 43
载入过程 43
加速载入过程 44
调试环境和手机环境的资源 44
应用直接替换 44
OEM层替换 44
编译到BIN文件 44
下载到手机目录 45
优缺点 45
资源不可采用的方式 45
错误的资源处理方式 45
资源载入失败(ISHELL_LoadResString)现象。 46
文件路径错误。 46
数据缓冲区内存分配太小。 46
系统内部解析错误。 47
程序CLSID规范 48
CLSID是什么? 48
CLSID的定义 48
CLSID和BID文件的位置 48
应用引用CLSID 49
CLSID错误的做法 49
窗口和事件处理 49
应用程序组成和事件处理 49
基本组成 49
窗口消息和事件 50
事件传递过程 50
创建根窗口(ROOTFORM) 50
创建根窗口 50
释放根窗口 51
释放根窗口和注意事项 51
建议 51
白屏问题 51
白屏闪现问题 51
解决白屏问题 51
错误的解决方式 51
创建窗口 52
窗口和根窗口的关系 52
创建窗口对象 52
释放窗口 53
窗口处理 53
设置窗口处理函数(XXX_HandleEvent)和关闭窗口处理函数(XXX_FormDelete) 53
把窗口(FORM)加入根窗口(ROOTFORM) 54
把窗口从根窗口(ROOTFORM)移出来 54
窗口函数处理规范 55
窗口事件处理示例 56
窗口的其它事件 57
控件和事件处理 58
控件列表 58
控件、容器和窗口关系 59
与WINDOWS同类控件的区别 60
控件的基本属性 60
创建控件和使用控件 60
列表控件(LIST)使用和示例 60
容器控件(IXYCONTAINER) 65
比例容器 67
VIEWPORT控件 68
网格控件(GRID) 68
按钮(非标准) 68
显示图片控件 70
静态文本控件 70
TEXT控件 71
滚动条控件 73
菜单控件 73
CheckBox控件 73
TAB控件 73
Radio控件 73
如何把CheckBox和Static控件捆绑一起 75
引用计数问题。 75
认识引用计数 75
为什么这么强调引用计数 75
哪些操作增加了引用计数 76
哪些窗口减少了引用计数 79
替换控件默认函数 81
如何让静态控件响应焦点事件 82
控件响应点击事件的前提 82
如何修改默认函数 82
处理事件 82
焦点和5向键顺序 83
控件的焦点 83
键盘操作规则 83
5向键顺序 83
如何创建一个自定义控件 84
应用窗口规范 84
正常窗口 84
大小 84
按钮位置 84
应用菜单 84
编辑菜单 84
进度条窗口 84
进度条窗口的关闭和任务取消 84
进度条标题 84
内容或者进度显示 84
窗口大小 85
进度条按钮大小 85
进度条窗口的错误现象 85
半屏幕窗口 85
位置 86
按钮位置 86
全屏窗口 86
哪些应用使用了全屏窗口 86
设置全屏窗口 86
全屏窗口规范 86
应用内部 86
协同应用 86
程序<关于>版本号管理规范 86
程序版权规范 86
版权 86
作者和修改内容 87
程序划屏处理规范 87
135度斜线线划屏 87
90度斜线线划屏(改变私密状态) 87
应用该如何处理收到的私密消息 87
程序异常处理 88
程序异常意识 88
内存没释放 88
内存不足的异常 88
用户强制关闭应用的异常(AVK_END) 88
资源数据错误的异常 88
用户数据错误的异常 89
使用goto处理异常 89
正确使用goto语句 89
不要滥用goto语句 89
异常的提示信息 89
准确标题信息 89
准确的内容提示 89
准确的图标 89
程序互斥规范 90
程序自动化编译规范 90
程序宏定义规范 90
应用内部的宏定义 90
应用间的宏定义 91
宏定义的名称 91
调试信息规范 91
日志文件 91
日志文件的目录和大小。 91
否写日志 91
正式版本 91
QDXM调试信息 91
不要频繁打印调试信息 91
使用中文 91
内容准确不罗嗦 92
全局变量和__inline函数 92
全局变量 92
慎用全局变量 92
命名全局变量 92
修改全局变量 92
__inline函数 92
优缺点 92
哪些函数建议使用__inline 92
大数据量处理CPU时间限制 92
为什么不能使用FOR、WHILE连续处理大数据量 93
CPU时间限制 93
提示 93
使用ISHELL_POSTEVENT消息处理。 93
消息机制 93
处理消息位置 93
消息丢失问题 93
性能问题 93
休眠状态 93
使用ISHELL_SETTIMER 93
休眠挂起状态 94
解决系统休眠 94
取消定时器 94
定时器间隔周期 94
周期和暴力测试问题 94
ISHELL_Resume函数处理重复执行的过程 94
效率问题 94
休眠问题 94
取消回调 94
暴力测试问题 95
如何使用 95
带窗口的接口或对象规范 95
单实例对象 95
单实例对象优缺点 96
优点 96
缺点 96
多实例对象 97
多实例对象优缺点 97
数据安全 97
内存需求较大 97
应用程序更为复杂 97
更多的异常处理 97
释放更为麻烦 98
多实例对象的标准规范: 98
标准创建接口 98
标准Release接口 98
能被动态移出(_REMOVE) 98
能动态移出所有窗口 98
不能只移出一个顶部窗口 98
多窗口Release 98
对象内部有多个窗口 98
对象中还创建其它对象 98
内存 99
应用检查内存 99
对象需要检查内存 99
对象示例 99
应用程序和对象创建前 100
应用创建了对象后 100
把所有窗口都释放 100
先释放对象 100
释放函数示例 101
释放函数该处理过程 101
对象的数据 102
误区 102
ARM编译项 102
如何在把应用编译入手机BIN文件 102
把应用放到编译目录下 102
在OEMModTableExt.c文件中增加 102
在incpath.min文件中增加 102
在dmss_qsc60x0.mak文件中增加: 102
在dmss_objects.min文件中增加: 102
在dmss_rules.min中增加, 103
如何修改min文件 103
min文件的意义 103
增加C文件 103
注意事项 103
nand和nor的区别 103
设置文件系统区 103
性能优化 103
性能优化的需求 103
显示过程的优化 103
资源载入的优化 103
开发注意事项 104
如何在模拟上调试唤醒挂起 104
如何让系统不进入休眠状态 104
获取当前系统的背光值 104
取消背光 104
图示 104
UI界面应用和底层应用交互的过程 105
向底层注册回调函数 105
开始向底层写入数据 105
底层调用回调函数 105
更新数据和相关模块数据 105
从底层取消 105
图示 105
ClearCase上应该保存哪些文件 106
应用的源代码 106
应用完整的资源文件 106
应用的批处理文件 107
应用配置文件 107
完整的测试代码 107
误区 107
RELEASEIF和IWIDGET_Release的异同 107
共同点 107
区别 107
ModelListener的取消问题。 107
使用监听对象(ModelListener) 107
不取消监听对象可能产生的结果 107
注意 108
BPOINT1和BPOINT 3的错误。 108
内存泄露(BPOINT1) 108
内存重复释放(BPOINT3) 108
内存越界 109
内存问题的建议 109
采取的措施 109
OEM层不应该处理UI的事情 109
文件操作注意 109
不能同时对一个文件进行操作 109
树型文件夹问题 109
系统USB文件目录 110
T卡文件目录 110
编译环境下不应该有垃圾文件 110
mif文件中的项意义 110
提交版本前测试项 110
应用启动测试 111
干净环境的启动测试 111
丢失配置文件的启动测试 111
安全模式下的启动 111
编译应用和功能测试 111
提交版本前 111
自动化编译问题 111
修改注意的问题 112
启动速度测试 112
空记录启动的时间 112
满记录启动的时间 112
大数据量操作测试 113
载入数据需要的时间 113
删除所有数据需要的时间 113
满数据量下所有可能进行的操作 113
系统极度繁忙测试(暴力测试) 113
应用的暴力测试(单个应用) 113
系统繁忙的暴力测试(多个应用) 113
暴力测试的提示(更高的品质) 114
应用互斥测试 114
同时对T卡的写文件 114
同时对数据库的操作 114
占用内存测试(启动内存和最大内存) 114
内存稳定情况 114
空记录启动后占用的内存 114
满记录后启动占用的内存 114
所有窗口打开后占用的内存 114
使用过程是否有内存泄露 115
是否有BPOINT1和BPOINT3产生内存问题 115
操作响应速度 115
操作响应的速度 115
对数据库的操作响应速度(批删除、批增加) 115
对底层任务处理的响应速度 115
批删除文件,COPY文件的响应速度 115
系统时间测试 115
当前时间下正常情况 115
网络更换(如启动C网同步时间) 115
修改为1980年前情况 115
修改为2050年后的情况 115
时区改边的情况 116
待机测试 116
正常待机 116
强制待机 116
待机后来电和短信 116
挂起和唤醒测试 116
正常挂起和唤醒后 116
T卡插拔测试 116
是否产生系统崩溃 116
是否产生内存泄露等 116
是否文件丢失 116
是否应用执行失败 116
系统极度繁忙的时候是否更大几率产生问题 117
断网测试 117
强制关闭网络的测试 117
反复打开关闭应用的情况 117
新建默认项测试 117
默认标题 117
默认日期时间 117
Qualcomm Rex and L4 介绍
Rex (Real-Time Executive) Introduction
非常好用的键盘扫描程序 防抖 长按键
非常好用的键盘扫描程序 防抖 长按键,电子设计大赛时候编的