0

これは私の最初の質問です:)。

私はしばらくの間、vxWorks 6.8 で物理メモリを仮想メモリにマップしようとしましたが、成功しませんでした。「vmMap」関数を使用しようとしていますが、どういうわけか次のように返されます:

errno = 0x30065 S_taskLib_NAME_NOT_FOUND.

私のコードは次のとおりです。

int page_size=0;
PHYS_ADDR GPIO_BASE_VIRTUAL_ADDR = 0x40E00000;
VIRT_ADDR VIRTUAL_ADDR=0;

page_size =vmPageSizeGet();
if((VIRTUAL_ADDR = (VIRT_ADDR)memalign(page_size,page_size*2))==NULL)// allocate 2 pages 
{
    printf("error in memalign() errno = 0x%x\n",errnoGet());
}

if(vmMap(NULL,VIRTUAL_ADDR,GPIO_BASE_VIRTUAL_ADDR,(page_size*2))== ERROR )
{
    printf("Error mapping memory errno = 0x%x%\n",errnoGet());
}

どんな助けでも大歓迎です、ありがとう、

モシェ。

4

1 に答える 1

0

ずいぶん前に解決したようですが、薄暗く遠い未来にこの道でつまずくかもしれない誰かのために、パンくずを残しておこうと思いました..

RTP を行っていない限り、MMU がアドレスを変換していない可能性が高くなります。つまり、物理アドレス空間の 0x7fc00400 などに何かが表示された場合、その値をポインタにキャストして使用することができます。

*((short *) 0x7fc00400) = foo; // write 16 bits!

はい、最近では、このようにポインターを (ab) 使用することを提案することはほとんど冒涜的です。

于 2012-05-31T18:58:15.843 に答える