自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

蛋蛋强的专栏

技术追求,永无止境!

  • 博客(81)
  • 资源 (12)
  • 收藏
  • 关注

原创 使用高通QXDM工具抓取Modem Log的操作方法(独家!)

高通QXDM工具包下载链接如下:链接:https://pan.baidu.com/s/1rRNicFvlRSstUhka2JSiOg 密码:pssp具体操作步骤如下:1、安装工具包里的QPST和QXDM软件。2、打开工具包里的3.dmc文件来启动QXDM软件,启动过程中会自动打开QPSTConfig。3、打开设备的开发者选项和USB调试选项,将设备连接到PC,取消”媒...

2018-08-11 16:18:51 15788 10

原创 使用高通QXDM工具实现Android设备网络制式更改(如仅注册LTE网络)(独家!)

修改网络制式需要用到高通的QXDM工具,该工具包下载链接如下:链接:https://pan.baidu.com/s/1rRNicFvlRSstUhka2JSiOg 密码:pssp具体操作步骤如下:1、安装工具包里的QPST和QXDM软件。2、打开工具包里的3.dmc文件来启动QXDM软件,启动过程中会自动打开QPSTConfig。3、打开设备的开发者选项和USB调试选...

2018-08-11 15:51:31 5513

原创 屏幕坐标与客户坐标的转换

WIN32  API函数:1、ClientToScreen 函数:  函数功能:该函数将指定点的用户坐标转换成屏幕坐标。  函数原型:BOOL ClientToScreen(HWND hWnd,LPPOINT lpPoint);  参数:  hWnd :用户区域用于转换的窗口句柄。 注:第二个参数点的坐标是相对于第一个参数(窗口句柄)

2014-04-03 14:21:49 6461

原创 Invalidate与UpdateWindow的区别

1、Invalidate函数    void Invalidate( BOOL bErase = TRUE );     该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘,这时Windows会在应用程序的消息队列中放置WM_PAINT消息。MFC为窗口类提供了WM_PAINT的消息

2013-09-13 10:44:57 1223

原创 OnDraw与OnPaint的区别

1、Invalidate()和InvalidateRect()其实是触发对OnPaint()函数的调用,OnPaint()函数调用OnDraw()函数,OnDraw函数还需要同时支持打印机输出。OnPaint()函数和OnPrint()函数都要调用OnDraw(),于是同样的绘图代码既可以用于屏幕输出,也可以用于打印机输出。在编程中,一般重载OnDraw()就可以了。如果定义了OnPaint()函数,并且在OnDraw()里面有要显示的内容,那么需要显示的调用OnDraw(),即OnDraw(&dc)。

2013-09-13 10:12:18 1247

原创 static全局变量与普通全局变量的区别

全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。      这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件

2013-01-18 14:46:52 1296

原创 揭秘typedef四用途与两陷阱

typedef用来声明一个别名,typedef后面的语法,是一个声明。本来以为这里不会产生什么误解的,但结果却出乎意料,产生误解的人不在少数。罪魁祸首又是那些害人的教材。在这些教材中介绍typedef的时候通常会写出如下形式:typedef int PARA; 这种形式跟#define PARAint几乎一样,这些教材的宗旨是由浅入深,但实际做出来的行为却是以偏盖全。的确,这种形式在所有形式中是最

2013-01-18 11:04:39 1876 5

原创 内存对齐详解

内存地址对齐,是一种在计算机内存中排列数据(表现为变量的地址)、访问数据(表现为CPU读取数据)的一种方式,包含了两种相互独立又相互关联的部分:基本数据对齐和结构体数据对齐 。 为什么需要内存对齐?对齐有什么好处?是我们程序员来手动做内存对齐呢?还是编译器在进行自动优化的时候完成这项工作? 在现代计算机体系中,每次读写内存中数据,都是按字(word,4个字节

2013-01-16 17:38:02 18210 6

转载 堆和栈的区别

一、预备知识—程序的内存分配    一个由C/C++编译的程序占用的内存分为以下几个部分    1、栈区(stack)—   由编译器自动分配释放,存放函数的参数值,局部变量的值等。其    操作方式类似于数据结构中的栈。    2、堆区(heap)   —   一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回    收   。注意它与数据结构中的堆是两回事,分配方

2013-01-11 13:50:36 1018

原创 printf函数使用—针对不同数据类型的输出结果详解

#include #include int main() { char c, s[20], *p; int a=1234, *i; float f=3.141592653589; double x=0.12345678987654321; p="How do you d

2013-01-05 17:26:12 3630 1

原创 C语言中auto,register,static,const,volatile,extern的区别

1)auto  这个关键字用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字不怎么多写,因为所有的变量默认就是auto的。(2)register  这个关键字命令编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。 (3)static  常见的两种用途:

