自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(298)
  • 资源 (2)
  • 收藏
  • 关注

原创 FPGA时序约束2

上一篇已经简单的介绍了时序,本文将会以一个ADC实例简单粗暴的进行分析;现有一块ADC连接到FPGA上,需要在FPGA上实现高速数据的读取,那么第一步自然就是完成可靠的硬件连线,其中需要注意的是:1. 注意信号的完整性,尽可能的避免边沿退化;这两区分两个概念:    i. 高速信号,指的是信号翻转,由高电平到低电平或者反之所耗得时间非常小;可能一个1MHz的TT

2017-07-13 11:48:45 1010

转载 FPGA设计-时序约束1

最近都在做ARM的方面学习工作,感觉有必要记录下来之前FPGA的工作,好记性也不如烂笔头;说起FPGA,断断续续的也用过4,5年了,中间接触过DSP,就是因为没有记录文档资料,目前几乎快忘光了;FPGA方面的心得,将会由以下几个方面进行总结:1. FPGA时序约束以及高速ADC约束实例2. TDC进位延时链设计以及研究3. TDC的精度以及自动校正算法的实现 

2017-07-13 11:21:35 998

原创 ping-pong操作

下图给出了pingpang的基本原理框图,从图上可以看出使用pingpang的主要作用 就是使用多个低速的数据预处理模块处理高速的输入数据流。这样做可以提高系统的数据吞吐量(如果不使用乒乓的话数据预处理模块会成为设计中限制系统数据吞 吐量的瓶颈),同时增加了数据缓冲延迟。另一个解释:所谓ping-pong buffer,也就是定义两个buffer,当

2017-03-20 09:53:24 4029

原创 指针

