如何在嵌入式C++开发中缩减代码尺寸

最近在做的一项工作是将Arduino Due的类库移植到STM32上,Arduino经过多年的积累,类库已经比较完善了,其中也不乏一些C++的高级或者动态特性。比如虚函数和抽象类、动态存储分配、函数和运算符重载等等。

一直以来,C++是否适用于资源极其有限的嵌入式系统就是一个备受争议的问题。实际应用中,我也确实遇到了诸多的问题。其中最突出的就是代码尺寸的问题。我选用的ARM单片机有64KB的Flash和20KB的SRAM空间,这在8051时代已经是高端大气上档次的豪华配置了,但当我们用C++编译器编译一下那些用C++写成的简单到不能再简单的代码,就会发现这点Flash空间简直就是战斗力只有五的渣渣。。。

正是由于这种现象,我最近几乎只能花一半的时间编程序,而另外的一半时间却要来设法缩减代码的尺寸。因为在最初的时候,一个闪烁LED并在串口输出一个字符串的程序就需要100K的Flash空间,实在是难以置信。

继续阅读

坑爹的搜狐软件源以及由软件源引发的连锁反应

昨天由搜狐提供了ubuntu官方cn软件源挂了,该返回软件包内容的地方返回了一个中文的网页。而我一台Ubuntu 12.04 LTS的服务器、一台Ubuntu 12.10的PC都使用的是该软件源。由此引发的连锁反应一直持续到了今天。。。

昨天连上ssh,开开心心的apt-get update了一下,结果update的速度巨慢无比,一直在Waiting for header。以为是服务器的问题,于是在Ubuntu的PC上也update了一下,居然是类似的问题。我非常困惑为啥今天的update速度这么慢。回头一看服务器这边,已经结束了,报了一堆错误。但错误的大概意思是说没能成功,继续使用原来旧的数据。由于我急着给服务器装软件,就无视了那个错误,直接install了,没想到居然说这些软件没有认证,是否要强制安装,这可是官方的软件源啊,闹不住啊,于是取消了安装。再看PC这边,update也结束了,也报错了,但错误信息跟服务器不完全相同。于是我在一开始就没往软件源有问题这个方向去想。

继续阅读

Mac OS X通过SSH连接Linux服务器时中文出现乱码的解决方法

这个问题跟Mac的终端程序有关。修正方法是:

编辑Mac系统下/etc/ssh_config这个文件,将其中SendEnv LANG LC_*这一行前面加一个井号,注释掉,保存退出

再使用ssh连接远程Linux服务器时,中文就不会有问题了~


版权声明

The Bloom of Youth by KUANG Qi is licensed under a Creative Commons BY-NC-ND 4.0 International License.
况琪创作并维护的锦瑟华年博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证