2013-01-05 15:38:19 5642

原创 C/C++异同

C++语言是一个面向对象的语言,使用C++编写的代码更加简捷、高效,更具可维护性和可重用性。但是很多人使用了C++语言后却感到C++与C编程没有什么区别。这其实是由于对C++语言的特点和特色理解和使用不够造成的。事实上,没有任何一个程序员使用C语言的编程效率可以超过C++语言的。   一、使用new和delete进行动态内存分配和释放  运算符new和delete是C++新增的过算

2012-12-31 17:00:27 1362

原创 CCS中头文件添加extern C { }语句的作用

CCS工程的头文件中添加extern "C" { }语句的原因是,由于C++支持函数重载,一个函数的名字可能有几个,在编译到汇编的时候,这些函数可能被重新命名(不是简单的在开头添加下划线'_'),这样C语言或汇编在链接由C++实现的函数时就会找不到具体位置。    C语言的规则是添加"_"前缀表示函数在汇编中的名称,例如main函数在汇编中为_main,但是C++不行,C++有重载。比如有

2012-12-14 13:53:06 3922 2

原创 使用EMCV将工程.c文件改为.cpp文件所出现错误的解决办法

编译现象:"dm642_pci.cpp", line 183: error: argument of type "Ptr" is incompatible with parameter of type "GIO_Handle""dm642_pci.cpp", line 205: error: argument of type "Ptr" is incompatible with param

2012-12-14 13:52:07 2401

原创 使用EMCV出现missing DW_AT_name attribute问题的解决办法

链接现象:>> warning: missing DW_AT_name attribute>> warning: function definitions in CSU declarations are not supported>> warning: missing DW_AT_name attribute>> warning: function definitions in

2012-12-14 13:50:58 1546

原创 CCS工程中使用EMCV所需做的配置和修改(独家!)

1、从网上下载EMCV(嵌入式平台的OpenCV)程序包,在CCS下新建lib工程,使用EMCV程序包中的cv源文件和cxcore源文件分别编译生成库文件dm642_cv.lib和dm642_cxcore.lib,将这两个库文件添加到工程中,将C++编程所使用的库文件rts64plus.lib添加到工程中。2、在Build Option--Compiler--Preprocessor--I

2012-12-14 11:18:09 7075 19

原创 CCS中使用DSP定时器的计时程序,可以精确计算某一段程序的执行时间

#include TIMER_Handle hTimer0;TIMER_Config TimerConfig ={ TIMER_CTL_RMK ( TIMER_CTL_SPND_EMUSTOP, TIMER_CTL_INVINP_NO, TIMER_CTL_CLKSRC_CPUOVR8, //定时器的频率是CPU频率的1/8 TIMER_CTL_CP_PULSE,

2012-12-14 11:11:53 16444 3

转载 CCS3.3利用profile对程序的运行时间进行统计

CCS3.3 的运行时间统计有两种模式:       简单方法:profile-->clock-->enable和view,然后在想统计的区域设两个端点,将程序运行到第一个断点处(有人说用:运行到光标处的办法,有人说正常运行run到断点处,这两种方法不大一样,因为我的程序中有函数printf,前者不会显示,后者会显示)。然后,把窗口右下角的小钟表双击一下让他清零,然后run,程序从起始断点调到

2012-12-14 11:08:31 4675 1

原创 排序算法解析——冒泡排序、选择排序、快速排序