说在前面的话不得不说,看了太多的人在各种地方讨论指针……越发看下去,越发觉得简单的事情被搞那么复杂,真是够了,求求你们,放开那个变量,让我来!以下讨论均以ARM环境下使用C语言进行嵌入式软件开发为背景。感谢网友的批评指正。1、从变量的三要素开始谈起  为了把复杂的事情说简单,我们抛开指针先从变量谈起。(好吧,不知道这个笑话是不是够冷)一个变量(V

2016-12-28 10:40:54 791 1

原创 时间触发调度器

/********************************************************************************//******************************数据结构******************************************/typedef tWord unsigned int;typedef tB

2016-12-23 10:36:38 1619 1

原创 题目:多功能按键设计。利用一个I/O口,接一个按键,实现3功能操作:单击 + 双击 + 长按。

题目:多功能按键设计。利用一个I/O口,接一个按键,实现3功能操作:单击 + 双击 + 长按。 ============================================================================ 用户基本操作定义: 1。短按操作:按键按下,按下时间<1s,属于一次短按操作 2。长按操作:按键按下,按下时间>1s,属于一

2016-12-22 10:06:09 3783 2

原创 马潮按键扫描状态机思想10ms执行一次

#define key_input PIND.7 // 按键输入口#define key_state_0 0#define key_state_1 1#define key_state_2 2char read_key(void){ st

2016-12-22 09:37:21 3102

原创 基于状态机思想的按键扫描程序支持单按,连续按,长按模式。

typedef enum { ButtonsStateUp = 0, ButtonsStateDownJitter , ButtonsStateDown , ButtonsStateUpJitter} EnumButtonsState;typedef unsigned char uint8;typedef unsigned lon

2016-12-13 11:00:41 1732

原创 YModem协议

YModem协议:         YModem协议是由XModem协议演变而来的,每包数据可以达到1024字节,是一个非常高效的文件传输协议。         下面先看下YModem协议传输的完整的握手过程:先看下图SENDER:发送方。RECEIVER:接收方。第一步先由接收方,发送一个字符'C'发送方收到'C'后,发送第

2016-11-03 16:15:39 712

原创 swim swd jtag

LED状态说明闪烁红色:ST-LINK/V2连接到计算机后,第一次USB枚举过程红色:ST-LINK/V2与计算机已建立连接闪烁绿色/红色:目标板和计算机在进行数据交换绿色:通讯完成橙色(红色+绿色):通讯失败---------------------------------------------------------------------------------

2016-11-03 14:37:38 2031

原创 line_fit

#include #include #include #define POINTS_NUM 6typedef struct { double x; double y;}typePoints;typePoints points[POINTS_NUM] = { { 0 , 0.002 }, { 0.1 , 0.082 }, { 0.2 ,

2016-11-01 15:31:10 774

原创 DMA理解

单片机的DMA使用心得本人也是最近才深入了解一下DMA,前期使用单片机的时候基本上没有用到。一是不需要用到,二是心理上觉得DMA比较困难,所以不使用。在学习的过程中有一些心得体会,与大家分享一下。首先介绍一下啥子是DMA,说的通俗易懂一点就是一个搬运工。既然是搬运工,就有几个需要注意的问题。1.        从哪里搬运到哪里   一般是特殊寄存器到RAM(我们自己定义的数组里面),或

2016-11-01 14:16:44 5404 1

原创 ping-pong操作

1 什么是pingpong?   pingpong是一种数据缓存的手段,通过pingpong操作可以提高数据传输的效率。2 什么时候需要pingpong?在两个模块间交换数据时,上一级处理的结果不能马上被下一级所处理完成,这样上一级必须等待下一级处理完成才可以送新的数据,这样就会对性能产生很大的损失。引入pingpong后我们可以不去等待下一级处理结束,而是将结果保

2016-10-31 16:35:56 22214

原创 // 递推平均滤波法(又称滑动平均滤波法)

// 递推平均滤波法(又称滑动平均滤波法)#define FILTER_N 12int filter_buf[FILTER_N + 1];int Filter() {int i;int filter_sum = 0;filter_buf[FILTER_N] = Get_AD(); //AD转换的值赋给数组最后一个值for(i = 0; i {filter_b

2016-10-20 14:31:17 2959

原创 ccitt crc16

CCITT CRC-16计算原理与实现 (2010-04-01 13:18:52)转载▼标签: 杂谈 CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验。它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制。实际上,除数据通信外,CRC在其它很多领域也是大有用武之地的。例如我们读软盘上的文件,以及解压一个ZIP文件时

2016-07-18 11:05:42 1427

原创 C++运算符优先级

C++ 运算符优先级列表:http://www.cppblog.com/aqazero/archive/2012/11/10/8284.html

2016-06-05 09:51:02 429

原创 ccs5命令行编译

Code Composer Studio提供了几个命令行工具,用户可以使用这些工具创建工程,编译工程,导入工程文件到本地工作空间。使用这些工具,用户可以在不启动CCS图形界面的情况下对工程进行操作,简化工程文件的版本维护,方便自动化测试等。创建工程的格式:eclipsec –noSplash -data -application com.ti.ccstudio.apps.projec

2016-03-09 14:38:02 6681 1

原创 dsp 定标

一 DSP定点算数运算1 数的定标在定点DSP芯片中,采用定点数进行数值运算,其操作数一般采用整型数来表示。一个整型数的最大表示范围取决于DSP芯片所给定的字长,一般为16位或24位。显然,字长越长,所能表示的数的范围越大,精度也越高。在字长固定的前提下,所需要达到的精度越高,那么所能表示的浮点数的范围就会越小。如无特别说明,本书均以16位字长为例。DSP芯片的数以2的补码形式表示。每

2016-03-07 19:28:13 4811

原创 uc/os ii 处理全局变量的方法

以下是如何定义全局变量。众所周知,全局变量应该是得到内存分配且可以被其他模块通过C语言中extern关键字调用的变量。因此,必须在 .C 和 .H文件中定义。这种重复的定义很容易导致错误。以下讨论的方法只需用在头文件中定义一次。虽然有点不易懂,但用户一旦掌握,使用起来却很灵活。表1.2中的定义出现在定义所有全局变量的.H头文件中。 程序清单  定义全局宏

2016-02-16 16:33:05 823

原创 嵌入式代码结构

嵌入式项目代码结构的分层——HAL(硬件抽象层)、FML(功能模块层)、APL(应用程序层) 2011-03-07 20:09 by 鹏程, 1954 visits, 收藏, 编辑 一、遇到的问题 在“Zigbee 之旅”系列博文中,每写一篇笔者都会编写一个小实验来展开讲解。通过这一段时间的实践,我积累了一些编码经验,但也体会到了之前 的代码结构的缺陷: (1)开发效率低:每次使用片内的某

2016-02-14 09:31:09 2465 1

原创 spi--master

------------------------------------------------------------------------------------ Company: -- Engineer: -- -- Create Date: 14:08:05 04/09/2015 -- Design Name: -- Module Name: spi_master

2016-01-07 14:46:16 659

原创 在myeclipse中 移动多行代码

在myeclipse中,选中需要移动的代码tab键 向前移动Shift + tab键 向后移动alt+上下键  上下移动

2016-01-06 15:33:47 1735

原创 EEPROM 和Flash 区别

对于EEPROM不需要擦除,可以直接进行编程操作,对于FLASH ROM,需要先擦除芯片内的内容,然后才可以写入新的内容。EEPROM以字节擦除,FLASH以扇区擦除.从使用角度看,EEPROM可以1个字节1个字节的写,写的时候没有限制。比如24C02FLASH写只能把1写为0,不能把0写为1。要想把0变成1,只能按块擦除,擦除后整块全为0xff。比如AM29F040B

2016-01-06 13:35:49 1754

原创 Fletcher16校验算法

/*********************************************************************** Function : Fletcher16* Description : Calculate Fletcher16** Return:*****************************************************

2015-12-14 12:27:26 4614

原创 文件目录结构导出工具

Microsoft Windows [Version 6.1.7601]Copyright (c) 2009 Microsoft Corporation.  All rights reserved.C:\Users\310207247>c:C:\Users\310207247>cd C:\SUN, ShangChao\MarcoPolo\DSPWork\LoaderC:\SUN,

2015-12-14 12:25:23 1190

原创 excel中插入文档

在创建Excel表格时,有时我们为了让表格包含更多的信息,经常希望能够在相关的表格位置插入一个嵌套文件,那么,怎样在Excel表格中插入其它对象文件呢?百度经验:jingyan.baidu.com方法/步骤1打开需要插入对象文件的Excel表格,如下图所示。步骤阅读2用鼠标单击要插入对象文件单元格,然后依次点击"插

2015-11-26 11:17:30 824

原创 大小端

有时候,我们需要知道我们的环境是大端(Big-Endian)还是小端(little-Endian)。 具体什么是大端什么是小端,我们暂时不讨论,也不下定义,先看怎么用?为什么要有大小端? 我们知道数据的存放是以字节为单位的,字节就是8bit位,也就是我们看到的8个2进制,可以说是一个地址存放一个单独的数据,不存在大小端的问题。 16bit的机器诞生后,数据的存放也是按照字

2015-11-24 13:24:50 379

原创 多任务----同步

实现多任务之间通信的最简便的办法是使用共享的数据结构。虽然共享数据区简化了任务间的通信,但是必须保证 每个任务在处理共享数据时的排他性。以避免竞争和数据破坏。共享资源满足互斥性的一般方法有:    1.关中断,开中断    2.使用测试并置位指令    3.禁止做任务切换    4.利用信号量一.关中断&开中断    这估计是最简单的方法了,代码如下所示。

2015-09-28 15:01:19 1163

原创 TI DSP cmd

在cmd文件中能看到各种段.text .cinit .const等,这和通常系统中仅有TEXT, DATA, BSS( 或者arm系统的code,data,zi段 ),heap, stack有很大的区别:TI段的定义:已初始化的段:.text  .cinit  .const  .econst  ..pinit  .switch.text:  所有可以执行的代码和常量

2015-09-17 14:41:48 544

原创 CRC

标准CRC生成多项式如下表: 名称 生成多项式 简记式* 标准引用 CRC-4 x4+x+1 3 ITU G.704 CRC-8 x8+x5+x4+1 0x31 CRC-8 x8+x2+

2015-09-09 16:41:39 404

原创 CRC8查表法

/***************************************************** 描 述: CRC8校验子程序 x^8+x^5+x^4+x^0 入口参数: 指向数组指针,校验字节个数 出口参数: 8位CRC校验码******************************************************/cons

2015-09-09 11:19:39 7621 1

原创 循环冗余校验(CRC)算法入门引导

写给嵌入式程序员的循环冗余校验(CRC)算法入门引导前言CRC校验(循环冗余校验)是数据通讯中最常采用的校验方式。在嵌入式软件开发中,经常要用到CRC 算法对各种数据进行校验。因此,掌握基本的CRC算法应是嵌入式程序员的基本技能。可是,我认识的嵌入式程序员中能真正掌握CRC算法的人却很少,平常在项目中见到的CRC的代码多数都是那种效率非常低下的实现方式。其实,在网上有一篇介绍CRC 算

2015-09-09 10:39:25 970

原创 段内存

BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。代码段:代码段(code segment/text segment)通常是指用

2015-09-06 16:35:09 682

原创 ue32编辑器光标怎么变成方的了,不方便啊,怎么改呢?

是你不小心按下了insert键,再按一次即可。

2015-09-06 10:13:58 1816

原创 ./ ../

./  代表当前目录   ../代表上一级目录

2015-09-01 09:07:13 307

原创 do.......while(0)

大家都知道,do…while(condition)可以表示循环,但你有没有遇到在一些宏定义中可以不用循环的地方,也用到了 do…while.比如:[cpp] view plaincopyprint?#define DELETE_POINTER(p)       \     do                          \      {     

2015-08-28 11:19:06 393

原创 c++ 内存分配

栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,用户栈在程序执行期间可以动态地扩展和收缩。   堆,就是那些由 new 分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个 new 就要对应一个 delete。如果程序员没有

2015-08-24 13:22:47 313

原创 return 局部变量

一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说,函数不能通过返回指向栈内存的指针(注意

2015-08-24 13:15:18 2379 1

原创 CRC

生成步骤1、将X的最高次幂为R的生成多项式G(X)转换成对应的R+1位二进制数。2、将信息码左移R位,相当于对应的信息多项式C(X)*2R。3、用生成多项式(二进制数)对信息码做除,得到R位的余数(注意:这里的二进制做除法得到的余数其实是模2除法得到的余数,并不等于其对应十进制数做除法得到的余数。)。4、将余数拼到信息码左移后空出的位置,得到完整的CRC码。【例】假设使用的生成

2015-08-07 08:55:15 489

原创 _FILE_ _LINE_

我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选择使用宏定义的方式来输出调试语句。 比如,定义一个宏开关: #define __

2015-08-05 16:45:12 509

Linear Circuit Transfer Functions(2016)

开关电源

2018-09-16

multi threading applications in Win32_EN

multi threading applications in Win32_ENmulti threading applications in Win32_EN

2018-07-31

空空如也

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

TA关注的人

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