2012年4月3日

(原创)处理器强制进入硬件错误中断(Hardware interrupt)

摘要: 如何测试处理器的硬件错误中断是否有效或者使处理器强制进入硬件错误中断呢?其实处理器发生硬件错误中断的原因同时是因为往非法地址写值而造成的,比如堆栈溢出或数组溢出进入硬件错误中断都是往非法地址写值造成的。记住: 硬件错误中断通常并不是处理器外设配置出错造成的,可不要被名字给误解如(STM32处理器):0xFFFFFFFF是非法区域。*(unsignedint*)(0xFFFFFFFF)=0x55;编译运行之后,程序马上会进入硬件错误中断。作者:tdyizhen1314 (现从事LED行业,专注于户外大型LED显示屏控制系统的研发,希望与大家一起交流,共同进步)邮箱:495567585@qq.co 阅读全文

posted @ 2012-04-03 18:11 tdyizhen1314 阅读(1396) 评论(0) 推荐(1) 编辑

(笔记)往一个指定的地址读写一个值

摘要: 一、如何往一个指定的地址写入一个值呢? 举例: (向0x2000100001处写入值0x12345678): *(unsigned int *)0x20010000 = 0x12345678; 分析: 1、0x20010000是待写入的地址。 2、(unsigned int *)0x20010000 阅读全文

posted @ 2012-04-03 18:03 tdyizhen1314 阅读(2140) 评论(0) 推荐(0) 编辑

(转)C 语言高效编程的几招

摘要: 编写高效简洁的C语言代码,是许多软件工程师追求的目标。本文就工作中的一些体会和经验做相关的阐述,不对的地方请各位指教。第 1 招:以空间换时间计算机程序中最大的矛盾是空间和时间的矛盾,那么从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间。例如:字符串的赋值。方法 A,通常的办法:#define LEN 32char string1 [LEN];memset (string1,0,LEN);strcpy (string1,"This is an example!!"方法 B:const char string2[LEN]="Th 阅读全文

posted @ 2012-04-03 17:37 tdyizhen1314 阅读(402) 评论(0) 推荐(1) 编辑

(转)常用算法大全-贪婪算法

摘要: 原地址:http://www.cnblogs.com/tuyile006/archive/2007/06/07/774734.html本章首先引入最优化的概念,然后介绍一种直观的问题求解方法:贪婪算法。最后,应用该算法给出货箱装船问题、背包问题、拓扑排序问题、二分覆盖问题、最短路径问题、最小代价生成树等问题的求解方案。1.1 最优化问题 本章及后续章节中的许多例子都是最优化问题( optimization problem),每个最优化问题都包含一组限制条件( c o n s t r a i n t)和一个优化函数( optimization function),符合限制条件的问题求解方案称为可 阅读全文

posted @ 2012-04-03 17:36 tdyizhen1314 阅读(530) 评论(0) 推荐(0) 编辑

(转)__inline的用法

摘要: __inline的用法一、inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。表达式形式的宏定义一例:#define ExpressionName(Var1,Var2) ((Var1)+(Var2))*((Var1)-(Var2))为什么要取代这种形式呢,且听我道来:1. 首先谈一下在C中使用这种形式宏定义的原因,C语言是一个效率很高的语言,这种宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈,代码生成等一系列的操作,因此,效率很高,这是它在C中被使用的一个主要原因。2. 这种宏定义在形式上类似于一个函数,但在使用它时,仅仅只是做 阅读全文

posted @ 2012-04-03 17:33 tdyizhen1314 阅读(380) 评论(0) 推荐(1) 编辑

(转)链表,反向链表的相关操作

