程序(进程)在内存中的组织-由ld_brk_point以及brk函数谈起

2012年4月9日 sigma 1 条评论 39,101 views

今天调龙芯模拟器,发现里面有个ld_brk_point,一直不知道是啥东西,后来搜了下,发现就是malloc函数申请空间的起始地址。改值可以通过brk()以及sbrk函数设置。为了说清楚这个问题,有必要先了解下Linux下程序运行时(进程)在内存中的组织。

linux Flexible Address Space Layout

linux Flexible Address Space Layout

阅读全文…

[整理]SD协议概述

2012年3月29日 sigma 没有评论 6,446 views

这段时间折腾某芯片上的SDIO,在这里将相关知识整理下,以便备忘。需要注意的是,由于我们的SD只支持SD模式,不支持SPI模式,因此文中内容也是针对SD模式的,后面不再强调此点。

信号

CLK:时钟信号
CMD:双向命令和响应信号
DAT0-3:双向数据信号
VDD,VSS:电源和地信号
注:SD模式下可以选择总线宽度, 即选用几根DAT信号线(1或4根), 可以在主机初始化后设置.

比特流

SD协议规范的比特流类型有三类:

  • 命令: 是在CMD上传输的用于启动一个操作的比特流. 由主机发往从机, 可以是点对点也可以是广播的.
  • 响应: 是在CMD上传输的用于之前命令回答的比特流. 由从机发往主机.
  • 数据: 是在DAT上传输的比特流, 双向传输.

命令和数据流都有一个开始位和结束位.

命令

SD协议定义了两类命令,广播命令以及点对点命令,

  • 广播命令:给所有卡都发送, 某些命令需要响应.
  • 点对点命令:给指定地址的卡发送, 需要响应.

工作模式

  • 卡识别模式:主机上电复位后即处于此模式,它会在总线上等待卡. 卡复位后也处于此模式, 直到SEND_RCA(CMD3)命令到来.此模式下主机复位总线所有的卡, 验证工作电压, 询问卡的地址. 这个模式下所有数据的传输都是只通过CMD线来完成.
  • 数据传输模式:卡收到SEND_RCA(CMD3)命令后即进入此模式. 主机识别到卡后也进入此模式.CMD7命令用于使指定地址的卡进入传输模式, 任何指定时刻只能有一个卡处于传输模式.传输模式下所有的数据传输都是点对点的, 并且所有有地址的命令都需要有响应.
分类: 贝壳 标签: , ,

启用FTS编译sqlite并用update更新列值

2012年3月16日 sigma 3 条评论 6,769 views

今天,折腾sqlite,需要update一个数据库,发现可以用下面的命令:

UPDATE <table> SET  <col=new_val> WHERE <oth_col=val>

但是,在ubuntu里面用apt-get安装sqlite后,直接执行上面的语句,会报“no such module:FTS3”,因为默认sqlite编译是没有启用FTS3的。因此,需要自己下源码编译,手动编译是加入以下编译选项:

-DSQLITE_ENABLE_FTS3
-DSQLITE_ENABLE_FTS3_PARENTHESIS

用autoconf版本的话,在configure时,加入:

CPPFLAGS= "-DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS "/configure <options>

上面两种方法的目的都是一样的,就是在编译时定义SQLITE_ENABLE_FTS3 和SQLITE_ENABLE_FTS3_PARENTHESIS宏。

参考资料:http://www.sqlite.org/fts3.html

分类: 沙子 标签: ,

关于Python变量和List的append操作

2012年2月28日 sigma 5 条评论 12,389 views

今天,写Python代码,碰到一个很诡异的问题,花了好长时间才明白(也怪我基础不好,没系统学习python,都是用的时候直接抓脑皮用),通过这个问题,我基本搞清楚了Python中的变量以及List的一些操作。在这里给自己Mark下,也希望对读这篇文章的人有点用。
首先,看下面这段代码:

#!/usr/bin/python
# -*- coding: utf-8 -*- 

import os,sys

trace_file = open("./all_memtrace_file_test","r")

all_addr=[]
all_addr2=[]
addr_info2={}
addr_info={}

for line in trace_file.readlines():
    addr_info = {'addr':int(line.split(",")[2].strip(" "),16),'access':line.split(",")[3].strip("n")}
#    addr_info2={}
    addr_info2['addr']=int(line.split(",")[2].strip(" "),16)
    addr_info2['access']=line.split(",")[3].strip("n")
    if addr_info == addr_info2:
        print "addr_info == addr_info2"
    print "addr_info  = ",
    print addr_info
    print "addr_info2 = ",
    print addr_info2
    all_addr.append(addr_info)
    all_addr2.append(addr_info2)
    print "all_addr   = ",
    print all_addr
    print "all_addr2  = ",
    print all_addr2

阅读全文…

mark

2012年2月26日 sigma 没有评论 4,875 views
分类: 未分类 标签:

无觅相关文章插件,快速提升流量