- 博客(77)
- 收藏
- 关注
原创 framebuffer程序的自动重启
一般的应用程序升级完毕后都必须重启自己,那么当linux程序打开framebuffer时再重启就会出现问题。因为当打开framebuffer时首先要和一个终端tty关联,比如我的本本上首次关联的是tty8.这是通过(ioctl(ConsoleFD, VT_OPENQRY, &vtnumber))查询下一个可用的tty决定的。那么本次正在使用tty8,再重启自己不就是要查询下一个tty,即t
2016-01-28 20:50:21 236
原创 51单片机SEGMENT TOO LARGE
AT89C52编译错误error C249: 'DATA': SEGMENT TOO LARGE当时还不知道怎么回事,后来才发现51单片机的ram比较小,只有128byte,所以要省着使用当你定义数组不用更改时,就用uchar code XX[10];根据你数据的用处,你可以有以下几种定义选择,编译器会将数据放在合适的存储器中。data:直接寻址的片内RAM区低128B
2015-10-31 16:10:21 3225
原创 miniGui1.3支持ttf字体
前几篇文章已经分别讲述了miniGui和freetype的移植,本篇才是真正用到他们的时候,目的就是为了在miniGui中使用TTF字体。在编译miniGUI时打开ttf开关(--enable-ttfsupport),但是配置显示信息中ttf还是关闭的,找了相关文章说是miniGUI没有找到freetype库,可是我把相关库和头文件已经拷贝到交叉编译环境中,几经努力未果,我只能手动在“conf
2015-06-01 19:18:23 784
原创 freetype移植二
鄙人之前的一篇文章写到如何正确的编译通过freetype1-3-1,但是发现交叉编译出来的竟然是X86结构。于是又查阅了相关资料。根据网上大卡们的一些实例似乎感觉freetype1-3b版本似乎没法编译成动态库。有些人编译成了静态库。而我自己则采用了网上另一种方法,直接取出和linux相关的代码,简单编译成动态库。操作过程中没有想到这种方法及其简单,真是运气太好了。具体步骤:1. 新建
2015-06-01 18:54:29 541
转载 freetype的移植
1.下载freetype-1.3.1。2. 如下错误说明采用的共享夹(我是通过网络挂载的windows目录),于是将freetype的文件夹单独拷贝到linux里面。ln /share/minigui1.3.3/freetype-1.3.1/lib/arch/unix/../../ttmemory.c memory.c ln: failed to create hard link `m
2015-06-01 15:39:41 1063
转载 Ubuntu设置中文编码
Ubuntu 默认采用UTF8编码,可以方便global。但对中文支持,还不细致,即便默认采用中文安装,也并不会自动添加GB*等支持,致使在Ubuntu下访问部分Win文本文件时,出现乱码。I. 配置系统环境执行 sudo vi /var/lib/locales/supported.d/zh加入以下配置参数zh_CN.GB18030 GB18030 (最新汉字编码字符集,向下兼
2013-04-10 11:15:16 485
转载 51单片机模拟I2C总线
#include #include #include #define DELAY_TIME 60 /*经实验,不要小于50!否则可能造成时序混乱*/ #define TRUE 1 #define FALSE 0 sbit SCL=P1^7;/*假设由P1.7和P1.6控制*/ sbit SDA=P1^6;/*********
2013-03-21 20:16:02 3026
转载 DM9000C U-BOOT驱动分析(三)
DM9000C发送数据部分static int dm9000_send(struct eth_device *netdev, volatile void *packet, int length){int tmo;struct board_info *db = &dm9000_info;DM9000_DMP_PACKET(__func__ , packet, l
2013-03-13 08:30:52 739
转载 DM9000C U-BOOT驱动分析(二)
初始化DM9000C流程static int dm9000_init(struct eth_device *dev, bd_t *bd){int i, oft, lnk;u8 io_mode;struct board_info *db = &dm9000_info;DM9000_DBG("%s\n", __func__);一部分初始化流程和reset流程
2013-03-13 08:29:21 1232
转载 DM9000C 驱动分析(一)
读写相关API流程及逻辑DM9000_IO DM9000C bus与 CPU总线连接,CPU分配的地址段,PIN CMD为低DM9000_DATA DM9000C bus与 CPU总线连接,CPU分配的地址段,PIN CMD为高读寄存器值static u8 DM9000_ior(int reg){先向DM9000C写入regDM9000_out
2013-03-12 19:05:24 978
原创 linux程序重启的探索
曾经写的界面程序交给了新来的同事,突然发现每次升级之后程序都会变的比前一次慢,多升几次就很卡了,一直不明白原因。新来的只是个初学者,有了问题只能问为什么怎么弄,没有办法只能加班加点重新分析一下。升级后程序要自动重启,代码如下:1)将新的程序文件替换原来的程序文件;2)启动新的程序;3)关闭旧的程序。代码如下:update();//拷贝新程序system("./new p
2012-12-25 20:49:22 1383
原创 dsp2812的flash在线升级一
当我们把工业控制电路板发出去给客户使用后,紧接着面临的问题是如何对板级芯片升级。我们不可能要求客户会使用仿真器,让售后服务人员去每一个厂家升级也不切实际,况且客户分布在全国各地,甚至世界的各个角落。那我们就必须要做到像升级应用程序一样,插上U盘或者联网后点下按钮就能完事。目前公司的新系统正面临着如此的问题。一向使用仿真器的我开始了新的挑战。这方面资料网上比较少,即使找到成功的案例他们也只说成功了,
2012-06-08 20:43:00 4185 2
原创 framebuffer和tty的探讨
一般的应用程序升级完毕后都必须重启自己,那么当linux程序打开framebuffer时再重启就会出现问题。因为当打开framebuffer时首先要和一个终端tty关联,比如我的本本上首次关联的是tty8.这是通过(ioctl(ConsoleFD, VT_OPENQRY, &vtnumber))查询下一个可用的tty决定的。那么本次正在使用tty8,再重启自己不就是要查询下一个tty,即t
2012-05-19 14:19:22 1048
原创 linux编码
1.修改文件内容的编码 conv -f utf-8 -t gb2312 aaa.txt > bbb.txt2.修改文件名的编码 convmv -f GBK -t UTF-8 -notest *.mp33.还可以安装傻瓜命令行工具enca。(具体在网上查找enca)
2012-05-15 14:09:08 402
原创 F2812的外部扩展接口
F2812外部扩展接口可以映射到5个独立的区域,每个空间都可以独立设置等待,选择,建立,保持时间。zone0和zone1共用一个外部片选信号,但是采用不同的内部地址,zone0的寻址范围是0x2000——0x3FFF,zone1的寻址范围是0x4000-0x5FFF.当dsp寻址0x2000-0x5FFF时,外部片选信号XZCS0ANDCS1自动变低电平,选通外部存储器,再由地址线操作数据,可以通
2012-05-10 16:11:25 2104
原创 步进马达测试
TMS320F2818有3个定时器. CpuTimer0. CpuTimer1. CpuTimer2定时器的应用:CpuTimer0可以在 用户程序中使用, CpuTimer1. CpuTimer2预留给实时系统使用.周期值 Time=Freq*Period/SYSCLKOUTConfigCpuTimer(&CpuTimer0, 150, 1000000) Timer->CPU
2012-04-24 13:17:47 693
转载 GNU C 与 ANSI C的区别
1.零长度数组GNU C允许使用零长度数组,定义变长度对象时比较方便struct var_data { int len; char data[0];};var_data的大小仅为一个int型,data是常量地址,data[index]是访问其后的内存空间。struct var_data *s = malloc(sizeof(var_data) + len);
2012-04-07 10:28:07 2628 1
转载 linux中断设置的技巧
echo -e "\033[?25l" 隐藏光标echo -e "\033[?25h" 显示光标其实\033(八进制,相当于10进制的27)就是所输入字符的值.echo -ne "\33[32m" 可以将字符的显示颜色改为绿色 echo -ne "\33[3;1H" 可以将光标移到第3行第1列处 具体的摘抄一些如下: \33[0m 关闭所有属性 \33[1m 设置
2012-04-01 10:39:02 615
原创 linux屏保之发现问题
系统一段时间后没有输入总是希望关闭LCD背光延长屏幕的使用寿命,我们目前的项目也是如此。但是一段时间后才发现我的程序在这方面做的不够好。一般个人PC中使用命令setterm -blank 0关闭屏保setterm -blank 1开启屏保。其实正确的格式为setterm -blank 【0-60】设置屏保的时间0-60.然后在arm板上是不待setterm 程序的,所以阅读相关资料得知
2012-04-01 09:44:38 948
原创 framebuffer属性
linux的图形界面可以通过直接向framebuffer写数据来实现,framebuffer在这个意义上就相当于显卡缓存。framebuffer包括许多属性,简单列举如下分辨率(800x600), 色深(32位),缓冲大小, 颜色模式等。今天我主要记录下颜色模式,因为这两天才发现他的作用。就如我现在的程序而言,arm板上的色深是16位,我一直没有办法从24位转换位16位,后来才发现frameb
2012-04-01 09:11:53 778
转载 TinyX对触摸屏支持的实现
TinyX和TslibTinyX是XFree86的一个配置子集,一般用于实现嵌入式Linux的图形界面。TinyX本身只提供了触摸屏支持的接口,需要配合Tslib才能实现触摸屏操作。Tslib是一个触摸屏的库,它提供诸如滤波、去抖、校准之类的功能,为不同的触摸屏提供了一个
2011-08-27 15:07:33 831 1
转载 让程序只运行一个实例
<br />方法一:<br /> 有时候在开发应用程序时,希望控制程序运行唯一的实例。例如,最常用的mp3播放软件Winamp,由于它需要独占计算机中的音频设备,因此该程序只允许自身运行唯一的一个例程。在Visual C++的开发实践中,对于16位的Windows系统,应用程序的hPrevInstance句柄保存了应用程序上一个运行的实例,可以用该值来检查是否有实例运行;然而在32位Windows系统下,这个值总是NULL,所以无法利用该值来实现程序运行唯一实例。本实例给出了解决这个问题的简单办法,只要将
2011-03-15 13:50:00 543
原创 JAVA多行文本的实现类代码
class MultilineLabel extends JTextArea{ private static final long serialVersionUID = 1L; public MultilineLabel(String s){ super(s); } public void updateUI(){ super.updateUI(); setLineWrap(true); setWrapStyleWord(true);
2011-02-22 11:48:00 747
原创 JAVA中类似文本框只能输入字母的实现方法
<br />我的目的是设想掉屏蔽几个字母,比如不允许输入T,L,Z,J,S等字母,就想不能输入所有字母一样,查看网上资料简单介绍了几种方法。我首先的思路是监听按键,可是只能获取键值,不能将键值修改后再次传入消息队列,紧接着就试另外一种方法。每个JTextField都有一个文档类和其邦定,所以我换成监听文档,增加doc.addDocumnetListener()重载InsertUpdate(),<br />RemoveUpdate()和changeUpdate()等函数,我的方法是在InsertUpdate(
2011-02-22 11:45:00 2279
原创 [转]使用Visual Leak Detector检测内存泄漏
初识Visual Leak Detector<br />灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题。当程序越来越复杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题。内存泄漏是最常见的内存问题之一。内存泄漏如果不是很严重,在短时间内对程序不会有太大的影响,这也使得内存泄漏问题有很强的隐蔽性,不容易被发现。然而不管内存泄漏多么轻微,当程序长时间运行时,其破坏力是惊人的,从性能下降到内存耗尽,甚至会影响到其他程序的正常运行。另外内存问题的一个共同特点是,内存问题本身并不会有
2011-01-05 14:06:00 377
原创 vista系统怎么进入管理员模式
<br />1.打开注册表在HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsNT/CurrentVersion/Winlogon/ <br />2.新建注册表项“SpecialAccounts”,再在其下新建子项“UserList” <br />3.然后新建一个名为“Administrator”的DWORD(32位)值,将其数值改成“1”(该步骤是要vista认识Administrator身份)<br />4.重启按F8后进安全模式运行cmd,在DOS窗口下输入ne
2010-12-06 19:11:00 766
原创 vc6.0中OpenGL开发环境的配置
<br />1.下载glut工具包解压得到5个文件,1个头文件,2个lib静态库库,2个dll动态库。<br />2.vc6.0安装路径的incude文件夹中应该有GL文件夹,将头文件glut.h拷进来(C:/Program Files/Microsoft Visual Studio/VC98/Include/GL)。<br />3.同样将glut.lib和glut32.lib拷进C:/Program Files/Microsoft Visual Studio/VC98/lib文件夹。<br />4.将gl
2010-11-09 13:59:00 933
原创 嵌入式linux入门学习规划
<br />ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标: <br />(1) 掌握主流嵌入式微处理器的结构与原理(初步定为arm9) <br />(2) 必须掌握一个嵌入式操作系统 (初步定为uclinux或linux,版本待定) <br />(3) 必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。 <br />从事嵌入式软件开发的好处是: <br />(1)目前国内外这方面的人都很稀缺。这一领域入门门槛较高,所以非专业IT人员很难切入这一领域;另一方面,是因为这一领域
2010-09-06 15:31:00 511
原创 linux库文件编写基础
<br />一、静态库的编写和使用<br /> 1、概述<br /> 静态库文件的扩展名一般为.a,其编写步骤很简单。<br /> ⑴编写函数代码<br /> ⑵编译生成各目标文件<br /> ⑶用ar文件对目标文件归档,生成静态库文件。<br /> 注意归档文件名必须以lib打头。<br /> 使用要点:<br /> ⑴在gcc 的-I参数后加上静态库头文件的路径。<br /> ⑵在gcc 的-L参数后加上库文件所在目录<br /> ⑶在gcc 的-l参数后加上库文件名,但是要去掉li
2010-09-06 15:13:00 451
原创 CFileDialog的重载
最近想在我的图像处理软件中增加图像预览。就是在文件打开之前先把用户选择的位图文件显示在一个静态控件中。这就需要对通用文件对话框进行重载。从网上找到一些资料并最终试验成功。1.首先建立一个对话框模板IDD_MYFILE_DIALOG,2.设置好它的几个属性:下层,无对话框框架,剪切同层等。3.在对话框模板中添加我们自己需要的控件,比如用于显示图像的静态控件。3.在重载类的构造函数中写上这些代码 m_ofn.Flags |= OFN_ENABLETEMPLATE;//允许替换模板 m_ofn.Flags &=
2010-09-01 19:44:00 2040
原创 调试小记
<br />在编程程序中留下好的调试足迹会给软件测试和维护带来极大方便,当错误发生时立即可对错误代码或者代码块进行定位,省去翻来覆去查找代码的时间和精力,比如ASSERT断言就是一个好的调试手段。对那些想不出来的可能情况而又担心会发生的地方简单留下断言,那么在以后的测试和运行过程中会给我们很好的证明。当然有时时间可能会等的久一点。但是功夫不负有心人,即便是那种担心的情况确实不会发生,我们也会因此信心倍增。那么还有两个非常好的定位宏我们也不应该忘记.__FILE__表示当前文件名,__LINE__表示当前行,
2010-08-21 09:26:00 390
原创 文件关联程序
<br />当打开一个文件时,系统会自动找到打开它的程序。我一直对此有点兴趣,今天终于在自己的程序中也实现了。步骤是这样的,首先在注册表中注册我的程序和哪些文件格式(后缀名)关联,然后在程序中响应双击打开文件,因为启动程序的时候,MFC默认的是命令是FileNew。不够以前我的程序是改成FileNothing,因为我的是MDI程序。所以今天加了如果命令行传来文件路径就要把它打开。也即是cmdInfo.m_strFileName不为空。可是刚开始遇到一点小问题,因为路径会截断空格,比如"C:/Document
2010-06-30 08:38:00 1056
原创 VC++实现版本在线升级
<br />编程思路:首先在主页某个地址放一个文件,然后在我们的程序里检查它,以便获得新版本信息!这里版本信息文件我们用INI文件来操作!比如下列格式<br />【Version】<br />Version = 30<br />【URL】<br />URL = http://www.123.com/123/exe<br />其中的Version是新版本号,30表示V3.0版,URL是新版程序地址下载地址。<br />另外,要获取网站上的文件,我们一般有两种方法,一是通过FTP下载,二是HTTP直接连接。如果
2010-06-24 11:49:00 1075
原创 获取当前活动的子框架问题
<br />在MDIFrameWnd框架中有两个函数可以获取到当前活动的子框架CChildFrame* pChild = (CChildFrame*)MDIGetActive()和<br />CChildFrame* pChild = (CChildFrame*)GetActiveFrame();但是我发现两者的一个区别,就是在还未新建任何文档时,也即没有建立任何子框架之前,前者获得NULL, 后者获取的是主框架指针,于是在我的程序中判断指针非空的情况下调用子框架类成员时,后者会出错,以前一直没有注意到。所
2010-06-21 11:42:00 473
原创 一个关于对话框的怪异现象
<br />void CMyToolBar::OnLButtonUp(UINT nFlags, CPoint point) <br />{<br /> // TODO: Add your message handler code here and/or call default<br /> if(PtInRect(m_rect[1], point))<br /> {<br /> CAboutDlg aboutDlg;<br /
2010-06-11 20:05:00 380
转载 vc中获取各种指针
<br />1、获取应用程序指针<br /> CMyApp* pApp=(CMyApp*)AfxGetApp();<br />2、获取主框架指针<br /> CWinApp 中的公有成员变量 m_pMainWnd 就是主框架的指针<br /> CMainFrame* pMainFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd);<br /> 或者<br /> CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainW
2010-06-11 13:20:00 499
转载 HOOK钩子机制
一、什么是钩子(hook) Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的。钩子(hook)是一种特殊的消息处理机制,钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,屏幕取词,日志监视等等。 钩子的种类很多,
2010-05-12 20:31:00 402
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人