Tasklist
编程
C
文件结构
数据类型, const
变量的存储方法:
auto(默认) :动态变量
static :静态变量/函数。 如何实现仅限于本文件调用呢?
register :只有局部动态变量和形式参数可以作为register变量
extern :默认。
编译:
预处理 define include ifxxx
ATPCS
r0~r3 用于传参,r0用于返回值
r4~r11 通用变量寄存器,
r12 临时过渡寄存器
r13 堆栈指针
r14 连接寄存器
r15 PC
所以函数内的局部变量最好不要超过12个
1.2 Linux
1.3 Android
数据结构和算法
数据结构:计算机组织和存储数据的方式
逻辑结构:数据元素之间的前后关系
线性结构:一对一
- 线性表(顺序表、单链表)
- 栈(顺序栈、链栈)
- 队列
树状结构:一对多
二叉树、满二叉树、完全二叉树/线索二叉树 logn + 1
- AVL 平衡二叉树
- 红黑树
图形结构:多对多
- 邻接矩阵
- 邻接表
- 十字链表
物理结构:数据的存储关系
- 顺序结构
- 链式结构
- 索引结构
- 散列结构
算法
Data structure: List, array, stack, queue, tree, graph, hash, sorting, searching
算法:计算过程/计算步骤的序列,这些步骤将输入转化为输出/计算过程就是怎样达到所期望的I/O关系
算法分析:概率分析和随机算法/中值和顺序统计
算法设计:
排序和顺序统计: 堆排序/快速排序/计数排序/Bucket Sort
数据结构:
红黑树
高级设计与分析技术:动态规划/贪心法/平摊分析
排序
内部排序
插入排序:
直接插入排序: 时间复杂度:O(n^2).
希尔排序: 不稳定/时效分析很难
选择排序:
简单选择排序/二元选择排序: 时间复杂度:O(n^2).
堆排序: O(nlogn )
交换排序
冒泡排序
快速排序O(nlog2n)
归并排序
桶排序/基数排序: O(n + m * n/m*log(n/m)) = O(n + nlogn - nlogm)
外部排序
直接插入排序 折半插入排序 希尔排序
- 微机/计算机系统
程序结构和执行
a. 信息的表示和处理
b. 程序的机器级表示
c. 处理器体系结构
e. 优化程序性能
f. 存储器层次结构
在系统上运行程序
a. 链接
b. 异常控制流
c. 测量程序执行时间
d. 虚拟存储器
程序间的交互和通信
a. 系统级IO
b. 网络编程
c. 并发编程
ARM
ARM体系结构
V1、V2、V3、V4、V5、V6、V7、V8
存储器访问方式:
哈佛结构: 冯.诺伊曼:armv7
system mode: http://blog.chinaunix.net/uid-24227137-id-3398999.html
异常返回地址
1,假设当前是PC,PC-4,PC-8
2,发生IRQ异常,执行保护操作,LR中保存由于FIQ或IRQ占先而没有被执行的指令的地址(即有些资料上把这个地址写成PC或者当前地址,很费解甚至误解)的下一条地址
3,清空流水线
4,进入中断服务程序
5,待流水线填满,执行操作才被重新挂起(解释了ARM7为什么是0.9MIPS)
6,中断返回前,对LR处理,LR=LR-4,指向之前被清空的已译码但没被执行的指令的地址
7,清空流水线,返回
8,重新对丢弃的前一次已译码指令取指
9,待流水线满,开始继续执行
Compiling and Debugging
文件格式
BIN文件
- raw binary 文件,这种文件只包含机器码。
- 执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行
ELF文件
- 除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。
- 执行ELF程序则需要一个ELF Loader
编译工具
CC: Turn C/S into .o
LD: Link .o into ELF
OBJCPY: copy raw binary out. $(OBJCOPY) -O binary -R .note -R .comment -S xxx.elf xxx.bin
#将 xxx.elf 转换为 xxx.bin
#使用 -O binary (或--out-target=binary) 输出为原始的二进制文件
#使用 -R .note (或--remove-section) 输出文件中不要.note这个section,缩小了文件尺寸
#使用 -S (或 --strip-all) 输出文件中不要重定位信息和符号信息,缩小了文件尺寸
nm
- nm elf文件 #得到符号表
objdump
- objdump -D elf文件 #反汇编,且汇编代码与源码混排
- objdump -b binary -m powerpc uboot.bin #反汇编bin文件(机器码)
Linux编译后的文件格式
http://blog.chinaunix.net/attachment/201110/8/24148050_1318041180lm98.png
vmlinux ELF文件可用来调试
vmlinux.bin BIN文件,没直接用过
zImage/vmlinuz/bzimage
将vmlinux.bin压缩,并加上一段解压代码得到的
uImage
uboot专用的内核镜像,在zImage前加了一个64字节的头,描述内核版本、加载地址
生成时间,文件大小等等。 其0x40后的内容和zImage一样
它是由uboot的工具mkImage生成的。
JTAG
TDI
TDO
TRST
EN
TMS
软件工程
软件工程师使用工具、方法、程序和范例来增强他们软件产品的质量。他们的目标就是使用有效的富有成果的途径来产生有效的问题解决方案。
软件工程过程模型
瀑布模型(WaterfallModel)由一个阶段向另一阶段
V 模型
原型化模型
操作规格模型
转换模型
螺旋模型(spiralmldes):组合开发活动与风险管理以降低和控制风险
形式化方法
增量开发 迭代开发 敏捷方法
需求获取
需求类型 : 功能需求、 质量需求、 设计约束、 过程约束 需求定义 : 需求规格说明 :
用例图
电子信息
模拟电路 数字电路