ArchLinux 编译Anroid5 lollipop 错误解决

错误1,python工具出错

错误情况如下:

============================================
File "build/tools/findleaves.py", line 95
    print r
        ^
SyntaxError: Missing parentheses in call to 'print'
File "build/tools/findleaves.py", line 95
    print r
        ^
SyntaxError: Missing parentheses in call to 'print'
File "build/tools/diff_package_overlays.py", line 88
    print r
        ^
SyntaxError: Missing parentheses in call to …
more ...

小众又新颖的GUI

小众的新GUI框架记录

  1. ugfx, C语言 STM32等MCU可使用的嵌入式GUI,商业级但免费无任何版权限制,可为创客,商业等任何用途。且包含一个The µGFX-Studio GUI构建程序可用。

网址: http://ugfx.io/ 下载连接 https://community.ugfx.io/index.php?/files/

  1. ilixi 基于DFB的C++嵌入式Linux平台GUI,完全开源 http://www.ilixi.org/

基于DirectFB,libsigc++等平台组件构建,看官网有个行车电脑的ui demo,API粗看了下跟WxWidget比较接近,从类列表看,3D等支持都是有的。支持buildroot构建工具,支持yocto,挺不错,值得尝试。

  1. libui, C语言的桌面跨平台,本地UI风格的库,居然拥有10多种语言的binding了。https://github.com/andlabs …
more ...

安卓内核编译错误 kernel/timeconst.h defined(@val)

错误情况

今天编译安卓内核出现错误,

$ ./mk -k
#
# configuration written to .config
#
scripts/kconfig/conf --silentoldconfig Kconfig
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
make[1]: 'include/generated/mach-types.h' is up to date.
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  TIMEC   kernel/timeconst.h
Can't use 'defined …
more ...

关于c语言位域的字节对齐问题

最近在STM32F4上面进行嵌入式开发,需要做通讯,报文规定的字段并不以字节为最小单位,好多2,3位的长度元素 对于C语言,我们一般用位域来解决。

可是,C教科书上给我们讲的位域不占用很多空间的前提没有讲述清楚,经查证,默认情况下C语言并没有规定统一 的字节对齐策略,导致用sizeof计算结构大小的时候结果在不同的平台上结果五花八门。下面代码的结构体,按理是 4个字节,结果默认情况下gcc计算结果为6。

网络资料显示需要对结构体加pack属性, 这下GCC是对了,但是在win平台下面的MinGW结构居然是5
???

玩我呢? 后面搜索MinGW 位域对齐问题,发现MinGW并不像我想象的就是GCC,跟linux平台和cygwin并不完全相同, 至少这个地方表现跟VC++平台一致。

好了,用pragma来指定按字节对齐的方式,按1字节对齐,这样位域才能正确。

代码如下:

#include <QCoreApplication>

#include <stdint.h>

#if defined WIN32 || defined _WIN64 || defined WINNT
    #pragma pack(push,1)
#endif

struct …
more ...

关于c语言const修饰符对指针变量的修饰问题

在看同事的jni幻灯片的时候,看到了const 指针,就顺便聊了下,一直都觉得 带 const 修饰符的都应该 在声明的时候赋值,声明之后,再赋值是不过语法检查的。

结果发现,对于指针来说,情况并不是我想的那样。

对于char *来说,const 未修饰 变量名称时候, 赋值都是在可以后面随意改动的,也就是指针可以 重新任意赋值,但是赋值后的内存区域是不能修改的,但是若 const 是在修饰 变量名称,那么跟 普通类型变量都一样, 需要声明的时候赋值,否则,根本过不了语法检查。

代码如下:

#include <stdio.h>
int main()
{
    const char *a  = "xxxxxx";
    char const  *a1  = "xxxxxx";
    char * const c = "1111111 …
more ...

人, 理想, 现实

对,这个话题看起来挺大的,但是我先声明下,我只是把自己的心里活动胡乱的摆出来而已。

转眼间,或者无意之中,自己已经长大了,对,应该可以算是长大了吧。窗外是呼呼的大风,有没么那么凌咧
我并不清楚, 但却让我想起来了自己幼时。
生活给我的影像是现实除了绿色的树林,湛蓝湛蓝的天以及数不清的繁星点点之外, 你还会遇到一个没有办法
的事情,对, 的确是这么回事,还是会很清楚的记得冬天快到年关的寒冷气息,很独特的味道,你知道风里会
闻到年就快要到了。 嗯,我的确很向往糖果,瓜子,还有几乎没怎么见过的花生,桔子是很少问到的那种味道,
虽然我对苹果的味道非常熟悉。你觉得那会很快乐么? 我不知道,其实当时可能也不知道, 就几岁大点,只知道
刚刚吃过了好一阵子讨厌的玉米混白面的面条了,只知道这种风意味着我可以闻到象喷喷的肉了吧,虽然不会一次
吃非常的一大口,对, 你给我吃我也吃不了多少的。
类似的感觉小时候应该很多吧, 呵呵,现在看来,很多人(包括身边的一堆人吧应该)会说,不是吧? 有那么恼火?
呵呵,摇摇头笑笑便是 …
more ...

关于 C语言 里的 反射或者内省 的讨论

在语言里面, 根据class名字能够知道其成员的 功能叫做 内省c语言有没有这个功能.

可以想到的办法是 通过宏,你在定义一个结构体的时候,同时生成了一个数据结构存放了这个class的成员名称, 同时, 得到成员的类型, 比如  struct {int a, float b};

通过例子里面的宏可以得到  int a, float b, 这样的字符串的

这个其实已经解决了上次你做 sql数据库函数时想要的功能

对了  今天开会研究nvram的意思就是以后我就不用写那个数据库的东西了?

如果 再得到成员列表字串的时候把类型分立出来, 然后你可以用 "int", sizeof(int); "int", sizeof(float); 这样的东西再做映射, 然后得到一个结构体类型的时候, 即便只有一个指向 class的指针,我们也有办法 把里面的成员一个一个取出来

这样, 对于数据库这样,你每次存的数据结构不同,但是query,什么的这些操作相同的这些操作,完全可以只写一个组函数方法就够了,而不用每
基本上可以达到 动态语言里面的 …
more ...

学习unix路之愚见

前言

这段时间公司安排带领新人, 加上公司上层软件开发者的一些做事方法和思想我不是很赞同, 深感团队里人的重要性, 以前只是觉得技术和人都不大是问题, 可能机遇才是最难的事情, 但是现在看来,天时地利人和中最怕的是人和了, 一个团队做一件产品,两三年之后还拿不出东西来,做出来的东西如同大学的课程设计,只是一些能工作的代码的组合,界面使用上出现的逻辑以及错误提示达到了令所有常人难以理解的地步,以前真没有这种体会,所以才深感可怕。 这里我并不想对代码层次, 面向对象, 抽象, 以及做C的人根本不懂面向对象这些话题进行口舌,只是结合自己的学习路程, 从单片机硬件到单片机软件,C语言的编程,再到嵌入式linux系统的理解(bootloader到内核以及shell和应用),和python和cpp这样的语言的使用感受来说下我的思维观点: 因为团队很多人并不觉得软件开发都是一回事这种观点, 抽象或者说人的整个做事情思维方式差异太大。

以下是我对新人的学习建议,这里摘录出来,其中基本也是我的思路和思维方式,其实个人愚见: 你见的多了,自然觉得都是一个道理了,大道至简,简单就是美,联系实际生活人的认知和解决问题的方法是如此之统一和简单, 要不然怎么会有哲学的产生?

怎么走unix之路?

作为unix/linux程序员(有可能被逼的,但是已经是了), 并且作为嵌入式程序员,基本的要求是C语言要掌握,并且能够很轻松的给人说明白什么是指针,什么是一板一眼的做事情(或者写程序的方法),面向对象是一个 很好的方法,不过面向对象的本质很少有人能够真正明白 …

more ...