自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

huangtonggao的专栏

Anything that can go wrong will go wrong.

  • 博客(48)
  • 资源 (2)
  • 收藏
  • 关注

转载 在main()之前,IAR都做了啥?

转载自http://www.cnblogs.com/mssql/archive/2011/01/29/tt146.html  总结得非常好,表示感谢,若侵权,请告知删除最近要在Cortex-M3上写一个简单的操作系统,打算使用IAR,为了写好启动代码,花了一些时间了解了IAR在main()以前做了些什么事。首先系统复位时,Cortex-M3从代码区偏移0x0000'0000处获取栈顶地址,

2011-12-04 21:42:55 1805

转载 段选择器 段描述符 段描述符表 线性地址形成

买了本罗老师的琢石成器,才看前3章就感觉晕晕忽忽,总体觉得要看懂这本书前提是必须会DOS汇编,了解32位汇编基础.DOS汇编本人只看了王爽老师的汇编语言前11章,中断这块还没有看,看来不看还是不行的。转回来说,罗老师这本书前3章写的很乱,尤其是描述符这块,看了似懂非懂,通而不透。只能自己抽丝剥茧,捋清头绪,慢慢体会:段选择器:32位汇编中16位段寄存器(CS、DS、ES、SS、FS、GS)中不

2011-11-14 15:57:00 1082 1

转载 tar命令

转载1tar命令tar [-cxtzjvfpPN] 文件与目录 .... 参数: -c :建立一个压缩文件的参数指令(create 的意思); -x :解开一个压缩文件的参数指令! -t :查看 tarfile 里面的文件! 特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在! 因为不可能同时压缩与解压缩。 -z :是否同时具有 gzip 的属性

2011-11-10 13:11:44 891

转载 RS232/485/422、USB----传输距离

1.串口232RS-232收、发端的数据信号是相对于信号地,如从DTE设备发出的数据在使用DB25连接器时是2脚相对7脚(信号地)的电平。典型的RS-232信号在正负电平之间摆动,在发送数据时,发送端驱动器输出正电平在+5~+15V,负电平在-5~-15V电平。当无数据传输时,线上为TTL,从开始传送数据到结束,线上电平从TTL电平到RS-232电平再返回TTL电平。接收器典型的工作电平在+3

2011-10-29 17:37:19 11816

转载 sms 7bit编码

关于短信内容格式及压缩方法今天研究了一下收发短信,8位编码转7位编码研究了半天,弄的一头雾水,最后还是在网上找到答案。 如下: 网短信压缩格式在TP-DCS中指示,TP-DCS在《GSM03.38》中有说明,一般都采用将7bit编码压缩成8bit编码方式,这种压缩方式也在《GSM03.38》中有详细说明。     压缩编码方式将8字节的7bit编码压缩成7字节的8bit编码,也就是说160字节

2011-10-25 21:02:49 6172

转载 AT指令发送PDU短信详解

AT指令发送PDU短信详解 3推荐本文以一个实例来解说AT指令发送PDU短信的全过程,假如我要发送下面的短信:接收号码:+8613602433649短信内容:工作愉快!短信中心号码:+8613800200500一、短信中心号码处理:用字符串 addr 表示1、将短信息中心号码去掉+号,看看长度是否为偶数,如果不是,最后添加F即

2011-10-20 11:25:18 1234

转载 字符串之strcat

【原创】最近在使用C语言编程,发现自己原来好多细节的东西掌握的不是很好,比如字符串的连接函数strcat()其实里面有很多需要注意的东西,今晚在写程序的时候就是在这里出现了一个大的错误,导致程序崩溃,通过GOOGLE以后发现呵呵如下:【转】一个会立刻报错的程序代码

2011-10-18 14:54:49 1046

转载 小小换行符乱谈(文本文件vs二进制文件) .

使用 C 语言的 fopen 打开文件时,可以指定的 mode 有 12 个,其中 6 个包含 "b" 使用 C++ 的 fstream 打开文件时,可用的模式组合有 24 个(?),其中 12 个包含 "binary" 使用 python 的 open

