随笔分类 -  日常点滴

摘要:上周同事讨论ARM内存序问题, 正好是感兴趣的方面于是就研究了一下, 可惜电脑爆炸了拖到今天才恢复正常. 内存序问题的由来 内存序(memory ordering)是指处理器访问内存的顺序, 在传统的in order处理器上对内存的访问顺序由compiler在编译期间决定, 处理器顺序执行指令流, 阅读全文
posted @ 2020-11-03 03:07 Five100Miles 阅读(2548) 评论(0) 推荐(0)
摘要:问题 如下所示有两个cxx源文件, 分别定义与使用一个const变量. 将其一起编译时报错: undefined reference of 'meow::miao'. [01:06:44] hansy@hansy:~/testcase$ cat 1.cc namespace meow { const 阅读全文
posted @ 2020-10-11 04:16 Five100Miles 阅读(412) 评论(0) 推荐(0)
摘要:semihosting背景介绍 semihosting是ARM提出的一种新的调试机制, 它允许运行在目标ARM架构上的代码与主机通信并借用主机侧的IO功能, 一般用于仿真环境/调试环境. 更多信息见ARM官方文档. 有意思的是, RISCV在今年也推出了基于自身架构的semihosting标准, 其 阅读全文
posted @ 2020-10-01 23:46 Five100Miles 阅读(2432) 评论(0) 推荐(0)
摘要:今天看到一个浮点运算的问题, 觉得很有代表性, 就记录一下. 有同事问下面这段代码运行结果是什么, 还很贴心的给了4个选项: 30500 (0.000061 * 500 * 1000000) 与A同量级的近似值 具体值不知道, 但肯定是小于A量级某个浮点数 1024.0 (精确值) #include 阅读全文
posted @ 2020-06-22 01:48 Five100Miles 阅读(1653) 评论(0) 推荐(0)
摘要:今天定位了一个const引入的优化问题, 问题本身挺简单的, 但是自己太菜, 写代码时竟然没注意, 所以记录一下, 引起警戒. 问题背景与定位 测试团队反馈修改newlib系统调用以后跑coremark报错bad alloc, 于是就看了了下sbrk()的修改. 因为之前在修改newlib时需要通过 阅读全文
posted @ 2020-06-17 22:27 Five100Miles 阅读(404) 评论(0) 推荐(0)
摘要:最近在适配newlib代码时遇到一个关于弱声明的问题, 研究了一下才发现自己对weak属性与链接时符号选择理解有误. 问题背景 在一个库(liba.a)中重新定义了一个weak属性的函数(func_a), 在同一库中调用该函数时链接了弱声明的函数版本, 但是当通过另一个库(libb.a)的库函数(f 阅读全文
posted @ 2020-06-13 22:28 Five100Miles 阅读(772) 评论(0) 推荐(0)
摘要:今天打开vimdiff时自动切到后台了, 手动fg还恢复不了, 但是尝试换个帐号登录是正常的, 怀疑是某个配置导致的问题. 于是比较下两者的vimrc, 发现之前为了能使vim识别alias命令开启了interactive shell, 导致vim的diff命令与shell的diff命令冲突了. 在 阅读全文
posted @ 2020-04-19 22:19 Five100Miles 阅读(420) 评论(0) 推荐(0)
摘要:findfile()类似find命令, 可以快速查找文件. 它接受三个参数: (被搜索的)文件名, 搜索路径(与搜索方式)与匹配次数(-1为不限次数). 返回值是一个包含给定匹配次数的文件列表.例如平时工作时需要在头文件与源文件之间快速切换, 而两者又不在统一目录, 那么可以使用以下代码: 使用fi 阅读全文
posted @ 2018-10-23 00:12 Five100Miles 阅读(1267) 评论(0) 推荐(0)
摘要:之前介绍过一种使用乘法指令优化无符号除法的方式(见hacker's delight笔记), 今天介绍一种使用位运算做有符号除法(除数限制为2的幂). 这种方式要求底层支持有符号与无符号右移指令.记32位被除数为M, 除数为2**N(2的N次幂, N<32), 商为res, 无符号右移指令为ZextS 阅读全文
posted @ 2018-10-17 00:22 Five100Miles 阅读(761) 评论(0) 推荐(0)
摘要:1. 优化方向 1.1 减少数据拷贝1.1.1 尽量减少数据拷贝次数,采用指针而非实际数据传参1.1.2 内核与用户态间数据拷贝注意使用cache,与不带cache的性能可相差10倍(具体参见内存山图) i.e. 鱼眼特性拷贝用户态5400kb的YUV只需6ms,从海思解码帧存(内核态分配地址)拷贝 阅读全文
posted @ 2018-06-27 19:57 Five100Miles 阅读(271) 评论(0) 推荐(0)
摘要:用到第三方库使用printf打印调试信息的时候往往需要重定向日志到文件, 但如果没有源码或修改点较多时就比较麻烦. 这里提供两个重定位方法:1. 修改值为1的文件描述符默认printf打印指向标准输出stdout(fd=1), 最终指向终端. 因此可以关闭值为1的文件描述符再打开另一文件, 之后pr 阅读全文
posted @ 2018-05-27 15:02 Five100Miles 阅读(4199) 评论(0) 推荐(0)
摘要:内核目录下可以使用make cscope快速生成对应架构的数据库, 仅这点就把渣渣si甩了一条街. 其实实现原理很简单, cscope是通过读取cscope.files中文件列表建立的数据库, 因此只要控制cscope.files的输入即可实现不同架构下建立的不同cscope.out. 我们先来看看 阅读全文
posted @ 2018-05-19 14:06 Five100Miles 阅读(694) 评论(0) 推荐(0)
摘要:刚来公司时候看到前人写的python脚本用来生成比较报告, 心中技痒. 正好服务器端没有BC, 脚本用不了. 于是东施效颦, 也写了一个.用的都是原生的svn命令, 自然效果是比不上用BC生成的报告(BC显示的是行内差异, svn只能比较行间差异).更新: 最近终于发现乱码的原因了, svn dif 阅读全文
posted @ 2018-04-16 16:22 Five100Miles 阅读(666) 评论(0) 推荐(0)
摘要:使用if (exp(a) || exp(b)) 当exp(a)结果为true时exp(b)就不会计算 但使用if (exp(a) + exp(b)) 即使exp(a)结果为true也会计算exp(b) 小技巧 看到内核里用到的 阅读全文
posted @ 2018-03-25 16:05 Five100Miles 阅读(277) 评论(0) 推荐(0)
摘要:在stackoverflow上看到这个问题 http://stackoverflow.com/questions/22758232/why-is-access-once-so-complex 原答主已经回答的很仔细了,不过还不够直观,这里做个试验 在arm平台上编译并截取main()的汇编 R0与R 阅读全文
posted @ 2018-02-22 22:17 Five100Miles 阅读(1252) 评论(0) 推荐(0)
摘要:以前测试hisi解码器数据时候写的demo 阅读全文
posted @ 2018-02-22 21:42 Five100Miles 阅读(410) 评论(0) 推荐(0)
摘要:1. linux下文件转码(GB2312转UTF8)vim打开文件后set fileencoding=utf-8 适用打开单个文件修改的情况iconv -f GBK -t UTF-8 input -o output 使用iconv转码, 适用脚本中批处理生成带BOM的UTF8文本echo -e -n 阅读全文
posted @ 2018-02-22 21:13 Five100Miles 阅读(630) 评论(0) 推荐(0)
摘要:原文见http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html#Atomic-Builtins All of the routines are are described in the Intel documentation t 阅读全文
posted @ 2018-02-22 16:50 Five100Miles 阅读(364) 评论(0) 推荐(0)
摘要:errno是线程安全的吗? 假设有A, B两个线程都执行系统调用, 其中A返回EIO, B返回EAGAIN, 在判断返回值时是否会引起混淆? 简单的通过man errno就可以获取答案: errno is thread-local; setting it in one thread does not 阅读全文
posted @ 2018-02-22 16:01 Five100Miles 阅读(1092) 评论(0) 推荐(0)
摘要:最近重构代码, 移植了ffmpeg源码, 有人问了两个问题: 1. MIN_CACHE_BITS的含义, 读取码值时为什么要判断该值 2. get_ue_golomb_long()的含义 这里简要分析下代码(原理性东西比如什么是哥伦布编码就不说了). 先来看下show_bits_long()(def 阅读全文
posted @ 2018-02-22 15:57 Five100Miles 阅读(801) 评论(0) 推荐(0)