![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式学习笔记
QCZTZSWT357
机器生汇编,汇编生C,C生万物……
展开
-
内存数据手册中的一些计算
容量为 1Gbit 的内存芯片的方框图如上:8 个 bank,bank 的寻址线 3 根。位宽为 16bit。行地址线有 13 根,列地址线有 10 根,因为行列地址复用,所以地址线的需要 13 根,而不是 23 根。需要知道的是:内存芯片的地址线是行列地址复用的,当内存控制器收到一个地址后,会将该地址转换为行列地址,先发送行地址,然后发送列地址。读写对应处的数据。总容量:1Gbit ...原创 2019-12-07 21:48:56 · 665 阅读 · 0 评论 -
ARM中断处理过程
原创 2019-11-08 20:57:49 · 248 阅读 · 0 评论 -
UBI 笔记
UBI uses an abstract model of flash. In short, from UBI’s point of view the flash (or MTD device) consists of eraseblocks, which may be good or bad. Each good eraseblock may be read from, written to...原创 2019-10-22 22:59:21 · 831 阅读 · 0 评论 -
UART
通用异步收发传输器(Universal Asynchronous Receiver and Transmitter),通常称作UART,UART通信在工作中相当常见,属于异步通信,通信的双方不需要同步时钟,与之不同的是:IIC和SPI,它们是同步通信,通信的双方需要时钟线。在很多的SOC内部都集成了UART,由两部分组成:一个将串行比特流转换成微处理器可以使用的并行数据接收器(Rx)和一个将来自...原创 2019-10-19 16:12:27 · 339 阅读 · 0 评论 -
IIC 总线
IIC总线上的三种信号类型开始和结束信号应答信号一个字节的传输看着这样的时序图的时候,有一个暗线:时间。既然叫“时序图”,那么时间是隐藏在图中的很重要变量,所以从左到右,随着时间的流逝,首先发送的数据是MSB,最后发送的是LSB。IIC协议内容首先区分下面几个名词MASTER (主机)SLAVE (从机)TRANSMITTER (发送方)RECEIVER (接收...原创 2019-10-17 23:12:34 · 860 阅读 · 0 评论 -
正整数和字符串之间的转换
好了咯#include void printdec(unsigned int num){ if (num >= 10) { printdec(num /10); } putchar(48 + num % 10); }int printdec2str(unsigned int num, char *p){ in原创 2017-06-27 10:57:12 · 1975 阅读 · 0 评论 -
计算机使用补码的原理
下面的截图来自书《计算机组成与体系结构》中第九章的相关内容:更多的内容参考下面的博客,已经被大牛们解释的很清楚了。参考来源: http://blog.csdn.net/woailuo453786790/article/details/51427847 https://www.zhihu.com/question/30395946 http://www.cnblogs.com/zhangziqi原创 2017-06-14 10:11:08 · 367 阅读 · 0 评论 -
第一个程序“Hello World !”
预处理阶段:(1.宏定义展开 2.头文件包含 3.条件编译) gcc hello.c -o hello.i -E编译阶段:(将c文件(.c)编译得到汇编文件(.s)) gcc hello.i -o hello.s -S汇编阶段:(将汇编文件(.s)文件汇编得到二进制目标文件) gcc hello.s -o hello.o -c链接阶段:(链接得到二进制可执行文件) gcc hello.o原创 2017-06-13 11:34:25 · 357 阅读 · 0 评论 -
LINUX基础操作
路径绝对路径与相对路径绝对路径:路径是从绝对位置开始的。譬如Windows中从某一个盘符开始(C:\),linux中从根目录/开始相对路径:指明路径的时候,是从当前所在的位置开始的D:\winshare\enum.c 全路径 pathname D:\winshare 路径 path enum.c 文件名 name原创 2017-06-12 20:10:54 · 329 阅读 · 0 评论 -
指针与数组的理解
写在前面C标准规定了C语言的语法,但对于语法的理解记忆却可以千差万别,只要自己的理解能够在C语言语法正确的前提下自圆其说就好。关于下文的理解方法,欢迎批评指正。1、指针变量的两个要点 一个指针变量,有两个要点:a) 指针指向的目标类型。b) 指针变量中的地址值 两个指针类型的变量,当它们的目标类型和存储的地址值相等时,则这两个变量参与运算时,具有相同的效果。可以认为它们是同一个“东西”。原创 2017-06-24 14:48:09 · 508 阅读 · 0 评论 -
C语言中不同类型数据之间的赋值
整数与整数之间一、长度相等(在内存中存储的位数相等)的两个不同的类型的数据之间的赋值 在计算机中的存储内容不变,只是数据按照不同的编码格式来解析。二、长 赋值给 短 (短 = 长) 截取低位,然后按照短整数的数据类型解析。三、短 赋值给 长 (长 = 短)其中,短转长又分为三种情况: 1. 两个数据都是无符号的数据,短整数直接高位补0。 2. 两个数据都是有符号的数据,短整数进行符号原创 2017-06-14 11:06:38 · 12330 阅读 · 1 评论 -
scanf用法及scanf中有\n的问题
文章转载自[传送门](http://blog.csdn.net/weiweicsdn1/article/details/52185453)想象输入设备(键盘)连接着一个叫“缓冲”的东西,把缓冲认为是一个字符数组。当你的程序执行到scanf时,会从你的缓冲区读东西,如果缓冲区是空的,就阻塞住,等待你从键盘输入。现在假设你的缓冲区里有:abcd\n1234\n (其中\n是回车符)执行:scan转载 2017-06-14 21:24:24 · 663 阅读 · 0 评论 -
二维数组遍历的几种实现方法
/**实现二维数组的遍历累加**/#include <stdio.h>int main(void){ int a[][5] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int *pl; int (*pr)[5]; int suml = 0, sumr = 0; int i, j;/************************原创 2017-06-27 21:23:57 · 1425 阅读 · 0 评论 -
C语言中的常量
字符常量形如: ‘ a ’ ‘ b ’ ‘ 1 ’ ‘ \aaa ’ ‘ \xbb ’ 以上都为字符常量。(其中aaa是一个八进制的数,是ascii值;bb是一个十六进制的数,是ascii值)字符常量的类型为:char如图: 整型常量形如: 1 、-2 、123 0b1001 1101 0x7FFF FFFF、0x8000 0000 0x7FFF FFFF FFFF FFFF原创 2017-06-13 20:11:22 · 3846 阅读 · 0 评论 -
VMWare 1404 中无法识别设置的共享文件夹
重新安装VMWare Tools, 具体的安装方法网上有很多。VMWare Tools的安装参考: https://jingyan.baidu.com/article/1974b289b813dcf4b1f77411.html如果以后虚拟机开发出现: ubuntu 14.04 vmware tools 启动脚本未能成功执行 的错误,参考: http://tieba.baidu.com/p/转载 2017-12-20 11:10:01 · 355 阅读 · 0 评论 -
vim自动补齐插件的使用
插件的获取:Get the latest version from Github: https://github.com/mbbill/code_complete插件的使用示例:https://sh.qihoo.com/ctranscode?title=vim%20%E6%94%AF%E6%8C%81%E5%87%BD%E6%95%B0%E8%A1%8C%E5%8F%82%E5%92%8C%E5转载 2017-12-20 11:25:19 · 1185 阅读 · 0 评论 -
sscanf(buf,"mtd%d: %x %x \"%[^\"]\"\n",&mtdnum,&size,&erasesize,name);
sscanf(buf,"mtd%d: %x %x \"%[^\"]\"\n",&mtdnum,&size,&erasesize,name); 在双引号表示的字符串中需要有 “ 本身,则在前面加上 \ 执行上条语句之前,buf 中的内容例如: mtd0: 00280000 00010000 “boot+cfg+linux” 执行sscanf函数之后: mtdnum = 0 size =转载 2017-12-26 16:25:54 · 2908 阅读 · 0 评论 -
指针的运算
指针与整数的运算如果 p 为指针变量,那么指针的解引用 *p 所得到类型即是指针 p 的目标类型。 当对于指针变量 p 的操作 (p + n) 或者 (p - n) 的结果不确定时,牢记下面的计算法则: p +(-) n p中的地址内容 +(-) sizeof(目标类型) * n举个栗子: 在上图中: sizeof(int) = 4 sizeof(int *)原创 2017-06-20 09:41:11 · 364 阅读 · 0 评论 -
printf 的基本使用
printf 函数的基本输出格式:函数示例: 以上函数对应的输出结果: printf 函数的指定格式的输出:函数示例: 以上函数对应的输出结果 :原创 2017-06-15 19:54:03 · 323 阅读 · 0 评论 -
scanf 函数的使用
一、输入单个数据举个栗子: 二、输入多个数据1.默认的数据分割符 多个数据之间的分割符默认为:回车符 或 制表符 或 空格符对于下面的语句: 输入时,三个整数之间的间隔是上面三种分割符的任意一种。2.指定数据的分割符 a.如果指定的分割符是默认的三种分割符,则和没有指定效果一样。 b.如果是其他的分割符,输入时必须输入指定分割符如下面的四条语句所示: 下面的三原创 2017-06-15 21:43:32 · 587 阅读 · 0 评论 -
CPU 与 SoC
CPU 与 SoC 的区别SoC 即: System on Chip(片上系统)。这里的“System”包含CPU和各种外设(UART控制器、LCD控制器、Nand控制器等……),SoC能够成为可能,跟集成电路的技术的发展有这密切的联系,集成电路的发展意味着在芯片上能够集成更多的电路,单芯片解决方案将成为趋势。从CPU到SoC,现在已经没有纯粹的CPU了,都是SoC。ARM公司研发的内核其实就是CP转载 2016-10-24 20:52:01 · 576 阅读 · 0 评论 -
ARM的各种版本号
ARM型号的发展历程 ARM内核版本号和SoC版本号是由ARM确定的,而SoC型号是由半导体公司确定的Cortex系列后ARM产品线分割成3个系列,这个是市场细分的需要和选择ARM已经发布了一些64位架构如A53等,主要面向高性能服务器类应用ARM下一步重点发展方向是Cortex-M7,特点是低功耗,主要面向物联网终端参考来源:朱老师学习视频《ARM那些你得知道的事儿》翻译 2016-10-24 20:25:50 · 1497 阅读 · 0 评论 -
地址总线与数据总线
地址总线 数据总线转载 2016-10-25 17:24:43 · 8077 阅读 · 0 评论 -
交叉编译
交叉编译转载 2016-10-25 16:31:32 · 304 阅读 · 0 评论 -
汇编语言与高级语言
汇编语言与高级语言转载 2016-10-25 22:42:14 · 4627 阅读 · 0 评论 -
RISC 和 CISC
CSIC(Complex Instruction Set Computer) RSIC(Reduced Instruction Set Computer)转载 2016-10-26 23:10:12 · 1281 阅读 · 0 评论 -
统一编址与独立编址
IO 与 内存统一编址与独立编址转载 2016-10-27 23:01:16 · 3150 阅读 · 0 评论 -
存储器
存储器转载 2016-11-02 22:20:49 · 510 阅读 · 0 评论 -
有关启动
启动转载 2016-11-15 22:24:47 · 250 阅读 · 0 评论 -
RAM
RAM分为两大类:SRAM和DRAMSRAM (Static RAM/SRAM)SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲。从晶体管的类型分,SRAM可以分为双极性与CMOS两种。 从功能上分,SRAM可以分为异步SRAM和同步SRAM(SSRAM)。异步SRAM的访问独立于时钟,数据输入和输出都由地址的变化控制。转载 2016-11-17 11:46:16 · 1031 阅读 · 0 评论 -
哈佛结构 和 冯·诺依曼结构
程序 和 数据冯·诺依曼结构 和 哈佛结构转载 2016-10-28 10:56:27 · 2186 阅读 · 0 评论 -
ARM指令集
指令与伪指令指令与伪指令区别(汇编)指令是CPU机器指令的助记符,经过编译后会得到一串10组成的机器码,可以由CPU读取执行。(汇编)伪指令本质上不是指令(只是和指令一起写在代码中),它是编译器环境提供的,目的是用来指导编译过程,经过编译后伪指令最终不会生成机器码。ARM汇编的特点ARM汇编特点1:LDR/STR架构 ARM采用RISC架构,CPU本身不能直接读取内原创 2017-03-11 15:41:44 · 868 阅读 · 0 评论 -
C语言宏定义中的 ##
参考自keil的RTX源码:/// Thread Definition structure contains startup information of a thread.typedef struct os_thread_def { os_pthread pthread; ///< start address of thread function os原创 2017-03-11 16:21:05 · 663 阅读 · 0 评论 -
可重入函数
自己关于可重入函数的一些思考:关于“可重入”的理解:函数还未执行完成,在返回之前,可以被中断并被重新调用,而不影响函数的正确返回。在函数没有返回时,被重新调用,会在栈上重新分配新的空间。如果函数体内没有对全局变量或者静态的变量进行操作,函数体内操作的数据全部由调用者提供(即:形参),不管函数被重新调用多少次,每一次的函数返回都不会受到影响。但:如果形参是指针,即:函数返回之前被重新调用时,如果两次调转载 2017-04-18 23:32:46 · 307 阅读 · 0 评论 -
C语言中数据类型的自动类型转换
非常的重要的声明: 这篇博客的内容,主要参考网友的博客。 尊重知识产权,尊重原创!一、 C在以下四种情况下会进行隐式转换:算术运算式中,低类型能够转换为高类型。赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参。函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数。二、 运算表转载 2017-06-16 21:05:53 · 13400 阅读 · 2 评论 -
寄存器
通用寄存器和SFR(Specical Function Register)SFRSFR(special function register)转载 2016-11-02 20:47:20 · 1497 阅读 · 0 评论