摘要:如何测试处理器的硬件错误中断是否有效或者使处理器强制进入硬件错误中断呢?其实处理器发生硬件错误中断的原因同时是因为往非法地址写值而造成的,比如堆栈溢出或数组溢出进入硬件错误中断都是往非法地址写值造成的。记住: 硬件错误中断通常并不是处理器外设配置出错造成的,可不要被名字给误解如(STM32处理器):0xFFFFFFFF是非法区域。*(unsignedint*)(0xFFFFFFFF)=0x55;编译运行之后,程序马上会进入硬件错误中断。作者:tdyizhen1314 (现从事LED行业,专注于户外大型LED显示屏控制系统的研发,希望与大家一起交流,共同进步)邮箱:495567585@qq.co
阅读全文
摘要:一、如何往一个指定的地址写入一个值呢? 举例: (向0x2000100001处写入值0x12345678): *(unsigned int *)0x20010000 = 0x12345678; 分析: 1、0x20010000是待写入的地址。 2、(unsigned int *)0x20010000
阅读全文
摘要:编写高效简洁的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
阅读全文
摘要:原地址: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),符合限制条件的问题求解方案称为可
阅读全文
摘要:__inline的用法一、inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。表达式形式的宏定义一例:#define ExpressionName(Var1,Var2) ((Var1)+(Var2))*((Var1)-(Var2))为什么要取代这种形式呢,且听我道来:1. 首先谈一下在C中使用这种形式宏定义的原因,C语言是一个效率很高的语言,这种宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈,代码生成等一系列的操作,因此,效率很高,这是它在C中被使用的一个主要原因。2. 这种宏定义在形式上类似于一个函数,但在使用它时,仅仅只是做
阅读全文
摘要:假设链表节点的数据结构为: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
阅读全文
摘要:我们经常在题目中有要求,输入一个整数,然后以这个整数作为数组的元素个数,下面的程序代码是错误的。intn,array[n];scanf(%d,&n);在TurboC中,不允许出现动态数组。那么如果必须需要这样时,就只能使用链表了。一、堆堆是一种动态存储结构,实际上就是数据段中的自由存储区,它是C语言中使用的一种名称,常常用于动态数据的存储分配。堆中存入一数据,总是以2字节的整数倍进行分配,地址向增加方向变动。堆可以不断进行分配直到没有堆空间为止,也可以随时进行释放、再分配,不存在次序问题。所谓动态数组是指在程序运行期间确定其大小的,如常用到的动态数组,它们是在程序执行过程中动态进行变化
阅读全文
摘要:位运算 位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果。 位运算符有: &(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。 其中,按位取反运算符是单目运算符,其余均为双目运算符。 位运算符的优先级从高到低,依次为~、&、^、|, 其中~的结合方向自右至左,且优先级高于算术运算符,其余运算符的结合方向都是自左至右,且优先级低于关系运算符。 (1)按位与运算符(&) 按位与运算将两个运算分量的对应位按位遵照以下规则进行计算: 0 & 0 = 0, 0 & 1 = 0,
阅读全文
摘要:图片可以在下面的博客中看到.转自:http://blog.csdn.net/bigloomy/article/details/6633008可能有不少读者会问,字节对齐有必要拿出来单独写一篇博客嘛?我觉得是很有必要,但是它却是被很多人所忽视的一个重点。那么我们使用字节对齐的作用和原因是什么呢?由于硬件平台之间对存储空间的处理上是有很大不同的,一些平台对某些特定类型的数据只能从某些特定地址开始存取,如通常有些架构的CPU要求在编程时必须保证字节对齐,否则访问一个没有进行字节对齐的变量的时候会发生错误。而有些平台可能没有这种情况,但是通常的情况是如果我们编程的时候不按照适合其平台要求对数据存放进行
阅读全文
摘要:STM32学习笔记(7):USART串口的使用2011年4月19日 USART串口通信1. 串口的基本概念在STM32的参考手册中,串口被描述成通用同步异步收发器(USART),它提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互联网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。还可以使用DMA方式,实现高速数据通信。USART通过3个引脚与其他设备连接在一起,任何US
阅读全文
摘要: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
阅读全文
摘要: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功能太
阅读全文
摘要: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输出有两种模式,模式
阅读全文
摘要: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
阅读全文
摘要: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
阅读全文
摘要: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内核的,
阅读全文
摘要:全文地址: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無私的分享,我只是加以整
阅读全文
摘要:全文地址: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,所以
阅读全文
摘要:全文地址: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_
阅读全文
摘要:原文链接: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'
阅读全文
摘要:转载地址:http://www.cnblogs.com/Jerome_Lee/archive/2009/11/19/1606358.html1、状态机的问题,尽量不要写出太大的状态机,宁愿用一些小型的状态机来相互关联。2、推荐大家使用timequest来做时序约束,好处是,它可能对你的时序约束和你的设计对照做分析,在做时序分析之前,先对你的约束做分析,然后告诉你,你有多少该做的事情而没有做的(为被约束的路径)还有多少你要求做的,而没有被做的(被忽略的时序要求)。3、对时钟的约束,要重点关注两个现象。首先是尽量少的在时钟路径上引入逻辑,否则可能造成了时钟和时钟之间的skew。另外就是一种上下沿都
阅读全文
摘要:各厂商综合工具,对HDL综合时都定义了一些综合属性这些属性可指定a declaration,a module item,a statement, or a port connection 不同的综合方式。语法为:/* synthesis, <any_company_specific_attribute = value_or_optional_value */下面就是Altera的几个常用的Synthesis attributesNopruneA Verilog HDL synthesis attribute that prevents the Quartus II software fr
阅读全文
摘要:相信很多网友在学习C语言是总是为找到合适的书籍而犯愁,在国内,我相信大家听得最多的就是有关谭浩强的<c语言程序设计>了,对于此书我不做评价,如果你看了此书,好与不好在你看了以下几本后应该会有一个全新的认识。在这里,我根据自己的切身体会向大家推荐几本书,相信这几本书能够帮助大家更深刻的了解C语言的世界:1、C程序设计语言(The C Programming Language) c语言的圣经,当为初学者之首选,并反复阅读之。这本书虽然只有简简单单的两百多页,但却把C语言描述得非常透彻,国外人写的书,大家都明白,讲究的是实在。2、Expert C Programming(C专家编程) 一
阅读全文
摘要:有很多理由都能说明为什么我们应该写出清晰、可读性好的程序。最重要的一点,程序你只写一次,但以后会无数次的阅读。当你第二天回头来看你的代码时,你就要开始阅读它了。当你把代码拿给其他人看时,他必须阅读你的代码。因此,在编写时多花一点时间,你会在阅读它时节省大量的时间。 让我们看一些基本的编程技巧:尽量保持方法简短永远永远不要把同一个变量用于多个不同的目的使用自描述的变量名和方法名尽可能的把变量定义在靠近使用它的地方拒绝神秘数字友好的对待你的语言不要逆常规而行警惕过早优化积极重构测试过的程序不要过度沉迷于技巧通过习例学习新知 现在,让我们把每个小点展开来详细讲一下。 1. 尽量保持方法简短 ...
阅读全文
摘要:最近公司需要使用一种新型的光感器件,TSL235,此器件类似于我们平时最经常用的直插好式三极管8050封装,TSL235通过感知外界光强的变化,输出50%占空比的方波,用户可以通过其输出的方波频率来获知外界的光强。优点:精准 反应灵敏 抗干扰性强 稳定性高 操作简单附:TSL235数据手册http://wenku.baidu.com/view/4b7fcbbcc77da26925c5b0b9.html注:从数据手册上可以看到TSL235的供电建议为5V,范围从2.7V-6V,可实际使用中发现当使用3.3V的供电其输出会更稳定,呈现完美的50%占空比,而使用5V供电时其输出波形变化系数相对而言较
阅读全文
摘要:在对片内FLASH编程时,查看芯片数据手册上面说只需配置FMA、FMD、FMC三个寄存器就行了,可是忽略了很重要的一点,这一点在AN01237[ProgrammingtheOn-ChipFlashMemoryinaStellarisMicrocontroller]笔记上面说明了,就是一定要配置FLASH操作的时钟频率USECRL以确保正确的时序。AN01237相关文档及详细说明请看:http://www.cnblogs.com/tdyizhen1314/archive/2012/10/16/2726734.html另外一定要慎重对片内FLASH使用ReadOnly模式,否则很有可能使你的芯片无
阅读全文
摘要:关于C语言类型扩展的问题,经常被大家忽略,因为这是一个很隐秘的问题,请看下文:void func(void){ int i=1; unsignedchar c1= 1; signed char c2 = -1; if(c2> i) dprintf("\r\n -1 > 1"); else dprintf("\r\n -1 <= 1"); if(c2> c1) dprintf("\r\n -1> 1"); else dprintf("\r\n -1<= 1");}实际运行结果会是多
阅读全文
摘要:Abstractprintf()只能顯示10、8、16進位的值,卻無法顯示2進位的值,但有時候我們會希望能直接顯示2進位數字。Introduction使用環境:Visual C++ 8.0 / Visual Studio 2005Method 1:這是從C Primer Plus 5/e改寫的,使用bit運算來將10進位轉2進位,相當漂亮的寫法。decimal2binary.c / C1/*2(C) OOMusou 2008 http://oomusou.cnblogs.com34Filename : decimal2binary.c5Compiler : Visual C++ 8.06Des
阅读全文
摘要:Abstract本文介紹使用ModelSim做前仿真,並搭配Quartus II與ModelSim作後仿真。Introduction使用環境:Quartus II 8.1 + ModelSim-Altera 6.3g由於FPGA可重複編程,所以不少開發人員就不寫testbench,直接使用Quartus II的programmer燒進開發板看結果,或者使用Quartus II自帶的Waveform Editor進行仿真,這種方式雖然可行,但僅適用於小project,若project越寫越大,Quartus II光做fitter就很耗時間,一整天下來都在作Quartus II編譯。比較建議的方式
阅读全文
摘要:Abstract在FPGA開發中,常會用到Altera所提供的Megafunction與LPM加速開發,這要如何使用ModelSim作仿真呢?Introduction使用環境:Quartus II 8.1 + ModelSim-Altera 6.3g_p1 + ModelSim SE 6.3e在(筆記) 如何使用ModelSim作前仿真與後仿真? (SOC) (Quartus II) (ModelSim)中,提到如何使用ModelSim對Verilog作仿真,包含前仿真與後仿真,若使用了Altera的Megafunction與LPM,則仿真的方法稍有不同,本文分別使用ModelSim-Alte
阅读全文
摘要:Abstract撰寫Verilog時,雖然每個module都會先用ModelSim或Quartus II自帶的simulator仿真過,但真的將每個module合併時,一些不可預期的『run-time』問題可能才一一浮現,這時得靠SignalTap II來幫忙debug。Introduction使用環境:Quartus II 8.0 + DE2-70 (Cyclone II EP2C70F896C6N)實際使用SignalTap II時,會發現有些reg與wire可以觀察,有些又無法觀察,在(原創) 如何使用SignalTap II觀察reg值? (IC Design) (Quartus II
阅读全文
摘要:Abstract無法在SignalTap II觀察reg與wire,主要都是因為被Quartus II優化的關係,在Quartus II簡單的設定,就能增加SignalTap II能觀察的數量。Introduction使用環境:Quartus II 8.0在(原創) 如何使用SignalTap II觀察reg與wire值? (SOC) (Verilog) (Quartus II) (SignalTap II)中,我透過synthesis attribute強制指定Quartus II對某個reg與wire不加以優化,以方便SignalTap II觀察,雖然可行,但必須改code是其缺點,若能在
阅读全文