dポイントプレゼントキャンペーン実施中!

よろしくお願いします。

現在、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;
intfd, 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;
}
>>>

A 回答 (1件)

mmap時にoffsetを指定できるようになるのは、Python 2.6 以降と


なります。それより前は、offset に 0 が渡されてマップされます。

Python 2.6以降を使用するか、サンプルプログラムのように
offset=0xa4000000でmmapするようなモジュールをCで書く
しかないと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!