04 2017 档案
摘要:序言:2440有nand和nor两种启动方式,在裸机部分,都是使用的nand启动。 现在,我们想在nand flash启动的时候,通过SRAM访问存储在外设SDRAM中的程序。 nand启动,先把前4K数据加载到内部SRAM,再从SDRAM读取LED程序。 这个实验需要熟悉芯片手册,这里不是重点研究
阅读全文
摘要:如同学基本语言一样,helloworld是很多语言的第一个程序。在嵌入式开发中,点亮LED灯也是各种架构和开发板的第一个程序,其中很多东西是和单片机例如stm32是类似的,只是,现在我们没有了库函数,我们要自己完成一些东西。 先说启动文件,st官方已结给我们做好了,但是jz2440开发板没有统一的启
阅读全文
摘要:SRAM:SRAM(Static Random Access Memory),即静态随机存取存储器。它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。SRAM不需要刷新电路即能保存它内部存储的数据。而DRAM(Dynamic Random Access Memory)每隔一段时
阅读全文
摘要:通过函数能显著增强Makefile的功能。对于simple项目的Makefile,尽管使用了模式规则,但还是有一件比较麻烦的事情,就是要在Makefile中指明每一个项目源文件。下面介绍几个后期会使用到的函数,更多请参考《GUN Make》。 1.abspath函数 从命名就应该能够猜出它的作用。a
阅读全文
摘要:要完整描述一个内存单元,需要两种信息:1.内存单元的地址;2.内存单元的长度(类型)。 用[0]表示一个内存单元时,0代表单元的偏移地址,段地址默认在ds中,单元的长度(类型)可以由具体指令中的其他操作对象(比如寄存器)指出。 我们定义描述性符号:“()”,为了描述上的简洁,在以后的课程中,我们将用
阅读全文
摘要:看韦老师操作各种软件倒是流畅,但是自己要是并不清楚某些软件的功能,就需要补充自己的知识盲点。例如玩单片机,我们都知道串口调试助手,可以在win上和单片机通信,接发数据,要是只知道串口调试助手,不知道它怎么用,那就不可能学得好。下面先补充基本工具的知识点。 SecureCRT SecureCRT是Va
阅读全文
摘要:本章参考资料《 STM32F4xx 中文参考手册》第十章-中断和事件:表 46.STM32F42xxx 和 STM32F43xxx 的向量表; MDK 中的帮助手册—ARM Development Tools:用来查询 ARM 的汇编指令和编译器相关的指令。 启动文件由汇编编写,是系统上电复位后第一
阅读全文
摘要:不得不说韦老师的课程还是很需要时间去消化。今天改变了学习策略,遇到不会的知识点,先查资料。 以前在单片机编程中,都只是知道代码存在flash中,而一听韦老师的课程,就是nand flash启动或者nor flash启动,所以找了一些这方面的参考资料弥补自己知识的空白。 快闪存储器(英语:flash
阅读全文
摘要:GPIO—位带操作本章参考资料:《 STM32F4xx 中文参考手册》存储器和总线构架章节、 GPIO 章节,《 Cortex®-M4 内核编程手册》 2.2.5 Bit-banding。学习本章时,配套这些参考资料学习效果会更佳。 位操作就是可以单独的对一个比特位读和写,这个在 51 单片机中非常
阅读全文
摘要:在汇编语言源程序中包含两种指令,一种是汇编指令,一种是伪指令。汇编指令是有对应的机器码的指令,可以被编译为机器指令,最终为CPU所执行。而伪指令没有对应的机器指令,最终不被CPU所执行,伪指令是由编译器来执行的指令,编译器根据伪指令来进行相关的编译工作。
阅读全文
摘要:在这里,我们对栈的研究只限于这个角度,栈是一种具有特殊访问方式的存储空间。它的特殊性在于,最后进入这个空间的数据,最先出去,后进先出(LIFO last in first out)。 .CPU提供的栈机制 8086CPU提供入栈和出栈指令,最基本的如同push ax,表示将寄存器ax中的数据入栈,p
阅读全文
摘要:本来这个是只应该出现在运用cpp编程的工程中的,但是,就算是单片机编程,都已经会看到这个了,所以提出来解释一下。 条件编译,属于c/c++共有的,但是由于在有些场合,在c++代码内嵌c语言能使编程更加便利。 使用c语言编译器gcc编译下面代码: 预编译(gcc -E)之后是这样的: 这样可以确定在C
阅读全文
摘要:volatile译为:易变的。这不是和题目的让我保持原样矛盾了吗?其实不然,在变量前加上该关键字修饰,确实是告诉编译器,这个变量是一个容易改变的变量,不要对它进行优化,每次都要到变量的地址中去读取变量的数据,但正因为这样,才是保持了变量的原样,因为变量已经发生改变了,你却操作的是没有变化时的数据,这
阅读全文
摘要:这里要用到一定的模电知识。电容两端电压不能突变,电感两端电流不能突变。这里利用了电容的放电延时实现硬件消抖。按键按下会有抖动,波形有毛刺,使得高低电平显现不明显,而按键按下时,电容放电一下,马上又被充电,此时电容两端的电压不会突然变化,这个延时时间恰好可以达到消抖作用。 这里需要使用一个固件库函数:
阅读全文
摘要:.内存中字的存储 在内存中存储时,由于内存单元是字节单元(一个单元存放一个字节),则一个字要用两个连续地址的内存单元来存放。8086CPU是小端机,低地址存低位,高地址存高位。 我们提出字单元的概念:字单元,即存放一个16位数据的内存单元,有两个连续的内存单元组成。在以后的课程中,我们将起始地址为N
阅读全文
摘要:为了使工程更加有条理,我们把 LED 灯控制相关的代码独立分开存储,方便以后移植。在“工程模板”之上新建“ bsp_led.c”及“ bsp_led.h”文件,其中的“ bsp”即 BoardSupport Packet 的缩写(板级支持包),这些文件也可根据您的喜好命名,这些文件不属于STM32
阅读全文
摘要:.段寄存器 8086CPU在访问内存时是要由相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址。段地址存放在段寄存器中,8086CPU有4个段寄存器:CS, DS, SS,ES。 .CS和IP CS和IP寄存器,指示了CPU当前要读取指令的地址。CS为段寄存器,IP为指令指针寄存器。
阅读全文
摘要:版本号可从 MDK 软件的“ Help-->About uVision”选项中查询到。 然后对应添加库文件。 把所有文件添加进入之后,编译工程,会报很多错误。 那是因为我们的某个头文件里面有条件编译,但是我们现在没有开启,用ST的建议就是,为了不改动工程文件,我们可以在编译器上定义需要的宏。在在此之
阅读全文
摘要:.16位结构的CPU 概括地讲,16位结构(16位机,字长为16位等常见说法,与16位结构的含义相同)描述了一个CPU具有下面几方面结构特性: 1.运算器一次最多可以处理16位的数据结构 2.寄存器的最大宽度为16位 3.寄存器和运算器之间的通路为16位 .8086CPU给出物理地址的方法 8086
阅读全文
摘要:因为基于 Cortex 系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,这些差异却导致软件在同内核,不同外设的芯片上移植困难。为了解决不同的芯片厂商生产的 Cortex 微控制器软件 的兼容性问题, ARM 与芯片厂商建立了 CMSIS 标准(CortexMicroController
阅读全文
摘要:其实在我使用最多的文件操作中,还是喜欢格式化IO控制的方式,简单方便易理解。 看了fprintf函数之后,肯定不能忘了fscanf函数啊:
阅读全文
摘要:按行读写文件需要用到fputs和fgets函数,feof函数可以检测是否到文件末尾,如果是,返回一个非零值,如果没有达到末尾,返回零值。
阅读全文
摘要:一个典型的CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。前一章所说的总线,相对于cpu内部来说是外部总线。内部总线实现内部各个器件之间的联系,外部总线实现CPU和主板上其他器件的联系。简单的说,在CPU内部: .运算器进行信息处理 .寄存器进行信息存储 .控制器控制各种器件进行工
阅读全文
摘要:stm32的编程和stc89c51还是存在着很多思想上的不同的,在51单片机中,我们点亮LED灯,只用给对应IO高低电平就可以了,而stm32中,就一个简单的GPIO,我们也需要配置好几个寄存器,而且,就算配置好GPIO寄存器,我们还必须有一步不能缺少的操作,那就是开启对应GPIO的时钟。在stm3
阅读全文
摘要:.存储单元 存储器被分成若干个存储单元,每个存储单元从0开始顺序编号。电子计算机的最小信息单位是bit。8个bit组成一个Byte(虽然现在一个字节可能不是8位,有宽字符出现了,但是一般我们的机器都是8位1字节的),也就是通常所说的字节。微型机存储器的存储单元可以存储一个Byte,即8个二进制位。一
阅读全文
摘要:对学习C语言而言,文件操作属于横向学习,而之前的指针属于纵向学习。所谓横向学习,就是快速掌握API,了解使用就行,纵向学习则不同,纵向学习需要深入地理解原理。但是在linux系统编程的学习中,文件操作属于纵向学习,因为在Linux设计哲学中是一切皆文件的思想。 第一个API函数,fopen 第二个A
阅读全文
摘要:在点亮LED之前,我们需要具备一些基础知识: GPIO—general purpose intput output 是通用输入输出端口的简称,简单来说就是软件可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。 1、GPIO跟引脚有什么区别? 2
阅读全文
摘要:说到汇编语言的产生,首先要讲一下机器语言。机器语言是机器指令的集合。机器指令展开来讲就是一台机器可以正确执行的命令。电子计算机的机器指令是一列二进制数字。计算机将之转变为一列高低电平,以使计算机的电子器件受到驱动,进行运算。现在我们常用的PC机中,有一个芯片来完成上面所说的计算机的功能。这个芯片就是
阅读全文
摘要:直接用“=”操作符,是浅拷贝,要实现深拷贝,更改代码如下: 这样深拷贝之后,就需要释放两次内存。在以后的业务逻辑中,须根据需要选择使用深拷贝还是浅拷贝,但我们要知道,编译的“=”(赋值)操作符是浅拷贝。
阅读全文
摘要:我们看到的 STM32 芯片已经是已经封装好的成品,主要由内核和片上外设组成。若与电脑类比,内核与外设就如同电脑上的 CPU 与主板、内存、显卡、硬盘的关系。STM32F429 采用的是 Cortex-M4 内核,内核即 CPU,由 ARM 公司设计。 ARM 公司并不生产芯片,而是出售其芯片技术授
阅读全文
摘要:为什么第一个调用有警告,第二个没有? 要解释这个问题,真是破费心机。 ANSI C 6.3.16.1节对于简单赋值这样描述: 两个操作数都是指向有限定符或者无限定符的相容类型的指针,左边指针所指向的类型必须具有右边指针所指向类型的全部限定符。 (在顶层const时不再适用!) 函数调用时,实参传递给
阅读全文
摘要:数组名的技术盲点: 1.数组首元素的地址和数组地址时两个不同的概念,虽然它们的值相同,但是执行运算例如加1操作时,移动的步长不一样 2.数组名代表数组首元素的地址,它是一个常量: 变量的本质是内存空间的别名,一定义数组,就分配内存,内存就固定了,所以数组名起名以后就不能更改了。那么为什么指针类型的可
阅读全文
摘要:以下摘自:http://blog.163.com/soonhuisky@126/blog/static/157591739201321341221179/ http://blog.csdn.net/haoni123321/article/details/7178748 为了讨论方便,先把问题稍微改变
阅读全文
摘要:先测试C语言的const: 不是指针变量的表达式,const放在类型的前后都没关系,但是在指针变量中,const的位置就有讲究了,此时要分清楚是指针变量的值是只读的还是指针所指向的内存空间是只读的。而且,C语言中,const是个假const: 运行结果显示a的值被改变。所以,在C语言中,const不
阅读全文