• 締切済み

Pythonでのmmapの使い方

よろしくお願いします。 現在、SH3LSR7706マイコンのLEDを点滅させるプログラムをPythonで実装しています。 そこで、 http://mes.sourceforge.jp/mes2/index-j.html こちらにあるプログラムを参考にさせていただいてるのですが C言語で以下のように書いてある部分をPythonで書くにはどうすればよいでしょうか? <<< code mmaped = (volatile unsigned char*)mmap(0, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0xa4000000); >>> Pythonのドキュメントよると http://www.python.jp/doc/2.4/lib/module-mmap.html mmapメソッドにoffsetの引数を渡すところがないので、↑プログラムの「0xa4000000」の部分をどうすればよいのか教えてください。 今は、↓のように書いてますがこれだとオフセットの指定がないので意図した意図したアドレスにアクセスできません。(Pythonのバージョンは2.5です) <<< code mmap.mmap(fd.fileno(), mmap.PAGESIZE, mmap.MAP_SHARED, mmap.PROT_READ | mmap.PROT_WRITE) >>> よろしくお願いします。 参考にさせて頂いているプログラム <<< code #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <sys/mman.h> #include <asm/page.h> #define SCPDR 0x136 #define LED 0x10 int main() { volatile unsigned char *mmaped, scpdr; int fd, i; fd = open("/dev/mem",O_RDWR); if(fd < 0) { fprintf(stderr,"cannot open /dev/mem\n"); return 1; } mmaped = (volatile unsigned char*)mmap(0, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0xa4000000); close(fd); if(mmaped == MAP_FAILED) { fprintf(stderr,"cannot mmap\n"); return 1; } for(i = 0;i < 3;i++) { mmaped[SCPDR] |= LED; sleep(1); mmaped[SCPDR] &= ~LED; sleep(1); } munmap((char*)mmaped, PAGE_SIZE); return 0; } >>>

みんなの回答

回答No.1

mmap時にoffsetを指定できるようになるのは、Python 2.6 以降と なります。それより前は、offset に 0 が渡されてマップされます。 Python 2.6以降を使用するか、サンプルプログラムのように offset=0xa4000000でmmapするようなモジュールをCで書く しかないと思います。