Archive for category 技术研发
[转贴]享受Code::Blocks编辑快感的几个关键
原文链接:http://blog.csdn.net/Utensil/archive/2008/12/24/3593502.aspx
说明:
1)以下需要设置的地方均在Settings->Editor…弹出的对话框中。
2)不少命令都可针对当前行或选中的代码块,下文简称当前行或选中块。
==日常编辑==
• 按住Ctrl滚滚轮,代码的字体会随你心意变大变小,对保护视力特别有好处。
• 在编辑区按住右键可拖动代码,省去拉(尤其是横向)滚动条之麻烦;相关设置:Mouse Drag Scrolling。
• Ctrl+D可复制当前行或选中块。
• Ctrl+Shift+C注释掉当前行或选中块,Ctrl+Shift+X则解除注释。
• Tab缩进当前行或选中块,Shift+Tab减少缩进。
• 可拖动选中块使其移动到新位置,按住Ctrl则为复制到新位置。
• 按下Atl,再拖动鼠标,可以实现部分选择(即只选中一个区域内的字符,而不会包含它们所在行的其他字符)。
• 需要更大编辑空间时,F2和Shift+F2分别可以显隐下方Logs & others栏和左方的Management栏。
==自动完成与缩写==
1)优化代码自动完成功能:在Code-completion and symbol browser中,
• 将Automatically launch when typed # letter中的4改成2,这样打两个字母就会有提示了。
• 将Keyword sets to additionally include中1到9都勾上(可在Syntax highlighting 的keywords…中设置,其中1是C++关键字,3是Doxygen关键字;我曾将wxWidgets的类名都加入7并设置相应的字体(粗黑体),看代码时特别爽)
• 将Delay for auto-kick-in when typing [.::->]拉到 200ms,这样快点出来提示
• 选中Case-sensitive match,防止一些无关的东西干扰,如果你想它帮你纠正大小写,那就去掉勾
• 在Keyboard short-cuts中将Edit->Code complete的快捷键由Ctrl+Space改为Alt+/,因为前者与中文输入法切换冲突,该快捷键为已经输入的(不是正在输入的)词提供自动完成。
2)看Abbreviation一栏,里面定义了许多缩写(还可以自定义),只要输入这些缩写,并按Ctrl+J,就可以自动完成常用的代码框架,并将光标放在恰当的地方(自定义时用|表达)。常用的有:guard、class、switch等。
3)如果你声明了一个类,你可以在cpp文件中右击,Insert->All class methods without implementation…来插入你还没定义的方法的定义(省去不少打字的功夫哦),也可使用Insert->Class Method declaration/implementation…来插入一个方法的声明或定义。
==导航相关==
• Ctrl+G 到达指定行,ALT+G 到达指定文件,Ctrl+Alt+G 到达指定函数(支持头文件中的函数定义),F11 切换源文件与头文件。
• Ctrl+PageUp 到达上一个函数,Ctrl+PageDown 到达下一个函数。
• Ctrl+B 添加书签,Alt+PageUp和Alt+PageDown可以切换书签。
• Ctrl+Shift+B可找到匹配的括号。
• 看长代码时,可右击,Folding->Fold All,然后慢慢展开来看,也可充分利用左方Management栏的Symbol浏览器。
• 在一个变量、函数或宏上右击,三个以Find开头的菜单项,分别可以为你转到它的声明、定义和找到所有出现的地方(按F2在下方Thread Search那里查看)。
其他:
• General Settings中可以设置缩进、自动换行等细节。
• 让Code::Blocks永远记住你的Layout,尤其是debug的layout,善用debug工具栏。
• 备份C:\Documents and Settings\[你的用户名]\Application Data\codeblocks\Default.conf,如遇重装,将其放在codeblocks.exe所在目录,就不会丢失你的配置;这样也可以打造出Code::Blocks的绿色版。
给WD MY BOOK网络硬盘盒安装SVN
搞了个盒子,想安装SVN到上面去,但不建立交叉编译环境,很麻烦,难度极大.
用SSH连接上去发现上面有GCC了,于是直接在上面编译吧.
configure花了15分钟,make花了126分钟.
参考了这个文章,不过没有安装APACHE,节省内存当缓存用.
http://bruce.in/p/873
下载源代码:
下载页面:
http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=260&expandFolder=74
$ wget http://subversion.tigris.org/downloads/subversion-1.6.9.tar.bz2
$ wget http://subversion.tigris.org/downloads/subversion-deps-1.6.9.tar.bz2
解压源文件:
$ tar -vxf subversion-1.6.9.tar.bz2
$ tar -vxf subversion-deps-1.6.9.tar.bz2
开始编译:
./configure –disable-mod-activation –without-berkeley-db –without-apache-libexecdir
make install时出错了,说是找不到什么库,查了下这些库并没有在PATH中,只好手动添加
ld.so.conf
/usr/local/serf/lib
/usr/local/apr/lib
总算是成功了,测试了一下可以运行.
于是做个简单的启动脚本吧.
/etc/init.d/svn.sh
#!/bin/sh
# description: Svnserve auto start-stop script.
# chkconfig: - 20 80
#
SVN_HOME=/usr/local/bin/
SVN_OWNER=root
if [ ! -f "$SVN_HOME/svnserve" ]
then
echo "svnserver startup: cannot start"
exit
fi
case "$1" in
'start')
su - $SVN_OWNER -c "$SVN_HOME/svnserve -d -r /shares/internal/PUBLIC/svn-root"
;;
'stop')
su - $SVN_OWNER -c "killall svnserve"
;;
'restart')
su - $SVN_OWNER -c "killall svnserve"
su - $SVN_OWNER -c "$SVN_HOME/svnserve -d -r /shares/internal/PUBLIC/svn-root"
;;
esac
然后在network_servers.sh中照其它服务的样子添加一行就行了
让codeblocks在LINUX下用XTerm调试程序完美显示中文
设置–>环境
把”运行控制台程序的终端的后面参数修改为
“xterm -fn -misc-fixed-medium-r-normal–18-120-100-100-c-90-iso10646-1 -T $TITLE -e”
原来只有”xterm -T $TITLE -e”
原因:字体库不全,部分文字无法显示
引关内容: 如何让xterm 显示中文
今天迁移并删除了两个在google code上面的小项目
无用的项目,为不占用google的空间,就打算删除了,但里面的东西还是希望留下来做个纪念,于是迁移了下来.
操作如下:
1.在本地建立一个空的库用来安置要迁移过来的库.svnadmin create dest-project-name
2.设置好本库的用户及权限设置,然后在其hooks目录放一个pre-revprop-change.bat文件,内容为空即可
3.同步初始化空的库.svnsync init dest-url source-url
4.开始同步.svnsync sync dest-url
这样,就自动把源库的全部版本检出,并提交到新的库里面去了…
备份好新的库,源库就可以放心的删除了…
参考链接:
Subversion库迁移及备份方案:http://www.yeeach.com/2008/05/20/subversion库迁移及备份方案/
详说 Subversion备份:http://doc.iusesvn.com/show-37-1.html
wxWidgets 框架程序如何获取程序的传入参数[转]
原文链接:http://blog.csdn.net/qiqi5521/archive/2008/05/26/2481172.aspx
原文的有点太长,只取最重要的:
“实际上,wxWidgets框架下的App对象,本身即具有两个成员:argv argc 存储的正是程序的传入参数,其数据类型和使用方法和控制台程序main函数的两个参数argv argc一模一样。唯一不同的是,对于控制台程序,argv 和argc是做为main函数的参数传进来的,是结构化编程时代的特征,而如今面向对象一统天下,argv和argc虽然名称没变,但却已摇身一变为 app对象的成员变量.“
wxWidgets使用显示图片wxStaticBitmap请注意刷新
写一个小工具,需要显示一张图片,但发现载入图片后显示不太正常,再次载入,位置变了但原图还在,最小化一下后再恢复显示正常.
觉得应该是刷新问题,但试了无效.
搜索半天发现,我是frame里面添加boxsizer再添加wxStaticBitmap.想刷新也刷新不了.
于是更改为frame里面添加panel,然后再在panel里面添加wxStaticBitmap.
wxStaticBitmap::SetBitmap显示图片后再对panel执行Refresh操作,显示就正常了…
mingw编译wxWidgets程序添加图标及程序版本等资源信息
图标等资源信息都是通过资源文件**.rc来添加
样板如下:(resource.rc)
#include "wx/msw/wx.rc"
aaaa ICON "radio_256.ico"
#define VERSIONINT 1,0,0,1
#define VERSIONSTR "1, 0, 0, 2"
1 VERSIONINFO
FILEVERSION VERSIONINT
PRODUCTVERSION VERSIONINT
FILEOS VOS__WINDOWS32
FILETYPE VFT_UNKNOWN
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "公司名称"
VALUE "FileDescription", "文件描述"
VALUE "FileVersion", VERSIONSTR
VALUE "InternalName", "内部名称"
VALUE "LegalCopyright", "版权所有"
VALUE "OriginalFilename", "原始文件名"
VALUE "ProductName", "产品名称"
VALUE "ProductVersion", VERSIONSTR
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 1033, 1200
END
END
mingw调用WINAPI实现串口操作
mingw调用WINAPI好像还是比较简单滴
先用个小例子看看mingw调用WINAPI是否正常
#include? <windows.h>
int main()
{
MessageBox (NULL,”text”, “title”, MB_OK);
return 0;
}
编译之: gcc mian.c
如果能弹出消息窗口说明正常
如不能 则可能是mingw没有安装WINAPI包
接下来就是开始要操作串口了
打开串口设备是CreateFile()
示例:
HANDLE hCom;
hCom = CreateFile("com1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
如果CreateFile()返回失败
则可以用GetLastError()获取失败代码
if ( hCom == (HANDLE)0xFFFFFFFF )
{
return GetLastError();
}
else
{
return 0;
}
GetLastError()返回的错误代码一般是: 2,串口不存在 5,串口已被占用
然后就可以设置串口了,见很多人常问,说SetCommState()返回失败
原理是参数非法
我们可以先用GetCommState()获取当前串口参数
再修改我们需要调整的参数,然后再加写之,这样就可以了
DCB????????? dcb;
GetCommState(hCom,&dcb);
dcb.BaudRate = baudrate;
dcb.ByteSize = 8;
dcb.Parity = 0;
dcb.StopBits = 0;
dcb.fBinary = TRUE;
dcb.fParity = FALSE;
SetCommState(hCom,&dcb)
另外我们常用的是9600,8,N,1
但这里却StopBits只能设置成0 不知道为什么
其实我们可以检测设置是否成功
然后再设置成功,然后再清空缓存区和设置超时
if ( SetCommState(hCom,&dcb) != TRUE )
{
return FALSE;
}
else
{
SetupComm(hCom,1024,1024);
PurgeComm(hCom,PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR );
GetCommTimeouts(hCom,&timeout);
timeout.ReadIntervalTimeout = 1000;
timeout.ReadTotalTimeoutMultiplier = 500;
timeout.ReadTotalTimeoutConstant = 5000;
timeout.WriteTotalTimeoutMultiplier = 500;
timeout.WriteTotalTimeoutConstant = 2000;
SetCommTimeouts(hCom,&timeout);
return TRUE;
}
下面就可以发送和接收数据了
数据发送和接收都没什么难度了
参考文章资料:
使用Win32API实现Windows下异步串口通讯
深入浅出VC++串口编程之基于Win32 API
STM32用SWD4线模式的时候要选择软件复位
STM32用SWD4线模式的时候要选择软件复位(默认为硬件RESET)
不然烧写FLASH会失败
有空学习下高数
数学方面的知识都忘光了快..
不对,是我根本就没学过高数
要慢慢补起来
第一步 复习初中的知识
第一节 函数的主要特征: 奇偶性 周期性 单调性 单值性