本文首发于The Bloom of Youth | 锦瑟华年博客( http://kuangqi.me ),版权所有,侵权必究。

本文永久链接:http://kuangqi.me/ios/fix-the-ssh-problem/

实验室电脑装Ubuntu手记

自认为是*nix用户,不过从来没在自己的PC上装Ubuntu,终于有自己的机位了,装了一个Ubuntu Desktop 12.10

把遇到的一些问题记录一下

apt-get不能用

不管是install还是update,任何命令都报错

1
2
3
E: Encountered a section with no Package: header
E: Problem with MergeList /var/lib/apt/lists/security.debian.org_dists_squeeze_updates_contrib_i18n_Translation-en
E: The package lists or status file could not be parsed or opened.

解决方法是删掉之前坑爹的缓存

1
rm -rf /var/lib/apt/lists/*

继续阅读

董奇校长座谈会-我的发言稿(未删节)

尊敬的董校长、各位领导、各位同学下午好,我是况琪,信息学院2009级计算机系本科生。今天要汇报的是我们在过去两年半的时间里,一直坚持研究开发并着力推进的一个科研项目,也就是我们的自习室空座位实时报告系统。我们的系统通过安装在自习室中的监控摄像机,获得教室的实时图像,通过计算机自动分析的手段,对教室中的空座位进行计数。将教室的空闲情况通过网站、手机、电子屏等方式传达给同学,指导同学去空闲的教室上自习。

这个项目是完全由学生自主命题,组织申请科研经费并在导师的指导下完成的。这个项目立项之初,就获得了超乎我们想象的关注。同学对我们的期望也是我们进步的动力。在我们的努力下,本项目相关研究先后获得北师大本科生科研基金、北京市大学生科学研究与创业行动计划、教育部大学生创新创业训练项目、100365首善行动-金隅嘉业科技创新支持行动等多项学校、国家和社会企业家的经费支持。我们的研究成果获得2009年度校级优秀项目、第19届、第20届两届京师杯竞赛一等奖第一名、第6届、第7届两届首都“挑战杯”竞赛一等奖、第12届全国挑战杯竞赛三等奖等学术奖项。另外还在中国专利年会、北京国际文博会等大型展会上获得两项与科技创新有关的社会奖项。

继续阅读

关于ISP、IAP、DFU和bootloader

这是嵌入式开发中常用的几个专业术语,其诞生的背景和其具体作用大概如下:

在很久很久以前,那是8051单片机流行的时代,做单片机开发都需要一个专用工具,就是单片机的编程器,或者叫烧写器。说“烧”写一点不为过,当年的经典芯片AT89C51在编程时需要十几伏的高电压,加在一个特定的引脚上,才能进入编程。对于某款芯片的编程,都有一个特定的时序,这个时序通常在芯片的datasheet里进行描述并以硬件实现。另外在编程器里的也有一个MCU,这其中使用软件产生这个时序,从而对目标芯片进行编程。电脑通过串口把程序发到编程器,编程器按照规定的时序把程序送入目标芯片。

继续阅读

山寨J-Link V8仿真器与Cortex-M4开发板之不得不吐的槽

下载J-link仿真器驱动

上了SEGGER的官方网站,找到了下载驱动的地方,点了让我输入序列号,我看仿真器的背面,没序列号啊~我只好点下面的一个我没序列号的链接,点进去它问你为啥没序列号,其中包括板载仿真器、OEM产品等等,我也不知道我为啥没序列号,只好点了一个其他原因。。。然后它让我保证,不将软件和仿真器用于非法用途,好吧,我保证。。。

下面的一幕我震惊了——网站上出现了十几张仿真器的图片,我以为是让你选自己是哪一款,我一眼就看到了我的那款,鼠标点了没反应,只好仔细看英文提示,结果人家说——这里是一个山寨仿真器大全,如果您使用的是以下这些图片中的仿真器,那基本可以确定你那个是山寨的。这些山寨仿真器基本都是在中国和俄罗斯制造的。如果你不确定你的是不是山寨,请联系XXXXX。。。。

继续阅读

MSP430 Value Line MCU的时钟系统

关闭看门狗

由于要使用仿真器调试,加断点后MCU被挂起,会导致看门狗被触发而将MCU复位。因此在调试阶段,我们需要先关闭看门狗。关闭看门狗的方法是:

1
WDTCTL = WDTPW + WDTHOLD;

WDTCTL是一个16位的寄存器,顾名思义,就是看门狗的控制寄存器。WDTHOLD是控制看门狗开关的标志位。给WDTHOLD置位即关闭看门狗。但是这个WDTPW是什么呢?查手册得知WDTPW是看门狗的密码,这是一个宏,被定义为了0x5A00,这个密码是干什么用的呢?原来,WDTCTL寄存器是一个非常特殊的寄存器,为了防止程序异常时意外关闭看门狗,对它进行赋值操作时必须将其新值的高8位设为0x5A这个特定的值,也就是“密码”。如果赋值时新值的高8位不是0x5A,会导致MCU立即被复位。总之,对WDTCTL进行任何修改操作时,都要加上WDTPW的值。

继续阅读

电子积木开发手记

2012年3月24日

最近准备做个串口通信的LED数码管显示板,搞了一堆芯片做实验,遇到的问题挺多的,这里记录一下吧。

CMOS芯片不用的输入端不能悬空

浪费一个小时的时间,惨痛的教训证明,数电老师上课强调的事情并非子虚乌有。。。用了一个74HC595串入并出移位寄存器,有个神棍的清零端,我也用不着,就悬空了。结果数码管都是半亮半不亮的状态,很诡异。检查电路,无果。。。后来忽然意识到,这个HC貌似就代表这是个CMOS的芯片,于是把那个清零端接到高电位,和谐了。。。

继续阅读

北师大SSL VPN系统——你彻头彻尾地震惊了我!

寒假放假前,收到了学校的邮件,说我们有需要的话可以去申请开通北师大的VPN以便在假期访问校内的资源。于是就顺手申请了一下,后来果然通过了申请,得到了账号。然而就从得到账号那一天起,这个系统一次又一次地给我带来了惊喜甚至是惊吓。随后的发生的一系列事件,让我彻底震惊了!

第一震:兼容性

从打开登录的网页说起,可是发现这个系统居然只支持Windows系统,而且还要用32位的IE浏览器。这不是坑爹吗?

第二震:基于ActiveX

无奈在Mac上开起了Windows XP的虚拟机,下载那个传说中的登录客户端。我很困惑为啥网页有登录界面了还要装客户端,结果装上一看是基于ActiveX的,ActiveX技术在1996年由微软提出,并应用到了其IE3浏览器中。至今已经有15年的历史。ActiveX技术在其安全性,交互性和可移植性等许多方面早已不适应当今的互联网发展,就连微软也已经放弃了该技术,在微软的官网上貌似已经找不到ActiveX的影子了。但令人不解的是,中国的IT企业却咬住这块狗屎不放,各种ActiveX控件打着“安全”的旗号在各大网站上大行其道。其中最为常见和常用的要数臭名昭著的“网银安全控件”。说到“安全控件”,我可以连续吐槽几个小时,好在本文主题并不是吐槽ActiveX和安全控件,暂且搁置不说。

继续阅读