
MCU ARM C语言
husion01
这个作者很懒,什么都没留下…
展开
-
C/C++ sizeof函数解析——解决sizeof求结构体大小的问题
C/C++中不同数据类型所占用的内存大小32位64位char11int4大多数4,少数8short2...转载 2019-10-18 16:30:49 · 574 阅读 · 1 评论 -
怎么计算两个经纬度之间的距离
1.用经纬度大致计算距离地球赤道上环绕地球一周走一圈共 40075.04公里而一圈分成360°而每1°(度)有60'每一度一秒在赤道上的长度计算如下:40075.04km/360°=111.31955km111.31955km/60'=1.8553258km=1855.3m而每一分又有60秒每一秒就代表 1855.3m/60=30.92m任意两点距离计算转载 2013-05-20 17:58:35 · 8489 阅读 · 1 评论 -
STC单片机程序-按键
1、一般查询到有键被按下时,延时10ms再判断一次是为了按键消抖。2、而等待按键释放可以用一个while()循环来完成。3、参考程序if (P1.2==0) { delay_ms(10); //延时10ms if (P1.2==0) //此条语句成立,说明确有键按下 {原创 2013-04-16 15:33:43 · 5461 阅读 · 1 评论 -
单片机的直流无刷电动机
http://wenku.baidu.com/view/a4a93b3e376baf1ffc4fad69.html 关于无刷电机和电调的基本原理http://wenku.baidu.com/view/3b371e5e3b3567ec102d8a85.html BLDC-DESIGN 永磁无刷直流电机与永磁同步电机区比较和分析http://wenku.baidu.co原创 2013-03-11 23:32:58 · 1177 阅读 · 0 评论 -
永磁同步电动机原理
永磁同步电动机的组成部分:定子、永久磁钢转子、位置传感器、电子换向开关等。永磁同步电动机具有结构简单,体积小、重量轻、损耗小、效率高、功率因数高等优点,主要用于要求响应快速、调速范围宽、定位准确的高性能伺服传动系统中。在永磁同步电动机中,以三相正弦电压方式(120°相移)施加於定子绕组上,这样在转子周围建立一个旋转磁场。转子找寻与这旋转定子场对齐,故此,当转子与定子磁通分隔90°时造出的转转载 2013-03-14 15:20:04 · 3345 阅读 · 0 评论 -
typedef的代码简化
1.typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。例如:typedef int (*PF) (const char *, const char *); 这个声明引入了 PF 类型作为函数指针的同义字,该函数有两个 const char * 类型的参数以及一个 int 类型的返回值。如果要使用下列形式的函数声明,那么上述这个 typedef 是不可或缺的:P转载 2013-02-22 17:23:30 · 872 阅读 · 0 评论 -
关于指针代替数组
void main(){ int ar[5][4]={ {2,3,4,5}, {7,6,5,4}, {1,3,5,7}, {8,2,13,5}, {7,6,5,4} }; int (*pz)[4] =ar; //int m=5,n=4; //max(m,n,pz); pz[0][0] = 0x011; pz[0][1]原创 2013-02-05 16:39:07 · 2079 阅读 · 0 评论 -
假设int=*pointer,应该是pointer所指向int变量,*是这个地址中的值吧?那**pointer又为什么又有意义的?
int *pointer;pointer是一个指向int值的一个指针,长度为4字节*pointer =指向的int值int **pointer 二级指针 指向一个指向int值指针的指针&pointer 取这个指针的地址 *a 等于 第一个元素的值&a 是第一个元素的地址 或者是 数组的首地址 2者相等 待测试:#include int main(){i翻译 2012-10-30 21:30:28 · 1411 阅读 · 0 评论 -
让KEIL输入二进制的头文件
<!--td {font-family:"宋体"; font-size:10.5pt}body {font-family:"宋体"; font-size:10.5pt}a:hover {font-family:"宋体"; color:red; text-decoration:none}a:link {font-family:"宋体"; color转载 2013-02-05 14:10:01 · 1863 阅读 · 0 评论 -
I2C总线原理
♦什么是I2C总线? I2C即Inter IC,由Philips公司开发,是当今电子设计中应用非常广泛的串行总线之一,主要用于电压、温度监控,EEPROM数据的读写,光模块的管理等。I2C总线只有两根线,SCL和SDA,SCL即Serial Clock,串行参考时钟,SDA即Serial Data,串行数据。 ♦I2C总线的速率能达原创 2013-01-13 16:57:56 · 1024 阅读 · 0 评论 -
((unsigned char volatile xxxx *) 0)
#include”当51单片机通过8255和锁存器74LS273来扩展IO时,经常用到头文件absacc.h。在程序中,用“#include”即可使用其中定义的宏来访问绝对地址,包括:CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD例如:rval=CBYTE[0x0002];指向程序存贮器的0002h地址rval=XWORD原创 2013-01-12 17:25:57 · 5680 阅读 · 0 评论 -
段式LCD原理
http://wenku.baidu.com/view/422c5e4d33687e21af45a96b.html http://wenku.baidu.com/view/3a2751d45022aaea998f0f9a.html转载 2013-05-08 12:55:18 · 1337 阅读 · 0 评论 -
单片机机器周期的计算
单片机的定时器的周期怎么算?就是比如定时器TF0置1的时间,我的晶振是11。0592MHz的 怎么算 还有就是时钟周期,状态周期,机器周期的概念和联系及换算?你的不明白其实就是对于定时器的初值问题,11.0592是始终的晶振,时钟周期就是1/11.0592M 而定时器的周期就是12/11.0592 因为51单片机是12分频的。还有很多......如果你写的是C的话建议这样转载 2012-01-29 17:26:47 · 13944 阅读 · 1 评论 -
联合体和结构体的区别
共用体构造数据类型,也叫联合体用途:使几个不同类型的变量共占一段内存(相互覆盖)结构体是一种构造数据类型用途:把不同类型的数据组合成一个整体-------自定义数据类型---------------------------------------------------------------结构体变量所占内存长度是各成员占的内存长度的总和。共同体变量所占内存长度是各最翻译 2014-11-11 00:08:47 · 596 阅读 · 0 评论 -
TortoiseSVN使用简介
1 安装及下载client 端2 什么是SVN(Subversion)?3 为甚么要用SVN?4 怎么样在Windows下面建立SVN Repository?5 建立一个Working目录6 新增档案及目录到Repository中7 更新档案及目录8 更新至特定版本9 复制档案及目录10 制作Tag或是Release11 快速参考11.1 取得(Ch转载 2014-02-23 14:37:26 · 560 阅读 · 0 评论 -
RGB色彩变换到Lab空间代码
这是两个函数,CIE标准的变换;和Adobe的不一样 Step1:XYZ to RGB (采用 D65 白点): [ R ] [ 3.240479 -1.537150 -0.498535 ] [ X ] [ G ] = [ -0.969256 1.875992 0.041556 ] * [ Y ] [ B ] [ 0.055648 -0.原创 2013-12-25 15:37:54 · 858 阅读 · 0 评论 -
CRC8校验分析
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。 CRC校验可以简单地描述为:例如我们要发送一些数据(信息字段),为了避免一些干扰以及在接收端的对读取的数据进行判断是否接受的是真实的数据,这时我们就要加上校验数据(即CRC校验码),来判断接收的数据是否正确。在发送端,根转载 2013-12-20 14:12:29 · 17583 阅读 · 1 评论 -
CMOS Sensor的调试经验
目前,包括移动设备在内的很多多媒体设备上都使用了摄像头,而且还在以很快的速度更新换代。目前使用的摄像头分为两种:CCD(Charge Couple Device电荷偶合器件)和 CMOS(Complementary Metal Oxide Semiconductor互补金属氧化物半导体)。这两种各有优劣:目前CCD主要使用高质量的DC、DV和高档手机上,其图像质量较好,但是整个驱动模组相对比较复杂转载 2013-11-28 11:20:15 · 1089 阅读 · 0 评论 -
YUV420转YUV444 , YUV420转RGB .
我想大家应该知道了YUV的颜色表示原理即: Y = 0.299R + 0.587G + 0.114B U = -0.147R - 0.289G + 0.436B V = 0.615R - 0.515G - 0.100B R = Y + 1.14V G = Y - 0.39U - 0.58V B = Y + 2.03U如果通过上面的公式从RGB转转载 2013-11-27 15:34:55 · 3114 阅读 · 0 评论 -
回调函数例子
static DRVADC_ADC_CALLBACK *g_ptADCCallBack;3.void ADC_IRQHandler(void){ if (g_ptADCCallBack) g_ptADCCallBack(g_pu32UserData); /* clear the A/D conversion flag */ 5. ADC->ICLR =原创 2013-11-20 18:10:17 · 1128 阅读 · 0 评论 -
回调函数和函数指针
最近在看代码,写代码的人很喜欢用回调函数和函数指针。一直觉得回调函数和函数指针挺神秘的,所以查了一些资料,来与大家一起来分享。什么是回调函数简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。为什么要使用回调函数 因为使用回调函数可以把调用者和被调用者分开,调用者不关心转载 2013-11-20 17:37:03 · 735 阅读 · 0 评论 -
单片机浮点数运算之比较
http://wenku.baidu.com/view/7fa1e360783e0912a2162a89.html http://bbs.21ic.com/icview-202263-1-1.html原创 2013-08-10 12:50:28 · 3653 阅读 · 0 评论 -
keil优化等级设置
优化论谈到优化,其实很多人都哭笑不得,因为在一个C51软件工程师的生涯中,总要被KEIL的优化耍那么一次到几次。我被耍过,想必看着文章的你也被耍过,如果你回答说不,那只能说你写的C51程序不多!看看KEILC的优化级别选项吧: 0-9共10个级别的优化,0是最低,9最高,一个普通的程序,设置最高级别和最低级别,编译后代码量有时会相差很远,以DX板DEMO程序为例,0级优化后是14K原创 2012-10-18 23:51:44 · 26901 阅读 · 7 评论 -
51单片机的软件复位
请先看最下面的程序 这是一款针对Keil软件的,被称作“纯软件”复位的程序。所谓“纯软件”是指它没有直接操作硬件以及寄存器。 事实上如果不懂硬件和汇编也不可能有这段C程序,不管怎么样,我们还是来看一看它的真面目: 我们知道51 单片机 可以把数据放在程序存储器里面,也就是程序和数据没有本质区别,都是一些特定的数据。如果我们将一段程序,以数组转载 2013-01-10 12:12:45 · 4683 阅读 · 0 评论 -
【转】按键长按与短按处理程序[C语言]--通過測試
#define PRESSED 0#define Long_cnt 65534 //長鍵判斷值#define Short_cnt 250 //短鍵判斷值,消抖动void Key_Pressed(void){unsigned int counter=0; //用做判断按键长按,短按的计数器/********************key3_3***************转载 2012-12-19 10:47:08 · 8862 阅读 · 0 评论 -
重要的#pragma声明
重要的#pragma声明#pragma声明是基于单片机开发的特点而对标准C语法的一个扩充。它对充分利用单片机内各类有限的资源起到不可或缺的关键作用。下面简单介绍几个最常用的#pragma声明。1 #pragma DATA_SEG定义变量所处的数据段。其语法型式为:#pragma DATA_SEG 名称数据段名称可以自己任意命名,但习惯上有些约定的名称,其作用分别为:原创 2012-12-27 11:39:14 · 749 阅读 · 0 评论 -
C51变量的绝对定位
4.3.6 C51变量的绝对定位C51有三种方式可以对变量(I/O端口)绝对定 位:绝对定位关键字_at_ 、指针、库函数的绝对定 位宏。 C51扩展的关键字_at_专门用于对变量作绝对定 位,_at_使用在变量的定义中,其格式为:[存储类型] 数据类型 [存储区] 变量名1 _at_ 地址常数[,变量名2…]4.3.6 C51变量的绝对定位举例说明_at_的使用方法1原创 2012-10-09 11:55:05 · 3589 阅读 · 0 评论 -
define定义常量加括号,不加括号区别
#define ADD1 a+b#define ADD2 (a+b)void main(){ int a=10; int b=20;// 你想计算(10+20)*3 int c, d; c = ADD1*3; d = ADD2*3;}经过宏替换,就变成了下面的样子: c = a+b*3; d = (a+b)*3;原创 2012-10-09 13:30:46 · 3963 阅读 · 0 评论 -
KEIL里 Volatile的用法
http://wenku.baidu.com/view/519cbb37eefdc8d376ee32b9.html看最后部分,比较精彩 用于防止相关变量被优化 看常用情况原创 2012-08-09 18:27:41 · 1830 阅读 · 0 评论 -
nand flash读取函数的理解
S3C2410处理器集成了8位NandFlash控制器。目前市场上常见的8位NandFlash有三星公司的k9f1208、k9f1g08、k9f2g08等。k9f1208、k9f1g08、k9f2g08的数据页大小分别为512Byte、2kByte、2kByte。它们在寻址方式上有一定差异,所以程序代码并不通用。本文以S3C2410处理器和k9f1208系统为例,讲述NandFlash的读写方法。转载 2012-05-22 10:20:25 · 1090 阅读 · 0 评论 -
continue break goto
1 continue continue 汉意为继续。它的作用及用法和break类似。重要区别在于,当前循环遇到break,是直接结束循环,而若遇上continue,则是停步当前这一遍循环,然后直接尝试下一遍循环。我把“尝试”加粗以引起注意,为什么要注意原因后面再说,请先看下面关于break和continue的对比:continue并不结束整个循环,而仅仅是中断的这一遍循环,然后跳到原创 2012-02-23 22:46:51 · 721 阅读 · 0 评论 -
数码管
用proteus模拟多位数码管动态显示 作者:roland1314 提交日期:2007-9-20 17:07:00 数码管动态显示多位数字。 该实验用到实验板的资源电路图如下: 其中P0口是段码,低电平有效。P2口是位码,高电平有效。P2.0口控原创 2011-12-23 15:39:17 · 2484 阅读 · 0 评论 -
关于红外遥控的一点资料整理
关于红外遥控的一点资料整理 最近发现家里遥控器老是弄混(唉,遥控器多了,也是一件麻烦事)。如果有一种可对家中各种红外遥控器发射的控制信号进行识别、存储和再现的智能型红外遥控器,用这样一个遥控器控制家中所有电器该多好。这就是大家称作的学习型红外遥控器。于是,下了不少工夫查转载 2011-09-26 16:50:34 · 2872 阅读 · 0 评论 -
MCS-51系列单片机模拟SPI总线的方法
摘要:MCS-51系列单片机单片机 单片机是单片微型计算机(Single-Chip Microcomputer)的简称,是一种将中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调转载 2011-07-06 16:59:39 · 5978 阅读 · 0 评论 -
单片机内核分类
1.内核诸如51/ARM/90/PIC/AVR.....有好多种的,何况内核从来不分类,因为每一家常都可以改内核,你应该问的是架构!!只有懂架构才能用什么片子都驾轻就熟.我详细的说一下吧.HARVARD(哈佛)架构:ROM(程序空间)与RAM(数据空间)分开,便于程序与数据的同时访问,减少程序运行时访问的瓶颈,提高数据吞吐.PRINCETON(普林斯顿)架构:采用通用计算机原创 2011-06-22 17:47:00 · 14707 阅读 · 1 评论 -
关于C的除法 取余
/ :除法---取整(无四舍五入)%:取余---取余数原创 2011-06-10 10:16:00 · 1419 阅读 · 0 评论 -
C语言中malloc()函数与alloc()函数
C语言跟内存分配方式 (1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 (2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (3)从堆上分配,亦称动态内存分配。程序转载 2012-11-14 13:54:42 · 902 阅读 · 0 评论 -
C语言文件编译链接的过程小问题1--extern结构体和函数
这两天和同事一起讨论C文件中的编译过程,这些个东西书上讲得不少,一个程序从写到到内存里运行起来,一般要经过预编译,编译,链接和装载四个过程,具体的每个过程,我们就不细讲了,因为网上和书都多得是资料。我们谈谈一些个细节的问题,就是函数的声明和结构体的变量的extern使用。因为一直在C++上用类写,再加平时就很注意标准化和格式,所以习惯了自己的用法,同事程序里的函数的声明和使用方法很有特色,一问转载 2012-11-15 10:16:32 · 2875 阅读 · 0 评论 -
C51的再入函数 reentrant RECURSIVE CALL TO SEGMENT
重入函数,又叫再入函数,是一种可以在函数体内不直接或间接调用其自身的一种函数。再入函数可被递归调用,无论何时,包括中断函数在内的任何函数都可以调入。再入函数在C51编译时使用的是模拟栈。函数说明: 函数名(形式参数表) reentrant注意事项:1、再入函数不能传递bit类型参数。2、与PL/M51兼容的函数不能具有reentrant,这样也不能调用再入函数。转载 2012-12-27 13:57:11 · 6192 阅读 · 1 评论 -
51单片机中断心得整理
如果在中断服务函数 ISR 中使用寄存器,那么必须处理好 using 的使用问题: 1、中断服务函数使用 using 指定与主函数不同的寄存器组(主函数一般使用 Register bank 0)。 2、中断优先级相同的ISR 可用 using 指定相同的寄存器组,但优先级不同的 ISR 必须使用不同的寄存器组,在 ISR 中被调用的函数也要使用 using 指定与中断函数相同的原创 2012-12-27 12:01:45 · 3061 阅读 · 0 评论