2012年10月15日

NDK与JNI

摘要: 先前和师兄移植过NDK,当时不太明白,中间学会了Makefile。下边是在网上看到的: NDK其实多了一个把.so和.apk打包的工具,这个是很重要的。而JNI开发并没有打包,只是把.so文件放到文件系统的特定位置。如果是做应用开 发,则需要NDK工具,不然你开发的应用程序怎么给用户用呢?难道帮他重新编译文件系统?其他至于实现,java调用本地C/C++函数,及其编写方式, 我觉得JNI和NDK没有什么区别。还有一个我个人理解,NDK开发C/C++只能能使用NDK自带的有限的头文件,而使用JNI则可以使用文件系统中带 的头文件,比如utils/Log.h,而后者的资源更多,当然NDK正在努力. 阅读全文

posted @ 2012-10-15 19:45 阿加 阅读(1287) 评论(0) 推荐(0) 编辑

2012年9月29日

提取 主 设备号

摘要: 1 #!/bin/sh 2 module="device-mapper"3 major=`sed -n -e "/$module\$/p" /proc/devices | awk '{print $1}'`4 echo $major 阅读全文

posted @ 2012-09-29 12:44 阿加 阅读(147) 评论(0) 推荐(0) 编辑

2012年9月20日

32位无符号整数平方根

摘要: 1 int isqrt(unsigned x) 2 { 3 unsigned m, y, b; 4 5 m = 0x40000000; 6 y = 0; 7 while(m != 0) 8 { 9 b = y | m; 10 y = y >> 1; 11 if(x >= b) 12 { 13 x = x - b; 14 y = y | m; 15 } 16 m = m >> 2; 17 } 18 return y; 19 } 阅读全文

posted @ 2012-09-20 09:28 阿加 阅读(231) 评论(0) 推荐(0) 编辑

2012年9月19日

交换寄存器中的相应字段

摘要: 对于两个寄存器x和y以及掩码m,当第i位的掩码m(i)=1时,交换x和y的第i位内容,而当第i位的掩码m(i)=0时,保留x和y的第i位内容不变x = x ^ y;y = y ^ (x & m);x = x ^ y; 阅读全文

posted @ 2012-09-19 19:42 阿加 阅读(151) 评论(0) 推荐(0) 编辑

2012年9月18日

same number of one's bit

摘要: 写了大概一下午,本以为很easy的,写了才知道“边界+细节”,尤其“(ones >> 2) >> ntz”,如果写成了“ones>>(2+ntz)"就会报错,边界部分自己调了。关于bitcount部分,做了修改,基本只用一个大的常数,以及一些小的数字。 4 int bitcount(unsigned int n) 5 { 6 unsigned int tmp; 7 tmp = n & 0x33333333; 8 n = n - tmp; 9 n = (n >> 2) & 0x33333333; 10 tmp = tmp 阅读全文

posted @ 2012-09-18 19:05 阿加 阅读(156) 评论(0) 推荐(0) 编辑

求取32位无符号整数中最低位位值为1的位置 && 求取32位无符号整数中最高位位值为1的位置

摘要: 3 int bit_pos(unsigned int n) 4 { 5 n = n & (-n); 6 n = n - 1; 7 n = n - ((n>>1)&0x77777777) - ((n>>2)&0x33333333)-((n>>3)&0x11111111); 8 n = (n + (n>>4))&0xf0f0f0f; 9 n = n + ((n >> 8)& 0xf) + ((n >> 16)& 0xf) + ((n >> 24)& 0 阅读全文

posted @ 2012-09-18 12:04 阿加 阅读(1136) 评论(0) 推荐(0) 编辑

2012年9月16日

上下舍入至2的幂次

摘要: 4 int clp2(unsigned int n) 5 { 6 --n; 7 n = n | (n >> 1); 8 n = n | (n >> 2); 9 n = n | (n >> 4); 10 n = n | (n >> 8); 11 n = n | (n >> 16); 12 return n + 1; 13 }unsigned flp2 (unsigned x){ x = x | (x >> 1) x = x | (x >> 2) x = x | (x >> 4); x = x | (x 阅读全文

posted @ 2012-09-16 19:57 阿加 阅读(208) 评论(0) 推荐(0) 编辑

32位无符号整数中1的个数

摘要: 4 int bitcount(unsigned int n) 5 { 6 n = n - ((n>>1)&033333333333) - ((n>>2)&011111111111); 7 n = (n + (n>>3))&030707070707; 8 n = n % 0x3f; 9 return n; 10 } 17 int bitcount(unsigned int n) 18 { 19 n = n - ((n>>1)&0x77777777) - ((n>>2)&0x33333333)-(( 阅读全文

posted @ 2012-09-16 19:52 阿加 阅读(540) 评论(0) 推荐(0) 编辑

2012年7月5日

od

摘要: 因为对unicore的指令组成不了解,所以自己写了程序测试下,目的是看看机器码,unicore是小端架构,用xxd 或者hexdump时看着有点不方便,那么这时可以用od命令od 命令会读取所给予的文件的内容,并根据给定的参数输出内容,默认为八进制参数:-A d 表示最左侧的偏移量按十进制显示;-A还可以接[doxn],其中d表示十进制,o表示8进制,x表示16进制,n表示不显示该偏移量. -A<地址进制> 选择要以何种基数计算字码 a名称 cASCII d 十进制,有符号 o八进制 x十六进制 ... 阅读全文

posted @ 2012-07-05 19:02 阿加 阅读(353) 评论(0) 推荐(0) 编辑

2012年6月5日

plt_0

摘要: 记录下动态延迟加载,在unicore上没运行起来,所以在x86上运行函数test.c1 #include<stdio.h>23 int main(void)4 {5 printf("abcdefg\n");6 return 0;7 }反汇编(省略了相当一部分,因为没看懂且与PLT无关)207 080482e0 <puts@plt-0x10>:208 80482e0: ff 35 f8 9f 04 08 pushl 0x8049ff8209 80482e6: ff 25 fc 9f 04 08 jmp *0x8049ffc210 80482ec: 00 阅读全文

posted @ 2012-06-05 20:25 阿加 阅读(443) 评论(0) 推荐(0) 编辑

导航