All posts by admin

avrdude: stk500_recv(): programmer is not responding

新到手arduino pro mini,马上焊好针脚,下载arduino IDE,烧写了个blink进去。一切顺利,程序完美运行。

但当想修改下参数,再烧新程序时,问题就来了。IDE提示:
avrdude: stk500_recv(): programmer is not responding

编程器不响应??这么快就坏掉应该是不可能的。Google搜索也没在国内社区发现有什么有用的信息,最后在stackoverflow得到了答案。

0、确认链路无误;
1、确认板卡类型、串口类型(现在一般通过USB)选对。
2、打开IDE的调试模式,输出详细信息。
3、在Send [30] [20]之前,按一下板卡上的RESET按钮。

 

choose-arduino choose-serial choose-verbose-mode choose-timeframe-to-reset

新手遇到的,估计99%都是上面的第3点没做。

node v0.8+ compiling

To build:

Prerequisites (Unix only):

* Python 2.6 or 2.7
* GNU Make 3.81 or newer
* libexecinfo (FreeBSD and OpenBSD only)

如果不想升级系统make版本,可以在其他目录安装一个,再alias过去。

常用错误:
out/Release/linker.lock: No such file or directory
解决方法:
export FLOCK
export LINK=g++

setproctitle

setproctitle是个很有用的技巧,它的原理是修改进程的argv[0]来达到修改进程命令行显示的效果。
命令行参数argv和环境变量信息environ是在一块连续的内存中表示的,并且environ紧跟在argv后面。
由于修改前后的命令行长度不一样,为了保证argv和environ的连续性,需要新申请一块内存来存放新的argv,environ,就达到了随意修改进程名字的目的。

ClearSilver 64位机器上编译,test_crc错误的问题

环境:clearsilver-0.10.5,64 bit, SuSE
Running cs regression tests
Failed Regression Test: test_crc.cs
See test_crc.cs.out and test_crc.cs.err
make: *** [test] Error 1

test_crc.cs.err
4c4
< -2128917020 --- > 2166050276

test_crc.cs.out
Parsing test_crc.cs
419156592
1357503972
2166050276

test_crc.cs.gold

Parsing test_crc.cs
419156592
1357503972
-2128917020

解决方法:
直接编辑 cs/Makefile,删除 test_crc 相关内容,重新编译。

常用iptables语句

允许本机ping别人
-A OUTPUT -p icmp –icmp-type echo-request -j ACCEPT
-A INPUT -i eth0 -p icmp –icmp-type echo-reply -j ACCEPT

允许别人ping本机
-A INPUT -i eth0 -p icmp –icmp-type echo-request -j ACCEPT
-A OUTPUT -p icmp –icmp-type echo-reply -j ACCEPT

开放SSH
-A INPUT -s 192.168.1.0/255.255.255.0 -p tcp -m tcp –dport 36000 -j ACCEPT
-A OUTPUT -d 192.168.1.0/255.255.255.0 -p tcp -m tcp –sport 36000 -j ACCEPT

允许本机进行域名解析
-A OUTPUT -p udp -m udp –dport 53 -j ACCEPT
-A INPUT -p udp -m udp –sport 53 -j ACCEPT

如果这是一台DNS服务器
-A INPUT -p udp -m udp –dport 53 -j ACCEPT
-A OUTPUT -p udp -m udp –sport 53 -j ACCEPT

注,上面只是参数部分,完整的命令应该说是
iptables -A OUTPUT -p udp -m udp –sport 53 -j ACCEPT
以此类推。

jsoncpp执行时错误: json test src lib json json value…

jsoncpp执行时错误:
json_test: src/lib_json/json_value.cpp:1025: Json::Value& Json::Value::resolveReference(const char*, bool): Assertion `type_ == nullValue || type_ == objectValue’ failed.

原因分析:
Jsoncpp解析非法json时,会自动容错成字符类型。对字符类型取下标时,会触发assert终止进程。

解决方法:
方案1 对Json::Value取下标前,先判断(value.type()==Json::objectValue)。
方案2 启用严格模式,让非法的json解析时直接返回false,不自动容错。
Json::Features f = Json::Features::strictMode();
Json::Reader reader(f);