时间复杂度是度量算法执行的时间长短,而空间复杂度是度量算法所需存储空间的大小。算法的时间复杂度记做:T(n)=O(f(n))    在计算时间复杂度的时候,先找出算法的基本操作,然后根据相应的各语句确定它的执行次数,再找出T(n)的同数量级(它的同数量级有以下:1、Log2n、n、nLog2n、n的平方、n的三次方、2的n次方、n!),找出后,f(n)=该数量级,如冒泡排序的时间复

2012-12-14 11:04:55 13258 1

原创 SDRAM扩展

1、如果需要的数据总线宽度和SDRAM一样的话,使用串联扩展方式。a、12条address连在一起b、两片SDRAM的bank address也接到一起c、cs信号用来作为1bit的address,也就是容量扩大了一倍d、DQM对应的bit接在一起e、其他的cas,ras,we,data信号接在一起2、如果需要的数据总线是SDRAM两倍的情况下,使用并联扩展方式。a、c

2012-09-10 14:07:59 3754

原创 CCS工程中cmd文件的编写

Section目标文件中最小单位称为块,一个块就是最终在存储器映象中占据连续空间的一段代码或数据。1、COFF目标文件包含三个默认的块:.text可执行代码.data已初始化数据.bss为未初始化数据保留的空间2、汇编器对块的处理未初始化块                        .bss      变量存放空间

2012-09-10 13:52:25 4254

原创 CCS3.3卡死问题的解决方法

在使用CCS3.3写代码的时候经常会遇到编辑器死掉的情况,之后则必须在任务管理器里结束CCS3.3的进程,然后再重新打开CCS3.3才能重新继续写代码,这种情况尤其在双击某个变量或函数的时候特别容易出现,让人非常郁闷,其实解决方法很简单,步骤如下:1、打开CCS3.3主编辑界面2、Option -> Editor -> Language,打开语言属性调整对话框3、选择CodeSense

2012-09-10 13:43:53 9762 3

原创 使用DSPBIOS的CCS工程设置(独家!)

1、创建DSP/BIOS配置文件,点击File→New→DSP/BIOS Configuration,选择DM642平台,进行相关配置,保存,编译。如果有错误,会无法打开图形化配置界面,需要在文本界面下将错误改正,编译无误后就可以重新打开。2、将DSP/BIOS配置文件dm642.tcf添加到工程中,dm642cfg.s62和dm642cfg_c.c文件会自动添加到工程中。3、将dm642

2012-09-10 13:40:30 8208

转载 #ifdef __cplusplus详解

时常看到这样的代码:#ifdef __cplusplus extern "C" { #endif//一段代码#ifdef __cplusplus } #endif   这样的代码到底是什么意思呢?首先,__cplusplus是c++中的自定义宏,那么定义了这个宏的话表示这是一段c++的代码,也就是说,上面的代码的含义是:如果这是一段c++的代码,那么加入extern

2012-07-06 15:30:46 1645

原创 extern far void vectors();中far是什么意思

在16位编译器(Turbo C)中常见,这跟内存寻址有关。       PC机的内存地址是由段地址和偏移地址组成(汇编中常见的词),每个段不能超过64K地址。因此在段内寻址,只要用到偏移地址就够了,因段地址寄存器所存的段地址是不变的,用指针时,只16位够了(仅表示偏移地址)这类地址称为近指针(near型);当要跨段时,即要指明所要存取的段地地和偏移地址时,这时段寄存器中所存段地址要改变,因此要

2012-07-06 15:27:54 4291

原创 SEED-VPM642开发板IIC总线死锁解决办法(独家!)

问题现象:IIC程序一直停在while(I2C_bb(hI2C))或者while(!I2C_xrdy(hI2C))处问题原因:IIC总线工作状态不正确1、不正常关机或复位导致的IIC总线死锁(以此情况居多)2、上电时由于FLASH中没有程序,IIC总线容易被误操作,导致IIC总线上的设备被锁死。解决办法:1、将板卡的电源关闭,将仿真器USB线拔掉,重新上电。上电顺序是:

2012-07-06 15:24:49 3085

原创 SDRAM中数据掩码DQM的作用

