【学习笔记】嵌入式三级
目录:
- 嵌入式系统
- CPU:
- 开发过程
- JTAG
- ARM/Advanced RISC Machines
- USB:
- S3C2410
- 实时操作系统
- **uC/OS-IIS**
- VxWorks
- Linux
- Linux与Unix
- Android
- 开源嵌入式操作系统
- GUN开发工具
- UART通用异步收发器
- Soc
- RS-232 RS-485
- 网络
- 以太网
- 路由器
- CAN总线
- 存储器
- 其他
- 汇编
- ARM的六大类指令集---LDR、LDRB、LDRH、STR、STRB、STRH
- LDR指令LDR指令的格式为:
- LDRB指令
- LDRH指令
- LDM指令:
- STR指令STR指令的格式为:
- STRB指令STRB指令的格式为:
- STRH指令STRH指令的格式为:
- STM指令:
- BL
嵌入式系统
CPU:
- 范围: 4、8、32、64位
- 特点
- 支持实时处理
- 低功耗
- 结构可扩展
- 集成了测试电路
- 嵌入式处理器分类
- 按指令集:CISC复杂指令集和RISC精简指令集(arm);
- 按存储机制:哈佛结构和冯.诺依曼结构
- 哈佛结构是一种程序指令储存和数据储存分开的存储器结构,
- ARM7 冯.诺依曼结构,3级流水线
- 冯·诺依曼结构是一种将程序指令存储器和数据存储器合并在一起的存储器结构
- ARM9 5级流水线
- 哈佛结构是一种程序指令储存和数据储存分开的存储器结构,
- 按软硬件技术复杂度:低端、中端、高端系统
- 字长:8、16、32、64
- cortex-M3是哈佛结构。
- 主要使用:ARM、DSP、FPGA
- 嵌入式最小硬件系统:嵌入式处理器、时钟电路、电源电路、复位电路、存储器和调试测试接口
开发过程
需求分析与规格说明、系统设计、构件设计、系统集成与测试
JTAG
- 大多数嵌入式CPU、DSP、FPGA都支持JTAG标准
- 该标准中规定的TAP接口具有5根信号线:TCK、TMS、TDI、TDO、TRST。
ARM/Advanced RISC Machines
ARM11后改名Cortex,并分为A、R、M三个系列
- A:面向尖端的基于虚拟内存的操作系统和用户应用
- R:实时系统
- M微控制器
AMBA总线规范
- AMBA是ARM公司公布的总线协议,用于连接和管理片上系统中功能模块的开放标准和片上互连规范。
- AMBA总线协议——先进微控制器总线结构(Advanced Microcontroller Bus Architecture)(一种开放式总线结构)
- AMBA是ARM公司发布的总线协议,用于连接和管理片上系统(SoC)中功能模块的开放标准和片上互连规范
- 从1995的AMBA1.0到目前的AMBA4.0共四个版本
- ARM7采用AMB1 ,ARM9采用AMBA2
- 外围总线:GPIO、UART、SPI、I2C、USB、AD/DA、
单周期工作、采用加载/存储指令访问内存、指令流水线技术
ARM共有37个寄存器,包括31个通用寄存器和6个状态寄存器,所有的通用寄存器均为32位结构,既可以存放数据也可以存放地址。
R0-R15 通用寄存器,32位
- R13 堆栈指针SP; (也可以用作通用数据寄存器)
- R14程序链接寄存器 LR;
- R15 程序计数器PC
处理器可以工作在3个模式下
- ARM状态:32位指令(复位进入)
- 处理器进行异常处理的时候,从异常向量地址开始执行,自动进入ARM状态
- Thunb和Thumb-2状态:Thunb状态是ARM执行16位指令,新的Thumb-2内核技术兼有16位和32位指令长度。
- 关外部中断:CPSID I
- 开外部中断:CPSIE I
- 调试状态
- 注:通过BX指令ARM状态和Thumb状态是可以互相切换的。
- ARM状态:32位指令(复位进入)
采用系统总线和外围总线两层结构构成片上系统
- 系统总线:连接高带宽快速组件。
- 外围总线:低速外围组件、速度不高的外部接口,包括定时器、并行接口和串行接口。
7种异常以及相应优先级:复位RESET、未定义指令UND、软件中断SWI、指令预取中止PABT、数据访问中止DABT、外部中断请求IRQ、快速中断。
CPSR:当前程序状态寄存器,包含条件标志位、中断禁止位、当前处理器模式标志位及其他控制和状态位。
大端模式:数据高位保存在低地址,数据低位保存在高地址。
小端模式:数据高位保存在高地址ARM处理器片内程序存储器通常使用SRAM
USB:
- 热拔插
- USB2.0 采用半双工差分方式 4根信号线
- USB2.0速度为480Mb/s,USB3.0速度为640Mb/s
- USB OTG的作用是可以摆脱主机完成点对点通讯,实现没有主机下从设备的之间的数据传送。
S3C2410
- 是三星公司基于ARM920T核的
- 中高档32位嵌入式微处理器
- 哈佛
- 高速组件采用AHB总线,低速外设接口采用APB总线,通过AHB总线连接
- 电源管理模块有四种模式:正常模式、慢速模式、空闲模式、和掉电模式
实时操作系统
- 强实时嵌入式操作系统(us,ms):VxWorks、pPOS、uC/OS-II
- 微内核结构的嵌入式操作系统:Symbian VxWorks QNX uC/OS-II iOS
- 7个特征:异步IO和中断处理能力、任务切换时间和中断延迟时间的确定、优先级中断和调度、抢占式调度、内存锁定、连续文件、同步。
- 任务时限
- 截止时间:任务开始至此那个时间到任务必须完成的时间间隔
- 任务执行预设时间:无中断响应情况下任务最快执行时间
- 响应时间:中断延迟时间和任务切换时间
- 实时指标:响应时间、吞吐量、生存时间
- 引导/自举 ->引导(加载)程序:加电自检、外设存在自检、内存地址映射、初始化外围设备、内存寻址定位、加载并启动操作系统。
uC/OS-IIS
- 抢占式实时操作系统
- 允许中断嵌套,可达255层
- 基本不包含设备驱动程序,只是一个纯内核。
- 64个任务(保留8个任务给系统,用户编写的应用程序最多可以有56个任务)
- 每个任务的优先级不用,不支持时间片轮询。
- 保护任务之间共享数据和提供任务之间的通信
- 利用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITCAL()来关闭中断和打开中断;
- 利用函数OSSchedLock()和OSSchedUnlock对任务调度函数上锁和开锁;
- 利用信号量、互斥信号量、邮箱和消息队列进行任务间通信
- 内核提供:任务调度,任务间通讯与同步,任务管理,时间管理和存储管理
- OSTaskCreat()创建函数
- OSStart()启动多任务调度
- OSSemCreate OSMutexCreate OSMboxCreate OSQCreate 事件控制块创建
- 一些系统文件
- OS_CPU_C.C - 创建任务的自用栈空间、定义用户接口的hook原型
- OS_CORE.C - 核心调度代码,包括系统初始化、启动多任务调度开始运行、任务创建管理与调度、TCB初始化、就绪表初始化、ECB初始化、任务事件就绪表、空闲任务
- OS_MEM.C - 内存管理,包括创建分区,获得存储块
- OS_TASK.C - 任务管理,包括改变一个任务的优先级、创建或者删除一个任务,恢复一个被挂起的任务
- 调度的三个条件
- 所有的中断服务程序均已经执行完毕
- 调度没有被禁止
- 任务就绪表中查找到的最高优先级任务的优先级比当前运行任务的优先级高
- 任务间通信:信号量、互斥信号量、邮箱、消息队列、
- 状态:休眠、就绪、运行、挂起、被中断
VxWorks
- 抢占式实时操作系统
- 大型商用操作系统,不属于开源操作系统
Linux
主要由用户进程、OS服务组件和Linux系统内核组成
Linux内核主要由5个系统组成,进程调度、内存管理、虚拟文件系统、网络接口、进程间通信。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nCo8gY8w-1570630080541)(en-resource://database/1294:1)]Bootloader的工作步骤:
- 初始化处理器及外设的硬件资源配置
- 建立内存空间的映射关系,使能MMU,将系统的外存和内存地址变换激活,为最终调用操作系统内核做好准备
- 装载操作系统映像到内存
- 对Flash存储器编程
- 运行操作系统
- 传递系统启动参数
- 命令行解析和输入输出控制
Linux与Unix
- Unix之父:Dennis MacAlistair Ritchie (丹尼斯·里奇)(C语言之父)
- Linux是以Unix为原型的一种“类Unix”的操作系统
- Linux与Unix两者源码是完全不相同
- 函数和命令的功能处理结果、函数名称和参数大体相同
- Unix的行命令、驱动程序和应用程序在Linux上能够运行。
- Linux运行效率没有Unix高
Android
- 是一种以Linux为基础的半开放源代码操作系统,主要用于移动便携设备
- 如果使用不同的软件开发包,则使用的编程语言也不同
开源嵌入式操作系统
uCLinux 、RTLinux 、uC/OS-IIS
GUN开发工具
- GCC编译器
- GDB调试工具
- 要对某应用程序进行调试,则在编译该应用程序时,要在编译命令中加入参数**-g**
- 通用公共许可协议
- 生成a.out文件
UART通用异步收发器
- RS-232:无法消除共模干扰,通讯距离15m左右
- RS-485:差分信号传输方式,强抗共模干扰,距离1200m
Soc
- 分类:专用和通用;通用中,包含多核和单核。
- 按制作工艺分类:定制芯片和现场可编程芯片。
- 包含电路:数字电路、模拟电路、数字/模拟混合电路、射频电路
RS-232 RS-485
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e1ij39b0-1570630080543)(en-resource://database/1322:1)]
网络
- 无线方式接入互联网的技术:
- 无线局域网 (WLAN 或WiFi)/必须在安装有接入点(AP、热点、WiFi)
- GPRS移动电话网
- 3G移动电话网
- IP
- 地址分类:A、B、C三个基本类,D(组播地址)和E(备用地址)
- C类地址范围192.0.0.1-223.255.255.254,第1、2、3字节为网络地址,第4字节为主机地址(最多254台计算机),适用小规模的局域网。
- WLAN(无线局域网)
- 无线局域网的主要通信协议:IEEE 802.11(俗称WiFi)
- 802.11n
- 传输速率:11Mbps、54Mbps、108Mbps
- 无线局域网的主要通信协议:IEEE 802.11(俗称WiFi)
以太网
- 以集线器或交换机为中心构成。
- 以太网数据帧:前导码(7字节)、帧起始定界符(1字节)、目的MAC地址(6字节)、源MAC地址(6字节)、类型/长度
- 以太网是实现LAN(Local Area Network)的一种技术,它允许嵌入式系统连接到一个LAN中,并可通过使用网关经Internet连接到外部世界
- 以太网的主要目的是向LAN发送和从LAN接收以太网帧
- 在TCP/IP协议族中,不包括以太网协议,可以理解它为TCP/IP中的网络接口层(物理层和数据链路层),为TCP/IP中的上层协议(比如:IP协议和ARP协议)提供服务
路由器
- 工作在网络层,遵循IP协议把异构网络互相连接起来
- 功能:网络互连、数据处理、网络管理
CAN总线
- Controller Area Network(控制器局域网络 )
- 抗干扰能力强、传输距离远、适应于多主系统,广泛应用于汽车、船舶等
- 传输时,高位在前,低位在后
- 传输线采用双绞线,这样使每根线上的干扰均等,通过差分,即可完全消除共模干扰
- 仅需两根线,CANH和CANH相连,CANL和CANL相连
CAN_H-CAN_L < 0.5V 时候为隐性的,逻辑信号表现为"逻辑1"- 高电平
CAN_H-CAN_L > 0.9V 时候为显性的,逻辑信号表现为"逻辑0"- 低电平 - S3C2440和S3C2410均没有CAN控制器,则要外加CAN控制器和CAN收发器。可选用串行SPI接口的CAN控制器,也可选用并行接口的CAN控制器作为CAN总线控制器接口
存储器
- 半导体存储器芯片的存储容量取决于该芯片的地址总线的条数和数据总线的位数
- 存储器带宽与存储器总线的工作频率有关,也与数据线的位数和每个总线周期的传输次数有关
- 系统正在运行的程序的大部分数据和代码存放在**主存储器(内存)**中
- 系统尚未运行的程序的大部分数据和代码存放在外部存储器中
- 对于内存而言,1KB=1024B;对于外存(磁盘、U盘)容量而言,1KB=1000B。
- 分类
- 按照存取特性分为:RAM和ROM
- 按照物理位置分为:片内存储器和片外存储器以及外部存储器
- 按照存储信息的类型分为:程序存储区和数据存储器
- Cache
- 高速缓冲区
- 规模较小,但速度很高的存储器
- 通常由SRAM(Static Random Access Memory 静态存储器)组成
- 它是位于CPU与内存间的一种容量较小但速度很高的存储器
- FLASH
- Flash闪存有两大类,*或非型(NOR Flash)和与非型(NAND Flash)
- 或非以字节为单位进行随机存取,存储在里面的程序可以被CPU执行。与非以页为单位进行存取,速度较前者慢。
- 与非门读出程序或数据时,是先将其预存入RAM,然后才被使用的。虽然速度较慢,但是其寿命,容量成本等方面有很大优势,常用的U盘、数码相机基本都是NAND Flash
- NOR Flash ROM的特点是以字节为单位随机存储,写入和擦除速度慢
- NAND Flash ROM以页(行)为单位随机存取,在容量、使用寿命和成本方面有较大优势
- RAM
- RAM - 高速读取, DRAM - 高集成度(易丢失)
- RAM 通常又有DRAM和SRAM之分,SRAM较DRAM电路复杂,但是速度更快,高速缓冲区(cache)就是典型的SRAM,SRAM的复杂决定了它做不大,一般最大几十K
- FRAM - 铁电随机存取存储器,MRAM - 磁性随机存取存储器(两者都为随机存储器是非易失性存储器)不属于半导体存储器
- MRAM:非易失性,拥有SRAM的高速存取能力,以及DRAM的高集成度
- FRAM:非易失性、高速随机读写
- NOR RAM(以字节为单位随机存储)、NAND RAM(以行/页为单位随机存储)
- DDR
- DDR - dual data rate - 双倍数据速率
- DDR2 - 使原来DDR可预取读取2位变成可预取读取4位或8位,把DDR的数据传输速率又提升了两倍或四倍
其他
- 一个汉字占两个字节
- 汉字编码国家标准 GB2312 GB18030
- GB2312 国际字符集中包含3755个一级常用汉字和3008个二级常用汉字,682个图形符号
- GB18030 字符集与国际标准UCS/Unicode字符集基本兼容,采用双字节编码表示汉字。
- UCS/Unicode在表示汉字时有两种不同的编码方案。
- 我国有线数字有线电视和卫星电视传输时采用的压缩编码标准是MPEG-2.
- ASCII字符集共有128个字符,包括96个可打印字符和32个控制字符。
- 图像数据量=图像水平分辨率图像垂直分辨率像素深度/8
- 触摸屏
- 电阻式:硬屏、专用硬笔写字
- 电容式 :多点触摸、滑动操作
汇编
ARM的六大类指令集—LDR、LDRB、LDRH、STR、STRB、STRH
— LDR 字数据加载指令— LDRB 字节数据加载指令— LDRH 半字数据加载指令— STR 字数据存储指令— STRB 字节数据存储指令— STRH 半字数据存储指令
LDR指令LDR指令的格式为:
LDR{条件} 目的寄存器,<存储器地址>
LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取32位的字数据到通用寄存器,然后对数据进行处理。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。
指令示例:
- LDR R0,[R1];
将存储器地址为R1的字数据读入寄存器R0。 - LDR R0,[R1,R2] ;
将存储器地址为R1+R2的字数据读入寄存器R0。 - LDR R0,[R1,#8];
将存储器地址为R1+8的字数据读入寄存器R0。 - LDR R0,[R1,R2] ! ;
将存储器地址为R1+R2的字数据读入寄存器R0,并将新地址R1+R2写入R1。 - LDR R0,[R1,#8] !;
将存储器地址为R1+8的字数据读入寄存器R0,并将新地址R1+8写入R1。 - LDR R0,[R1],R2 ;
将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2写入R1。 - LDR R0,[R1,R2,LSL#2]! ;
将存储器地址为R1+R2×4的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。 - LDR R0,[R1],R2,LSL#2 ;
将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。
LDRB指令
LDRB指令的格式为:LDR{条件}B 目的寄存器,<存储器地址>
LDRB指令用于从存储器中将一个8位的字节数据传送到目的寄存器中,同时将寄存器的高24位清零。该指令通常用于从存储器中读取8位的字节数据到通用寄存器,然后对数据进行处理。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。
指令示例:
- LDRB R0,[R1] ;
将存储器地址为R1的字节数据读入寄存器R0,并将R0的高24位清零。 - LDRB R0,[R1,#8] ;
将存储器地址为R1+8的字节数据读入寄存器R0,并将R0的高24位清零。
LDRH指令
LDRH指令的格式为:LDR{条件}H 目的寄存器,<存储器地址>
LDRH指令用于从存储器中将一个16位的半字数据传送到目的寄存器中,同时将寄存器的高16位清零。该指令通常用于从存储器中读取16位的半字数据到通用寄存器,然后对数据进行处理。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。
指令示例:
- LDRH R0,[R1] ;
将存储器地址为R1的半字数据读入寄存器R0,并将R0的高16位清零。 - LDRH R0,[R1,#8] ;
将存储器地址为R1+8的半字数据读入寄存器R0,并将R0的高16位清零。 - LDRH R0,[R1,R2] ;
将存储器地址为R1+R2的半字数据读入寄存器R0,并将R0的高16位清零。
LDM指令:
L的含义仍然是LOAD,即是Load from memory into register。虽然貌似是LDR的升级,但是,千万要注意,这个指令运行的方向和LDR是不一样的,是从左到右运行的。该指令是将内存中堆栈内的数据,批量的赋值给寄存器,即是出栈操作;其中堆栈指针一般对应于SP,注意SP是寄存器R13,实际用到的却是R13中的内存地址,只是该指令没有写为[R13],同时,LDM指令中寄存器和内存地址的位置相对于前面两条指令改变了。
- LDMFD SP! , {R0, R1, R2}
实际上可以理解为: LDMFD [SP]!, {R0, R1, R2}意思为:
把sp指向的3个连续地址段(应该是3*4=12字节(因为为r0,r1,r2都是32位))中的数据拷贝到r0,r1,r2这3个寄存器中去。
STR指令STR指令的格式为:
STR{条件} 源寄存器,<存储器地址>
STR指令用于从源寄存器中将一个32位的字数据传送到存储器中。该指令在程序设计中比较常用,且寻址方式灵活多样,使用方式可参考指令LDR。
指令示例:
- STR R0,[R1],#8 ;
将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。 - STR R0,[R1,#8] ;
将R0中的字数据写入以R1+8为地址的存储器中。
STRB指令STRB指令的格式为:
STR{条件}B 源寄存器,<存储器地址>
STRB指令用于从源寄存器中将一个8位的字节数据传送到存储器中。该字节数据为源寄存器中的低8位。
指令示例:
- STRB R0,[R1] ;
将寄存器R0中的字节数据写入以R1为地址的存储器中。 - STRB R0,[R1,#8] ;
将寄存器R0中的字节数据写入以R1+8为地址的存储器中。
STRH指令STRH指令的格式为:
STR{条件}H 源寄存器,<存储器地址>
STRH指令用于从源寄存器中将一个16位的半字数据传送到存储器中。该半字数据为源寄存器中的低16位。
指令示例:
- STRH R0,[R1] ;
将寄存器R0中的半字数据写入以R1为地址的存储器中。 - STRH R0,[R1,#8] ;
将寄存器R0中的半字数据写入以R1+8为地址的存储器中
STM指令:
S的含义仍然是STORE,与LDM是配对使用的,其指令格式上也相似,即区别于STR,是将堆栈指针写在左边,而把寄存器组写在右边。
- STMFD SP!, {R0}
同样的,该指令也可理解为: STMFD [SP]!, {R0}意思是:把R0保存到堆栈(sp指向的地址)中。
BL
子程序调用
子程序返回调用程序指令 MOV PC,LR
【学习笔记】嵌入式三级相关推荐
- 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...
注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...
- 系统架构师学习笔记-嵌入式系统
目录 嵌入式系统概论 嵌入式操作系统 嵌入式系统概论 嵌入式系统定义: 嵌入式系统是一种"完全嵌入受控器件内部,为特定应用而设计的专用计算机系统".嵌入式系统是一种以应用为中心,以 ...
- 百问网七天物联网课程学习笔记——嵌入式
首先谈谈什么是嵌入式,官方的定义是这样的:嵌入式系统是以应用为中心,以现代计算机技术为基础,能够根据用户需求(功能.可靠性.成本.体积.功耗.环境等)灵活裁剪软硬件模块的专用计算机系统.在我看来,嵌入 ...
- 嵌入式学习笔记之XMODEM
背景 由于在实验环境中使用串口监视和控制,同时实验开发板处在一个密闭的环境中,不能随意插入usb来拷贝设备,这个时候如果想要在电脑和开发板中传输数据存在问题,下面我把自己使用的xmodem的使用方法写 ...
- 嵌入式linux 添加中断,《嵌入式linux应用程序开发完全手册》中断控制器操作(外部中断)学习笔记...
<嵌入式linux应用程序开发完全手册>中断控制器操作(外部中断)学习笔记 一.ARM中断体系 当一个"异常"发生时,或者说当收到一个中断触发信号时,ARM9将会自动完 ...
- 嵌入式知识-ARM裸机-学习笔记(2):利用GPIO来控制LED(附mkv210_image.c文件解析)
嵌入式知识-ARM裸机-学习笔记(2):利用GPIO来控制LED(附mkv210_image.c文件解析) 首先声明该博客是针对朱有鹏老师的嵌入式课程进行笔记的总结. 一.通过GPIO控制点亮LED( ...
- 嵌入式开发学习笔记9-做一个好玩的LED闪烁
嵌入式开发学习笔记9-做一个好玩的LED闪烁 前言 实际操作 程序功能 实现思路 程序源码 实现效果展示 前言 LED小灯闪烁实质是控制单片机上的I/O口,通过向I/O口循环输入高低电平,从而控制LE ...
- 嵌入式之uboot源码分析-启动第一阶段学习笔记
注: 以下的内容来自朱老师物联网大讲堂uboot部分课件 Uboot启动第一阶段start.S执行步骤 1.头文件包含 <config.h>(x210的各种宏定义) <version ...
- 嵌入式学习笔记——ADC模数转换器
ADC模数转换器 前言 ADC介绍 ADC概述 ADC的数量 ADC的特性 ADC框图 芯片外部框图 芯片内部框图 转换部分框图 状态输出部分 条件触发框图 寄存器介绍 编程思路 模式选择 规则通道的 ...
- 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言
嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...
最新文章
- Oracle 表分区删除操作
- java curator_[java,zk]在 linux 上快速搭建 zookeeper curator 开发环境
- 打造一个实用的Ubuntu Linux
- 【程序员感悟系列】 由一点业务说开去
- 2018美团CodeM编程大赛 Round A Problem 2 下棋 【贪心】
- python redis订阅_Python 学习笔记 - Redis
- eclipse内存设置,tomcat内存设置,查看内存大小
- 微软VC/MFC FAQ(转)
- 蛋白质分子量检测服务
- shell脚本中 EOF的意思
- mysql analyze table_MySQL ANALYZE TABLE
- 网络诊断,浏览器不能上网,其他软件都能上网
- 28个在线游戏编程学习网站
- 文本数据下的用户画像
- Building dependency tree… Done Package aptitude is not available, but is referred to by another pac
- android手机如何访问电脑tomcat服务器
- Android之View提升:四 使用ExpandableListView 折叠显示
- 一个int类型到底占多少个字节?
- python自动战斗文字小游戏
- LintCode 题目:LintCode的使用以及A + B 问题
热门文章
- [论文笔记]Combining V2I with V2V Communications for Service Continuity in Vehicular Networks
- Java复习知识点(概念与代码)
- Android 9 (P)之init进程启动源码分析指南之三
- Google C++编程风格指南阅读笔记之命名、注释和格式
- Andriod 真正意义上的唤醒第三方应用(只需要知道包名即可)
- python优雅代码大全_10个Python技巧帮你写出更优雅的代码
- 计算机课程设置图片,《计算机图形图像处理》课程简介
- 古今之成大事业、大学问者,必经过三种之境界
- 服务器显示无internet,为何我可以上网,但却显示无internet访问
- 社区团购讲堂之精耕细作的互联网下半场,社区团购将改变实体商超格局?...