2011-08-25 20:52:48 1316

转载 C++命名空间

一、 为什么需要命名空间(问题提出)    命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突。   在 C语言中定义了3个层次的作用域,即文件(编译单元)、函数和复合语句。C++又引入了类作用域,类是出现在文件内的。在不同的作用域中可以

2011-08-13 22:33:17 581

转载 常用的浮点数存储格式:32-bit IEEE-754 floating-point format

IAR支持这种数据格式 对于大小为32-bit的浮点数(32-bit为单精度,64-bit浮点数为双精度,80-bit为扩展精度浮点数), 1、其第31 bit为符号位,为0则表示正数,反之为负数,其读数值用s表示; 2、第30~23 bit为幂数,其读数值用e表示; 3、第22

2011-07-18 22:22:35 11704

转载 新型的按键扫描程序

不过我在网上游逛了很久,也看过不少源程序了,没有发现这种按键处理办法的踪迹,所以,我将他共享出来,和广大同僚们共勉。我非常坚信这种按键处理办法的便捷和高效,你可以移植到任何一种嵌入式处理器上面,因为C语言强大的可移植性。 同时,这里面用到了一些分层的思想,在单片机当中也是相当有用的,也是本文的另外一个重点。 对于老鸟,我建议直接看那两个表达式,然后自己想想就会懂的了,也不需要听我后面的自吹自擂了,

2011-06-23 23:07:00 931

转载 STM32定时器的输入滤波机制

<br />STM32的定时器输入通道都有一个滤波单元,分别位于每个输入通路上(下图中的黄色框)和外部触发输入通路上(下图中的兰色框),它们的作用是滤除输入信号上的高频干扰。<br /><br />具体操作原理如下:<br />在TIMx_CR1中的CKD[1:0]可以由用户设置对输入信号的采样频率基准,有三种选择:<br />1)采样频率基准fDTS=定时器输入频率fCK_INT<br />2)采样频率基准fDTS=定时器输入频率fCK_INT/2<br />3)采样频率基准fDTS=定时器输入频率fCK

2011-06-01 09:46:00 1322

转载 STM32定时器的预装载寄存器与影子寄存器之间的关系

<br />本文的说明依据STM32参考手册(RM0008)第10版:<br />英文:http://www.st.com/stonline/products/literature/rm/13902.pdf<br />中译文:http://www.stmicroelectronics.com.cn/stonline/mcu/images/STM32_RM_CH_V10_1.pdf<br />在STM32参考手册的第13、14章中,都有一张定时器的框图,下面是第14章中定时器框图的局部,图中黄色框所示的是au

2011-06-01 09:13:00 5432 4

转载 关于STM32软件复位代码编写