DQM就是掩码控制位,在sdram中每个DQM控制8bit Data。在读操作的时候没什么大的影响,比如读32位的sdram module,但只要其中低8bit的数据,没有关系,只要读出32bit数据,再在软件里将高24位bit和0“与”就可以了,有没有DQM关系不大。但在执行写操作时。如果没有DQM就麻烦了,可能在软件上是写一个8bit数据,但实际上32根数据线是物理上连接到SDRAM的,只要W

2012-07-06 15:21:32 7041 1

转载 网络变压器在以太网中的作用

在以太网设备中,通过PHY接RJ45时,中间都会加一个网络变压器。有的变压器中心抽头接到地。而且接电源时,电源值又可以不一样,3.3V,2.5V,1.8V都有。这个变压器的作用分析如下:  1、中间抽头为什么有些接电源?有些接地?这个主要是与使用的PHY芯片UTP口驱动类型决定的,这种驱动类型有两种,电压驱动和电流驱动。电压驱动的就要接电源;电流驱动的就直接接个电容到地即可!所以对于不同的

2012-07-06 15:14:18 2081

原创 新建CCS工程所需进行的配置(独家!)

相信很多人使用TMS320DM642进行视频编解码开发,对于配置好的工程,CSL用起来很方便。但是新建工程后需要根据自己的硬件平台对build option选项进行相应的配置,否则编译链接会无法通过。1、在Build Option--Compiler--Preprocessor--Pre-Define Symbol处添加上CHIP_DM642,以告诉CSL你现在使用的芯片的型号,CSL要根

2012-07-06 15:02:33 5129 1

原创 Altium Designer(Protel)网络连接方式Port和Net Label详解

1、图纸结构 图纸包括两种结构关系: 一种是层次式图纸,该连接关系是纵向的,也就是某一层次的图纸只能和相邻的上级或下级有关系;另一种是扁平式图纸,该连接关系是横向的,任何两张图纸之间都可以建立信号连接。2、网络连接方式 Altium Designer提供了6类网络标识:Net Label(网络标号),Port(端口),Sheet Entry(图纸入口),Power

2012-05-31 17:20:06 41924

原创 使用hex6x.exe将out文件生成hex文件方法

首先你要有*.cmd文件和hex6x.exe和*.out文件。其中out文件是上面一篇中提到的,在CCS里面编译成功的输出文件*.out。*.cmd文件,里面的内容是这样的: debug\SEEDVPM642boot.out-a-memwidth  8-boot-bootorg 0x90000400-bootsection .boot_load

2012-05-09 11:05:07 11213 2

原创 DFT和FFT的运算量比较

N点DFT共需要N2次复数乘法和N(N-1)次复数加法,共4N2次实数乘法和(2N2+2N*(N-1))次实数加法。当N很大时,这是一个非常大的计算量。利用FFT算法之后,任何一个N为2的整数幂(即N= 2M)的DFT,都可以通过M次分解,最后成为2点的DFT来计算。M次分解构成了从x(n)到X(k)的M级迭代计算,每级由N/2个蝶形运算组成。完成一个蝶形计算需一次乘法和两次复数加法。

2012-04-19 11:19:18 41494 1

原创 通用处理器(GPP)与DSP处理器的区别