摘要: 假设链表节点的数据结构为:struct node {int data;struct node* next;};创建单链表的程序为:struct node* create(unsigned int n){//创建长度为n的单链表assert(n > 0);node* head;head = new node;head->next = NULL;cout << "请输入head节点的值(int型):";cin >> head->data;if (n == 1){ return head;}node* p = head;for (unsi 阅读全文

posted @ 2012-04-03 17:32 tdyizhen1314 阅读(2167) 评论(1) 推荐(1) 编辑

(转)堆和链表

摘要: 我们经常在题目中有要求,输入一个整数,然后以这个整数作为数组的元素个数,下面的程序代码是错误的。intn,array[n];scanf(%d,&n);在TurboC中,不允许出现动态数组。那么如果必须需要这样时,就只能使用链表了。一、堆堆是一种动态存储结构,实际上就是数据段中的自由存储区,它是C语言中使用的一种名称,常常用于动态数据的存储分配。堆中存入一数据,总是以2字节的整数倍进行分配,地址向增加方向变动。堆可以不断进行分配直到没有堆空间为止,也可以随时进行释放、再分配,不存在次序问题。所谓动态数组是指在程序运行期间确定其大小的,如常用到的动态数组,它们是在程序执行过程中动态进行变化 阅读全文

posted @ 2012-04-03 17:31 tdyizhen1314 阅读(393) 评论(0) 推荐(0) 编辑

(转)巧妙运用C语言位运算

摘要: 位运算 位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果。 位运算符有: &(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。 其中,按位取反运算符是单目运算符,其余均为双目运算符。 位运算符的优先级从高到低,依次为~、&、^、|, 其中~的结合方向自右至左,且优先级高于算术运算符,其余运算符的结合方向都是自左至右,且优先级低于关系运算符。 (1)按位与运算符(&) 按位与运算将两个运算分量的对应位按位遵照以下规则进行计算: 0 & 0 = 0, 0 & 1 = 0, 阅读全文

posted @ 2012-04-03 17:30 tdyizhen1314 阅读(9556) 评论(0) 推荐(4) 编辑

(转)C语言字节对齐

摘要: 图片可以在下面的博客中看到.转自:http://blog.csdn.net/bigloomy/article/details/6633008可能有不少读者会问,字节对齐有必要拿出来单独写一篇博客嘛?我觉得是很有必要,但是它却是被很多人所忽视的一个重点。那么我们使用字节对齐的作用和原因是什么呢?由于硬件平台之间对存储空间的处理上是有很大不同的,一些平台对某些特定类型的数据只能从某些特定地址开始存取,如通常有些架构的CPU要求在编程时必须保证字节对齐,否则访问一个没有进行字节对齐的变量的时候会发生错误。而有些平台可能没有这种情况,但是通常的情况是如果我们编程的时候不按照适合其平台要求对数据存放进行 阅读全文

posted @ 2012-04-03 17:27 tdyizhen1314 阅读(894) 评论(0) 推荐(1) 编辑

(转)STM32学习笔记(7):USART串口的使用

摘要: STM32学习笔记(7):USART串口的使用2011年4月19日 USART串口通信1. 串口的基本概念在STM32的参考手册中,串口被描述成通用同步异步收发器(USART),它提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互联网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。还可以使用DMA方式,实现高速数据通信。USART通过3个引脚与其他设备连接在一起,任何US 阅读全文

posted @ 2012-04-03 17:24 tdyizhen1314 阅读(7314) 评论(0) 推荐(1) 编辑

(转)STM32学习笔记(6):LCD的显示

摘要: STM32学习笔记(6):LCD的显示2011年4月14日 LCD显示1. LCD/LCM的基本概念液晶显示器(Liquid Crystal Display: LCD)的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。LCM(LCD Module)即LCD显示模组、液晶模块,是指将液晶显示器件,连接件,控制与驱动等外围电路,PCB电路板,背光源,结构件等装配在一起的组件。在平时的学习开发中,我们一般使用的是LCM,带有驱动IC和LCD屏幕等多个模块。2. FSMC的基本概念在STM32上开发LCD 阅读全文

posted @ 2012-04-03 17:22 tdyizhen1314 阅读(16683) 评论(1) 推荐(0) 编辑

(转)STM32学习笔记(4):通用定时器基本定时功能

摘要: STM32学习笔记(4):通用定时器基本定时功能 2011年3月29日 TIMER基本定时功能1. STM32的Timer简介STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。其中系统嘀嗒定时器是前文中所描述的SysTick,看门狗定时器以后再详细研究。今天主要是研究剩下的8个定时器。其中TIM1和TIM8是能够产生3对PWM互补输出的高级登时其,常用于三相电机的驱动,时钟由APB2的输出产生。TIM2-TIM5是普通定时器,TIM6和TIM7是基本定时器,其时钟由APB1输出产生。由于STM32的TIMER功能太 阅读全文

posted @ 2012-04-03 17:21 tdyizhen1314 阅读(1334) 评论(0) 推荐(0) 编辑

(转)STM32学习笔记(5):通用定时器PWM输出

摘要: STM32学习笔记(5):通用定时器PWM输出2011年3月30日 TIMER输出PWM1. TIMER输出PWM基本概念脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。一般用来控制步进电机的速度等等。STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出。1.1 PWM输出模式STM32的PWM输出有两种模式,模式 阅读全文

posted @ 2012-04-03 17:21 tdyizhen1314 阅读(4701) 评论(1) 推荐(0) 编辑

(转)STM32学习笔记(3):系统时钟和SysTick定时器

摘要: STM32学习笔记(3):系统时钟和SysTick定时器2011年3月21日 系统时钟和SysTick定时器1. STM32的时钟系统在STM32中,一共有5个时钟源,分别是HSI、HSE、LSI、LSE、PLL(1)HSI是高速内部时钟,RC振荡器,频率为8MHz;(2) HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围是4MHz – 16MHz;(3)LSI是低速内部时钟,RC振荡器,频率为40KHz;(4)LSE是低速外部时钟,接频率为32.768KHz的石英晶体;(5) PLL为锁相环倍频输出,严格的来说并不算一个独立的时钟源,PLL的输入可以接HSI/2、HSE 阅读全文

posted @ 2012-04-03 17:20 tdyizhen1314 阅读(2180) 评论(0) 推荐(0) 编辑

(转)STM32学习笔记(2):外部中断的使用

摘要: STM32学习笔记(2):外部中断的使用2011年3月20日 外部中断中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部中断,2个定时/计数器中断和一个串口中断,但是在STM32中,中断数量大大增加,而且中断的设置也更加复杂。今天就将来探讨一下关于STM32中的中断系统。1 基本概念ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级的设置,仅使用中断优先级设置8bit中的高4位。STM3 阅读全文

posted @ 2012-04-03 17:19 tdyizhen1314 阅读(3880) 评论(0) 推荐(4) 编辑

(转)STM32学习笔记(1):GPIO口的使用

摘要: STM32学习笔记(1):GPIO口的使用2011年3月19日 顺序点亮LED灯摸索了很久之后终于把ARM开发板上的LED灯点亮了,虽然是很简单的一个IO口操作,但是由于以前从来都没有什么经验,所以浪费了很多时间,也查找了很多资料。现在可以操作IO口了,证明迈出了学习ARM的第一步。实验平台清单如下:开发板: 奋斗STRIVE V3核心芯片: STM32F103VET6开发环境: RealView MDK-ARM Version:3.50PC操作系统: Windows 7 家庭普通版仿真器: SEGGER J-Link其中,STM32F103VET6芯片是基于ARM Cortex-M3内核的, 阅读全文

posted @ 2012-04-03 17:18 tdyizhen1314 阅读(14746) 评论(0) 推荐(1) 编辑

(转)如何以32 bit的方式存取SDRAM?

摘要: 全文地址:http://www.cnblogs.com/oomusou/archive/2008/11/25/sdram32.htmlAbstract在DE2因為只有一顆16 bit的SDRAM,儘管Nios II CPU是32 bit,存取SDRAM時必須透過Dyanamic Bus Sizing機制,花2個clk才能將32 bit資料讀取/寫入SDRAM;但DE2-70有2顆16 bit SDRAM,是否使用雙通道的方式,將這2顆16 bit SDRAM看成1顆32 bit SDRAM使用呢?Introduction這個做法是Mithril所提供,感謝Mithril無私的分享,我只是加以整 阅读全文

posted @ 2012-04-03 17:10 tdyizhen1314 阅读(546) 评论(0) 推荐(0) 编辑

(转)如何設計乘加電路?

摘要: 全文地址:http://www.cnblogs.com/oomusou/archive/2008/10/11/verilog_alt_multadd.htmlAbstractz = a*b + c*d;一個很簡單的運算,該如何使用數位電路實現呢?Introduction使用環境:Quartus II 8.0在(原創) 如何設計2數相加的電路? (SOC) (Verilog)中,我們討論過如何實現y = a + b;但在實務上,其實最常用的是y = a*b + c*d,由於Verilog與數位電路本身的限制,不適合真的去實現很複雜的數學,就算真的實現出來,電路也跑不快,又佔resource,所以 阅读全文

posted @ 2012-04-03 17:09 tdyizhen1314 阅读(280) 评论(0) 推荐(0) 编辑

(转)如何编写testbench的总结(非常实用的总结)

摘要: 全文地址:http://hi.baidu.com/li0610302/blog/item/ffe232ed59e4dbd82f2e219e.html如何编写testbench的总结(非常实用的总结)1.激励的设置相应于被测试模块的输入激励设置为reg型,输出相应设置为wire类型,双向端口inout在测试中需要进行处理。方法1:为双向端口设置中间变量inout_reg作为该inout的输出寄存,inout口在testbench中要定义为wire型变量,然后用输出使能控制传输方向。eg:inout [0:0]bi_dir_port;wire[0:0]bi_dir_port;reg[0:0]bi_ 阅读全文

posted @ 2012-04-03 17:07 tdyizhen1314 阅读(567) 评论(0) 推荐(0) 编辑

(转)Altera Forum精彩问答汇总

摘要: 原文链接:http://group.ednchina.com/56/31122.aspxAltera Forum精彩问答汇总I can't afford losing any of these invaluable information anymore! It is not too late if I start reading and collecting them from now on. I will look the threads through everyday as I do with my Hotmail E-mails and EETimes RSSs.It' 阅读全文

posted @ 2012-04-03 17:06 tdyizhen1314 阅读(304) 评论(0) 推荐(0) 编辑

导航