对于STM32来说软件复位有两种方式: 1)采用官方自带的软件库   在官方软件库的stm32f10x_nvic.c 文件里 直接提供了 系统复位的函数 /******************************************************************************** Function Name  : NVIC_GenerateSystemReset* Description    : Generates a system reset.* Input     

2011-05-25 23:19:00 50473 2

转载 STM32 NVIC

<br />STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。<br /><br />具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。<br /><br />当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后

2011-05-24 11:25:00 4196

转载 STM32之SPI

<br /> <br />  <br />对于STM32的SPI ,Reference Manual中是给出的schematic如下:<br /> <br /><br /> <br /> <br /><br /> <br />按照标准的SPI协议,当SPI被配置为主机模式后,通过SPI对从设备进行操作时,其NSS应该自动置低,从而选中(使能)从设备;一旦不对从设备进行操作,NSS立刻置为高。<br />      但是,我在实际调试过程中却发现:STM32 SPI NSS无法自动实现跳变。 一旦SPI初始化

2011-05-20 23:32:00 7987

转载 嵌入式系统PCB设计中的阻抗匹配与0欧电阻

<br />1、阻抗匹配<br />阻抗匹配是指信号源或者传输线跟负载之间的一种合适的搭配方式。根据接入方式阻抗匹配有串行和并行两种方式;根据信号源频率阻抗匹配可分为低频和高频两种。<br />(1)高频信号一般使用串行阻抗匹配。串行电阻的阻值为20~75Ω,阻值大小与信号频率成正比,与PCB走线宽度和长度成反比。在嵌入式系统中,一般频率大于20M的信号PCB走线长度大于5cm时都要加串行匹配电阻,例如系统中的时钟信号、数据和地址总线信号等。串行匹配电阻的作用有两个:<br />◆ 减少高频噪声以及边沿过冲

2011-05-20 17:13:00 1380

转载 KEIL设置

<br />熟悉Keil C 51的朋友对于Keil MDK上手应该比较容易,毕竟界面是很像的。但ARM内核毕竟不同于51内核,因此无论在设置上还是在编程思想上,都需要下番功夫研究的。本文以MDK V4.03为例,详细的写一下MDK的设置、界面、工具。可能会有些杂乱,但我想所涉及的东西都是最常用的;可能不是那么的严谨清晰,我想谁也没把我期望成专家!哈,有问题欢迎留言。正式开始。<br />    首先启动MDK.当然要先安装好MDK,如果找不到在哪里下载,可以翻翻我以前的博文。启动后的MDK界面如图1所示。

2011-05-16 16:09:00 10914

转载 mdk下虚拟串口

<br />使用MDK串口调试可以在没有硬件的情况下,让自己的PC机和嵌入式芯片通信,利于开发的前期调试,非常方便。<br />网上看了别人调试设置方法,可是还是弄了一小会儿才出来,感觉自己还是遇到了一些新的问题,所以在这将自己遇到的说出来。<br />首先,要使用MDK的串口调试工具有两样东西要准备:1,MDK编译环境(呵呵,这个必须);2,虚拟串口软件,推荐使用VSPD软件(网上容易找到破解版的,但是我在这儿遇到了问题,下边阐述)。<br />其次,先把VSPD软件安装好,我刚开始找了网上说比较好的破解

2011-05-14 21:23:00 3536 2

转载 分贝的含义

<br />分贝(工程应用)<br />  dB(Decibel,分贝) 是一个纯计数单位,本意是表示两个量的比值大小,没有单位。<br />  在工程应用中经常看到貌似不同的定义方式(仅仅是看上去不同)。对于功率,dB = 10*lg(A/B)。对于电压或电流,dB = 20*lg(A/B)。此处A,B代表参与比较的功率值或者电流、电压值。<br />  dB的意义其实再简单不过了,就是把一个很大(后面跟一长串0的)或者很小(前面有一长串0的)的数比较简短地表示出来。如(此处以功率为例):<br />  

2011-05-09 18:15:00 1542

转载 模拟电路设计经典教材推荐

终于开通博客了,给大家推荐基本经典教材,我也是从一位师兄那得到的!1. 拉扎维的《模拟CMOS集成电路设计》,我们研二模电课的教材,汪宁老师把这门课讲得可圈可点。当时没意识到有其他书,于是我就把此书读了好几遍。此书内容多摘自较新的论文,还未得到工业界的实践论证,所以一大特点就是pitfalls较多。但不失为为大家提供很多深入研究主题的sourcing。2. Phillip E. Allen的《CMOS模拟集成电路设计第二版》,此书工程性很强,适合有一定CMOS模电理论基础的人读。当时由于毕设想做ADC,于是

2011-05-04 16:17:00 7163 1

转载 Stm32 Systick定时器

请先参考以下材料:《Cortex-M3权威指南》《Cortex-M3 Technical Reference Manual》Q:什么是SYSTick定时器?SysTick 是一个24 位的倒计数定时器,当计到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息。Q:为什么要设置SysTick定时器?(1)产生操作系统的时钟节拍SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。在以前,大多操作系统需要一个

2011-04-24 16:15:00 3196

转载 #ifdef OS_GLOBLES… 变量/函数的定义和声明

<br />首先, 尽管一个全局变量或函数可以(在多个编译单元中) 有多处“声明”, 但是“定义” 却只能允许出现一次。定义是分配空间并赋初值(如果有) 的声明。最好的安排是在某个相关的.c 文件中定义, 然后在头文件(.h) 中进行外部声明, 在需要使用的时候, 只要包含对应的头文件即可。定义变量的.c 文件也应该包含该头文件, 以便编译器检查定义和声明的一致性。<br />    这条规则提供了高度的可移植性: 它和ANSI C标准一致, 同时也兼容大多数ANSI 前的编译器和连接器。Unix 编译器和

2011-04-24 14:47:00 3145

原创 STM32 ADC的规则通道和注入通道有什么区别

<br />STM32的每个ADC模块通过内部的模拟多路开关,可以切换到不同的输入通道并进行转换。STM32特别地加入了多种成组转换的模式,可以由程序设置好之后,对多个模拟通道自动地进行逐个地采样转换。<br />有2种划分转换组的方式:规则通道组和注入通道组。通常规则通道组中可以安排最多16个通道,而注入通道组可以安排最多4个通道。<br />在执行规则通道组扫描转换时,如有例外处理则可启用注入通道组的转换。<br />一个不太恰当的比喻是:规则通道组的转换好比是程序的正常执行,而注入通道组的转换则好比是

2011-04-22 10:28:00 2698 1

转载 C语言声明语法

<br />概述 <br />  在很多情况下,尤其是读别人所写代码的时候,对C语言声明的理解能力变得非常重要,而C语言本身的凝练简约也使得C语言的声明常常会令人感到非常困惑,因此,在这里我用一篇的内容来集中阐述一下这个问题。<br />  问题:声明与函数 <br />  有一段程序存储在起始地址为0的一段内存上,如果我们想要调用这段程序,请问该如何去做? <br />  答案<br />  答案是(*(void (*)( ) )0)( )。看起来确实令人头大,那好,让我们知难而上,从两个不同的途径来详细

2011-04-08 10:38:00 756

转载 C语言中的文件包含

很多人对C语言中的 “文件包含”都不陌生了,文件包含处理在程序开发中会给我们的模块化程序设计带来很大的好处,通过文件包含的方法把程序中的各个功能模块联系起来是模块化程序设计中的一种非常有利的手段。       文件包含处理是指在一个源文件中,通过文件包含命令将另一个源文件的内容全部包含在此文件中。在源文件编译时,连同被包含进来的文件一同编译,生成目标目标文件。    很多人再初学时都会对这个很晕,怎么写文件件? 怎么包含才能避免重定义? 等等问题。。。     其实这个只要了解了文件包含的基本处理方法就可以

2011-04-07 19:37:00 7423

转载 C/C++语言可变参数表深层探索

<br />1.引言 <br />C/C++语言有一个不同于其它语言的特性,即其支持可变参数,典型的函数如printf、scanf等可以接受数量不定的参数。如: <br />printf ( "I love you" ); <br />printf ( "%d", a ); <br />printf ( "%d,%d", a, b ); <br />第一、二、三个printf分别接受1、2、3个参数,让我们看看printf函数的原型: <br />int printf ( const char *forma

2011-03-21 17:00:00 609

原创 C/C++语言void 及void 指针深层探索

<br />1.概述<br />  许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。<br />  2.void的含义<br />void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。<br />  void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义:<br /><br />voi

2011-03-19 15:41:00 533

转载 解引用:dereference,look at the contents of the address contained in

c语言中“解引用”为什么理解这么困难<br />对于c语言中指针的操作符有两个:&和*。对于&,好理解,翻译的也不错,就是“取地址”的意思。但对于*,翻译为“解引用”,字面意思不好理解,即使看了后面内容才知道不过是“取指针指向的地址的内容”,也仍然是觉得怪怪的,“解引用”这个词难记也难于从字面直接判断意思,以致时间长了还是感觉像见了熟悉的陌生人。<br />翻了好多资料,以及各种网上解释,现在大约有点意思了。依我现在的理解,约摸是这样:<br />“引用”这个词,出现最多的场景就是:在文章或者注脚里,写上“

2011-03-19 10:13:00 1475

转载 Tag vs. Type Names

Dan Saks 10/1/2002 9:46 AM EDTTag vs. Type NamesC treats tags as second class types. C++ isn't much kinder. Here's how to give them first-class treatment in both languages.Identifiers are among the most basic elements of programming languages. Languages us

2011-03-17 19:10:00 714

转载 Catching errors early with compile-time assertions

Dan Saks 6/17/2005 4:44 PM EDTFor some time now, I've been discussing how to use structures in C and C++ to define the layout of memory-mapped device registers. In my last column ("Sizing and Aligning Device Registers," May 2005, p.9), I presented techniqu

2011-03-16 19:53:00 785

转载 Sizing and aligning device registers

Dan Saks 4/7/2005 3:45 PM EDTModeling memory-mapped device registers is easy in concept but can be tricky in practice.<br />In my last three columns, I discussed variations on a basic technique for accessing memory-mapped device registers using C and C++.1

2011-03-16 19:52:00 723

转载 More ways to map memory

Dan Saks 12/14/2004 4:18 PM ESTThe most elegant and pleasing notation might not be the most efficient one.<br />This is the third in a series of articles on accessing memory-mapped device registers using C and C++. In my previous column (November 2004), I

2011-03-16 19:49:00 686

转载 Mapping memory efficiently

Dan Saks 10/20/2004 3:00 PM EDTHow you define pointers to memory-mapped device registers can have an impact on the efficiency of your device drivers.<br />Many processors use memory-mapped I/O, which maps device registers to fixed addresses in the conventi

2011-03-16 19:48:00 554

转载 Mapping memory

Dan Saks 8/11/2004 11:00 AM EDTMemory-mapped I/O is something you can do reasonably well in standard C and C++.Device drivers communicate with peripheral devices through device registers. A driver sends commands or data to a device by storing into its devi

2011-03-16 19:47:00 953

转载 Introduction to fixed-width integers

Michael Barr 1/8/2004 1:00 PM ESTFor embedded programmers the most important improvement to C in the C99 standards is the new stdint.h header file.Computer programmers don't always care how wide an integer is when held by the processor. For example, when w

2011-03-16 19:44:00 901

转载 Volatile as a promise

Dan Saks 1/4/2006 8:12 PM ESTLast time around, I advised you to place the volatile qualifier where it most accurately models the behavior of your hardware.1 In justifying that advice, I mentioned that for any type T, both C and C++ provide a standard (buil

2011-03-15 16:06:00 900

转载 Place volatile accurately

Dan Saks 11/16/2005 3:26 PM ESTA volatile object is one whose value might change spontaneously. That is, when you declare an object to be volatile, you're telling the compiler that the object might change state even though no statements in the program appe

2011-03-15 16:03:00 931

转载 Use volatile judiciously

Dan Saks 9/7/2005 7:01 PM EDTAccording to the syntax rules of C and C++, the keyword volatile can appear anywhere that the keyword const can. Whereas a const object is one whose value the program can't change, a volatile object is one whose value might cha

2011-03-15 16:01:00 647

转载 typedef用法详解

<br />用途一: <br />定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: <br />char* pa, pb;  // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针,  <br />// 和一个字符变量; <br />以下则可行: <br />typedef char* PCHAR;  // 一般用大写 <br />PCHAR pa, pb;        // 可行,同时声明了两个指向字符变量的指针 <br />虽然: <br />char *pa

2011-03-15 10:49:00 711

Embedded Systems Building Blocks

ucosii作者一力作,讲解了嵌入式系统的构建组成及相互关系,是一本入门嵌入式的好文档

2011-10-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除