【发布时间】:2012-12-03 01:47:21
【问题描述】:
我有一个用于 Raspberry Pi 的小型裸机程序,它可以绘制到屏幕上。 我使用的是 C,GCC 作为编译器,Yagarto 作为 ARM 工具链。
目前,我有一个标头 (gpu.h),它声明了 GPU 读取的帧缓冲区结构(它包含分辨率和位深度)。 GPU 填充结构中的值,包括要绘制的指针:
struct frame_buffer {
int width;
int height;
int vwidth;
int vheight;
int bytes;
int depth;
int ignorex;
int ignorey;
int pointer;
int size;
};
extern struct frame_buffer framebuf;
结构在 main.c 中定义(不在函数内):
struct frame_buffer framebuf __attribute__ ((aligned (16))) = {GPU_HRES, GPU_VRES, GPU_HRES, GPU_VRES, 0, GPU_BITDEPTH, 0, 0, 0, 0};
main.c 中还有一个用于在屏幕上绘制字符的函数 (draw_char),以及我自己的 putchar() 实现,它使用 draw_char 函数。目前这工作正常。
如果我将 draw_char 函数移动到另一个文件,一切都可以编译,但没有任何内容被绘制到屏幕上。
我认为结构不是全局可用的,所以指针不正确。
有什么想法可以解决这个问题吗?
谢谢
【问题讨论】:
-
如果
draw_char()编译正常但没有使用您在putchar()中设置的framebuf,那么有几种可能会导致这种情况:1. 您的@ 987654326@ 没有写入draw_char()正在使用的“全局”framebuf,2. 一次移动的draw_char()不再使用您正在编写的“全局”framebuf到putchar(),3. 可能您的putchar()不再使用您认为的draw_char()。首先检查名为framebuf的本地变量。我会开始在那里打猎。 -
对齐 (16) 定义在另一个 c 文件中不可见。尝试将其添加到 extern frame_buffer 声明/
-
putchar() 实际上并没有改变 framebuf。它只是调用 draw_char(),并将单个像素(以 16 位增量)写入 GPU 提供的指针。还有另一个函数最初向 GPU 请求指针(一旦关闭)。 GPU 将地址存储在结构本身中。此函数已在另一个 .c 文件中。不过感谢您的帮助。
标签: c pointers struct alignment draw