私は組み込みのARM GNU/Linuxシステム上のユーザ空間で動作するCプログラムを開発中です。私は、charデバイスノード/ dev/fpga_sramからデータを読み込む必要があります。 Cプログラムの中で、以下に示すように、mallocを使ってバッファが割り当てられています。read()を使用したcharデバイスからのバッファへのポインタ
uint16_t *buff;
uint32_t num = 4194304 * 3;
buff = (uint16_t *)malloc(num * sizeof(uint16_t));
リード()関数を使用して、私は以下のコードで示すように、バッファの特定のインデックスにデータを読みたいです。
int ret;
int fd;
int ptr_loc;
ptr_loc = 0;
fd = open("/dev/fpga_sram", O_RDONLY);
ret = read(fd, &(buff[ptr_loc]), 4194304 * sizeof(uint16_t));
close(fd);
バッファは異なる時刻にデバイスノードの/ dev/fpga_sramから読み取っ異なるで満たされる必要があるので、私はこれをしたい理由があります。バッファサイズは読み込んだ総バイト数よりも大きいので、次に示すように、ptr_locを別のインデックスに割り当てることが予想されます。
ptr_loc = 4194304;
fd = open("/dev/fpga_sram", O_RDONLY);
ret = read(fd, &(buff[ptr_loc]), 4194304 * sizeof(uint16_t));
close(fd);
私は、バッファに格納されたデータにアクセスしようとすると、しかし、私はセグメンテーションフォルトを受け取る:
printf("i = 0, data = %u\n", buff[0]); // this line of code causes segfault
私はここで間違って何をやっている、それが持つデバイスノードから読み取ることが可能ですバッファ位置へのポインタ?私は、デバイスノードからの読み込みはGNU/Linuxのファイルからの読み込みに似ていると思います。
mallocからの返品を確認しましたか?そしてあなたはmallocに8MバイトのRAMを持っていますか? –
常に戻り値を確認することを強くおすすめします。 mallocとopen。 – mdec
バッファの最後を過ぎても 'read()'していないのは確かですか? 'ptr_loc> 1'なら、あなたのように見えます。 – Dave