首先从最明显的差别说起:GPP是通用的处理器,而DSP是专用处理器,专门处理高密集型重复型数据而设置的。    (1)处理器的架构:      传统上,GPP采用冯.诺依曼存储器结构,程序与数据共用一个存储器空间,通用一组总线(一个地址总线和一个数据总线)链接到处理器核。虽然现在典型的高性能GPP都包含两个片内高速缓存(一个数据,一个指令)直接连到处理器核,以加快运行时的访问速度。(这

2012-03-30 16:22:06 14050 1

原创 正式发布本人设计的51单片机开发板JL8051

本开发板使用STC89C52作为核心MCU,同时兼容其他STC8051系列和AT89S51系列单片机,以及AVR的ATmega8515单片机。功能强大,接口齐全,为初学者提供了一个良好的入门条件。      该开发板可以进行以下实验:AD转换、DA转换、LED流水灯、LED数码管动态显示、LED点阵屏字符显示、独立按键和矩阵键盘识别、1602和12864多规格LCD液晶显示、片内片外EEPRO

2011-08-25 14:40:30 4717 5

原创 Altium Designer 覆铜时过孔连接形式的设置——只将过孔连接设置为Direct Connect

AltiumDesigner 在PCB覆铜时,所有的过孔和焊盘都是十字连接即Relief Connect连接的,没有像PROTEL 99SE一样只有接地的焊盘才是十字连接而过孔是直接连接的。如下图所示:处理问题方法:step1:design>rules>plan

2011-08-25 10:12:48 57099 1

转载 PS2接口编程

在单片机系统中,经常使用的键盘都是专用键盘.此类键盘为单独设计制作的,成本高、使用硬件连接线多,且可靠性不高,这一状况在那些要求键盘按键较多的应用系统中更为突出.与此相比,在PC系统中广泛使用PS/2键盘具有价格低、通用可靠,且使用连接线少(仅使用2根信号线)的特点,并可满足多种系统的要求.因此在单片机系统中应用PS/2键盘是一种很好的选择.    文中在介绍PS/2协议和PS/2键盘工作原理

2011-08-11 11:06:10 10426

原创 STC89C52单片机内部EEPROM驱动

STC89C52单片机内部带有4K的EEPROM,严格来说,应该是4K的FLASH,它分为8个扇区,每个扇区有512个字节。读写数据只能按字节操作,擦除数据只能按扇区操作。 由于它掉电不易失的特性,可以用来存储程序运行过程中产生的用户数据,掉电可保存。

2011-08-04 17:14:23 9090 3

原创 51单片机GPIO口模拟串口通信

随着单片机的使用日益频繁,用其作前置机进行采集和通信也常见于各种应用,一般是利用前置机采集各种终端数据后进行处理、存储,再主动或被动上报给管理站。这种情况下下,采集会需要一个串口,上报又需要另一个串口,这就要求单片机具有双串口的功能,但我们知道一般的51系列只提供一个串口,那么另

2011-08-03 11:06:09 14207 4

原创 51单片机普通IO口模拟IIC总线的程序实现

IIC是由Philips公司发明的一种串行数据通信协议,仅使用两根信号线:SerialClock(简称SCL)和SerialData(简称SDA)。IIC是总线结构,1个Master,1个或多个Slave,各Slave设备以7位地址区分

2011-08-02 17:03:36 11482 2

原创 C语言学习之指针的右左法则

C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标 准里面的内容,它是从C标准的声明规定中归纳出来的方法。

2011-07-29 17:33:50 2930

使用USB HID方式遍历所有usb设备,并以扫描枪为例演示数据接收和发送。

使用USB HID方式遍历所有usb设备,并以扫描枪为例演示数据接收和发送。

2018-01-05

ComToKey源代码(包含各种指令集的中文解码)

支持ANSI、Unicode、UTF-8等各种中文字符集的数据解析,并能够将数据转发到当前活动窗口的编辑框中。

2018-01-05

扫描仪驱动开发范例

扫描仪驱动开发范例 包括多个驱动,dll和源码

2014-06-21

VC控制扫描仪

使用vc控制扫描仪扫描图片 经测试,可以使用

2014-06-21

VC编程实现与USB设备通信

使用VC编程实现与USB设备通信 经测试,可以使用。

2014-06-21

USB学习板开发说明书

USB学习板开发说明书

2014-06-21

利用Twain协议,实现扫描仪扫描图片

利用Twain协议,实现扫描仪扫描图片。 本程序是采用VC++实现的。

2014-06-21

波特率计算器

MCS-51单片机波特率计算器,很好用。

2012-06-08

C51智能反编译

C51智能反编译,经测试,大部分hex文件可实现反汇编。

2012-06-08

Bin_Hex 代码转换工具

Bin_Hex 代码转换工具。经测试,可使用。

2012-06-08

SEED-VPM642用户指南(Rev.E)

SEED-VPM642用户指南(Rev.E)

2012-06-08

SEED-VPM642 v2.0 原理图

SEED-VPM642 v2.0 开发板 原理图

2012-06-08

空空如也

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

TA关注的人

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