推荐阅读最新更新时间:2024-03-16 15:45
arm学习笔记--程序中变量引起的思考
今天在写代码的时候,遇到一个奇怪的问题,在函数内定义局部变量数组,如果这个数组较大时程序就会跑飞,跑飞的地方如下: /*这一块是跑飞的代码*/ uint32_t UserCode ; UserCode =1; /*代码over*/ 如果数组比较小的话就没有问题,然后我上网查了一下资料这里理一下: 1、由于局部变量创建的时候是静态创建在栈上的,所以栈的大小限制了局部变量的size,如果栈小了,在运行的时候就会出现溢出,程序当然就飞了。这里就有概念上的疑问了:静态创建和动态创建区别是什么?局部变量占用的是栈的空间,那么其他类型的变量呢?下面我们就来看这个问题。 2、静态创建和动态创建的区别 我个人的理解:静态创建分为两个
[单片机]
ARM学习笔记8 通用寄存器和存储器内容交换指令和软中断指令
交换指令将一个存储单元内容与制定的寄存器内容相交换,交换指令为进程间同步提供了一种方便的解决途径。该指令产生一堆原子Load/Store操作,该操作发生在一个连续的总线操作中,在操作期间阻止其他任何指令对该存储单元的读/写。 一、通用寄存器和存储器字数据交换指令SWP 1、作用 将一个内存单元(该单元地址放在寄存器Rn中)的内容读取到一个寄存器Rd中,同时将另一个寄存器Rm的内容写入到该内存单元中。 2、语法格式 SWP{ condition } Rd , Rm , 3、参数说明 3.1、 Rd :确定指令的目标寄存器 3.2、 Rm :该寄存器包含将要被存储到内存单元中的数据
[单片机]
字符设备驱动程序--LED驱动
编写驱动程序需要编写那些代码: 1、硬件相关的驱动程序 2、Makefile的编译程序 3、还需要编写一个相关的测试程序 比如说:一个摄像头驱动程序 1、驱动程序的编写,需要编写一些硬件相关的操作,编译Makefile 2、安装、运行、卸载驱动程序(insmod ***、。./*** 、remod *** )。 3、使用这个驱动程序:需要一个测试程序,如QQ(测试程序)打开摄像头。 编写驱动程序框架: APP:(测试程序) open read write ......... -----------------------------------------------------
[单片机]
ARM学习笔记(一)"S3C2440A时钟初始化"
S3C2440A时钟初始化: 1.根据OM 判定系统时钟来源(Fin) 2.设置CLKCON 默认即可,如有功耗要求,可参考手册设置,关闭部分时钟. 3.设置CLKSLOW 默认即可,不用SLOW模式. 4.LOCKTIME设定(略),默认设置 5.设置锁相环 MPLLCON UPLLCON MDIV= MP(U)LLCON PDIV= MP(U)LLCON SDIV= MP(U)LLCON 约定:m=MDIV+8 ; p=PDIV+2; s=SDIV 系统时钟FCLK=Fmpll=(2*m*Fin)/(p*2^s) 【与S3C2410不同】 USB时钟UCLK=Fupl
[单片机]
51单片机程序——按键控制LED灯
#include reg52.h void Delay(unsigned int t); sbit key=P3^2; //对应单片机开发板上s19按键 void main (void) { while (1) //函数开始后,一直在检测按键是否被按下 { if(key==0) { unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255 P0=0x7f; //赋初始值,右边第一个灯亮起来 for(i=0;i 8;i++) //加入 for循环,表明for循环大括号中的程序循环执行8次 { Delay
[单片机]
基于设备树的led驱动程序
1 #include linux/module.h 2 #include linux/kernel.h 3 #include linux/fs.h 4 #include linux/init.h 5 #include linux/delay.h 6 #include asm/io.h 7 #include linux/cdev.h 8 #include linux/device.h 9 #include linux/bitmap.h 10 #include asm/gpio.h 11 #include linux/platform_device.h 12 #include linux/sla
[单片机]
单片机C语言程序设计:K1-K4 控制 LED 移位
/* 名称:K1-K4 控制 LED 移位 说明:按下 K1 时,P0 口 LED 上移一位; #FormatImgID_0# */ 按下 K2 时,P0 口 LED 下移一位; 按下 K3 时,P2 口 LED 上移一位; 按下 K4 时,P2 口 LED 下移一位; #include reg51.h #include intrins.h #define uchar unsigned char #define uint unsigned int //延时 void DelayMS(uint x) { uchar i; while(x--) for(i=0;i 120;i++);
[单片机]
ARM Cortex-M3 学习笔记(4-5)
最近在学ARMCortex-M3, 找了本号称很经典的书 An Definitive Guide to The ARM Cortex-M3 在看。这个系列学习笔记其实就是在学习这本书的过程中做的读书笔记。 Barrier 指令 DMB, DSB, ISB 这三个指令的区别如下表所示。 指令名 功能描述 DMB 数据存储器隔离。DMB指令保证: 仅当所有在它前面的存储器访问操作都执行完毕后,才提交(commit)在它后面的存储器访问操作。 DSB 数据同步隔离。比DMB严格: 仅当所有在它前面的存储器访问操作都执行完毕后,才执行在它后
[单片机]