模拟快捷键的程序源码
这个程序只在N900上使用过,发送Ctrl+Shift+Fn+L快捷键,其它平台没试,不保证能用。
源程序: rotation.c
编译命令:gcc key.c -o key -Wall -lX11 -lXtst
需要安装libx11t-dev libxt-dev libxtst-dev libxi-dev这几个库。
wxWidgets实现文件拖放
《使用wxwidgets进行跨平台的c++开发》第11章有介绍,参考例程在samples/dnd。其实很简单,只需几步:
#include <wx/dnd.h> class DnDialogFile : public wxFileDropTarget { public: DnDialogFile(YourDialog *pOwner) { m_pOwner = pOwner; } virtual bool OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filenames); private: //对话框类,成员TextCtrlPath保存文件路径 YourDialog *m_pOwner; }; bool DnDialogFile::OnDropFiles(wxCoord, wxCoord, const wxArrayString& filenames) { //设置文本框内容 m_pOwner->TextCtrlPath->SetValue(filenames[0]); return true; }
在对话框初始化时调用this->SetDropTarget(new DnDialogFile(this))。
IAR引入一个二进制文件到数组中
IAR如何引入一个二进制文件到数组中,类似汇编的INCBIN伪指令。
找到方法如下:
Project Options->Linker->Input->Raw binary image 中选文件,填数组名,段,对齐,如xx,readonly,1。
还要在Keep symbols中填上对应的数组名。
编译器中的weak属性
多个目标文件中含有相同名字全局符号的定义,那么这些目标文件链接的时候将会出现符号重复定义的错误,这样可以在其中的一个符号前加上weak属性,将其定义为弱符号,就不再与另外的全局符号冲突。
不同编译器的定义方式:
/// Weak attribute
#if defined ( __CC_ARM )
#define WEAK __attribute__ ((weak))
#elif defined ( __ICCARM__ )
#define WEAK __weak
#elif defined ( __GNUC__ )
#define WEAK __attribute__ ((weak))
#endif
参考资料:
1、http://infocenter.arm.com/help/index.jsp?topic= /com.arm.doc.dui0348bc/Cacdgifc.html
2、http://www.cnblogs.com/kernel_hcy/archive/2010/01/27/1657411.html
wxWidgets获取系统串口号
windows系统下获取存在的串口号,主要是读注册表相关键值。
void xxx::GetSerialPort() { wxRegKey *m_pKey = new wxRegKey(_T("HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM")); wxString strTemp; long l; bool bCont; wxString str; wxString strValue; Choice_com->Clear(); bCont = m_pKey->GetFirstValue(str, l); while ( bCont ) { m_pKey->QueryValue(str, strValue); Choice_com->Append(strValue); bCont = m_pKey->GetNextValue(str, l); } Choice_com->SetSelection(0); delete m_pKey; }
Altium Designer错误
用Altium Designer画pcb,加载网络表之后许多元件都是绿色的,也不是间距的原因。实在没办法了,就把所有规则去掉,然后一个一个的添加,最后找到是SilkscreenOverComponentPads规则的原因。
“SilkscreenOverComponentPads”(丝印掠过焊盘),这个规则一般没有用,去掉了也没有关系。
USB复合设备的实现
USB复合设备一般用Interface Association Descriptor(IAD)实现,就是在要合并的接口前加上IAD描述符。
IAD描述符:
typedef struct _USBInterfaceAssociationDescriptor { BYTE bLength: 0x08 //描述符大小 BYTE bDescriptorType: 0x0B //IAD描述符类型 BYTE bFirstInterface: 0x00 //起始接口 BYTE bInterfaceCount: 0x02 //接口数 BYTE bFunctionClass: 0x0E //类型代码 BYTE bFunctionSubClass: 0x03 //子类型代码 BYTE bFunctionProtocol: 0x00 //协议代码 BYTE iFunction: 0x04 //描述字符串索引 }
参考资料 http://www.microsoft.com/whdc/archive/IAD.mspx
这里有我发布的stm32虚拟双串口的例子http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4028048 下载
FatFs源码阅读笔记
FatFs就不介绍了,这里使用的版本是0.07e。
1. f_mount函数比较简单,使全局FATFS对象指针指向fs,并使fs->fs_type=0。
2. f_open函数
- NAMEBUF(sfn, lfn) 调用NAMEBUF这个宏定义创建保存短文件名的数组,如果使用长文件名则将lfn指向长文件名数组。
- chk_mounted 检查文件系统,读取文件系统参数。
- 在路径中找设备号,默认为0。
- 支持重入添加锁定信号量,初始化磁盘等操作。
- 调用check_fs 在FAT引导扇区查找文件系统类型,fat16和fat32都返回0;如果没有找到返回1则在0号扇区查找分区表,根据分区表中的分区起始扇区地址再重新调用check_fs函数。
- 从FAT引导扇区中读fat表大小扇区数,fat表个数,fat表起始扇区=FAT引导扇区偏移量+保留扇区数,每簇扇区数,根目录最多可容纳的目录项数(fat16通常为512,fat32为0),文件系统扇区总数,最大簇数,根目录簇号,数据区开始扇区,文件系统类型等。
- follow_path 跟据路径找到文件所在目录,将文件父目录扇区读入文件系统缓冲区,读取文件目录项的信息;调用了create_name、dir_find函数。
- 如果文件不存在,并且支持创建新文件,则调用dir_register创建新文件;如果文件存在,将文件父目录的目录项中记录文件起始簇号的字节清0,再调用remove_chain将fat表中该簇对应的项清0;调用move_window确保读入文件父目录扇区到缓冲区。
- 将DIR对象的相关信息写到FIL对象中。
WEB开发在线工具收集
OctaGate SiteTimer 网站在线测速。
Web Page Analyzer 网站页面速度测试,告诉你什么影响了你页面速度,提供报告。
Pingdom Tools 测速结果详细直观,可以对整个页面测速,还可以Ping和Traceroute,推荐。
HostTracker 又一个在线测速,提供各个地区的测试结果。
Online CSS Optimizer css在线压缩。
CleanCSS css格式化跟压缩工具。
Compress Your JavaScript JS在线压缩工具。
IENetRendere 免费提供IE5.5 IE6 IE7 IE8浏览器测试。
Browsrcamp 免费提供Mac OS X browsers浏览器测试,其它收费。
Browsershots几乎提供所 有的浏览器测试,不过每天同一个域名只能免费测试一次(一次测试可以选多种浏览器),等待图片生成要几十分钟。
GZIP Test 测试一个URL地址是否支持GZIP传输,以及压缩比率。
HTTP Analysis 包含很多测试工具,如测试GZIP、是否Cache等,推荐。
Cacheability Test: 测试一个页面是否可Cache。
CSS Sprites Generator 生成CSS Sprites图。
ajaxload.info生成各种效果的 loading动画图。
WebShotsPro 网页在线截图,提供各种大小的图片。
Thumbalizr 功能同上,不过中文乱码。
后来发现这里有更多http://www.javaeye.com/news/12382