Функция не работает, если не вызывается в том же файле

Поэтому я следую учебному пособию, но делаю это на C, потому что сборка слишком громоздка. Это первый "настоящий проект", который я сделал на C, так что это будет глупой ошибкой или некоторым нюансом работы C.

Во всяком случае, у меня есть этот код:

/*blink.c*/
#include "gpio.h"
#include "timer.h"
#include "morse.h"
#include "util.h"
#include "mailbox.h"
#include "gpu.h"
#include "text.h"

void blink () {
    gpio_setFunction (16, 1);

    gpio_setFor (16, 0, 0x3f0000, 1);

    gpu_makeDefaultBuffer ();
    gpu_fill (0xf8ff);

    // gpio_setFor (16, 0, 0x3f0000, 1);

    без знака int i = 0;
    while(1) {
        gpu_drawPixelBridge(i, 0, i);
        //gpu_fill(я);
        if(i >= 0xffff) {
            перерыв;
        }
        я ++;
    }

    //gpu_drawPixel(0, 0, 0x0000);
    gpu_drawAsciiChar(0x0, 0xffff, 0x0000, 50, 10);
    gpu_drawAsciiChar(0x0, 0b0011111, 0b00000011, 0, 50);
    //gpu_drawPixel(50, 50, 0x0000);
    gpu_drawAsciiChar(0x0, 0b0011111, 0b00000011, 0, 0);
    print("Привет, мир!");
    gpu_drawPixelBridge(10, 10, 0xffff);
    gpu_drawPixel(100, 100, 0x0008);
    gpu_drawPixelBridge(101, 101, 0x000f);
    gpu_drawPixelBridge(102, 102, 0x0080);

    gpio_setFor(16, 0, 0x1f0000, 1);

    while(1) {
        // Материал
    }
}
/*gpu.h*/

#ifndef H_GPUH
#define H_GPUH

#define CHARACTER_WIDTH 8
#define CHARACTER_HEIGHT 16

typedef struct {
    без знака int pwidth;
    без знака int pheight;
    без знака int vwidth;
    без знака int vheight;
    unsigned int pitch;
    без знака int глубина;
    без знака int x;
    без знака int y;
    пустота * буфер;
    беззнаковый размер int;
} gpu_request __attribute__ ((выровнен (16)));

int gpu_makeDefaultBuffer();
int gpu_makeBuffer(volatile gpu_request* req);
int gpu_fill(беззнаковый короткий цвет);
int gpu_drawPixelBridge(без знака int x, без знака int y, беззнаковый короткий цвет);
int gpu_drawPixel(без знака int x, без знака int y, беззнаковый короткий цвет);
int gpu_drawAsciiChar(unsigned char chr, неподписанный короткий фронт, неподписанный короткий зад, unsigned int ox, unsigned int oy);

#endif
/*gpu.c*/ #include "gpu.h" #include "mailbox.h" volatile gpu_request * gpu_buffer = 0; const unsigned char gpu_font []; int gpu_makeDefaultBuffer () {volatile gpu_request r; r.pwidth = 1366; r.pheight = 768; r.vwidth = 1366; r.vheight = 768; r.pitch = 0; Глубина = 16;
    rx = 0;
    ry = 0;
    r.buffer = 0;
    r.size = 0;

    gpu_makeBuffer(& г);
}

int gpu_makeBuffer(volatile gpu_request* req) {
    gpu_buffer = req;

    if(mail_write((unsigned int)req+0x40000000, 1) < 0) {
        // Ошибка записи gpio_errorHang(0, 1); возврат 1;
    }

    unsigned int resp = mail_read(1);

    if(resp) {
        //Fail
        gpio_errorHang(0, 2); возврат 2;
    }
}

int gpu_fill(беззнаковый короткий цвет) {
    /*unsigned int i = 0;
    while(i > x) & 0b1) {
                gpu_drawPixel(ox+x, oy+y, front);
            }else{
                gpu_drawPixel(ox+x, oy+y, back);
            }

            x ++;
        }
        y ++; база ++; }}

(Проверка была удалена как для тестирования, так и для краткости в этом посте)

Ладно, настолько непоследовательными и "дурацкими" были бы слова, которые я бы использовал для описания того, как это работает. На данный момент, я думаю, что по крайней мере одна проблема вызывает вызов drawPixel из чего-либо, кроме файла, в котором он находится. Вызов drawPixelBridge из blink.c работает, как и drawAsciiCharacter, но вызов drawPixel напрямую из blink.c, похоже, не работает и (возможно,) вызывая любую будущую попытку нарисовать что-нибудь неудачное

Я полагаю, я должен объяснить, как работает рисунок. Как правило, gpu_makeBuffer отправляет "почту" в GPU с указателем на структуру gpu_request. Затем графический процессор отвечает на это, устанавливая свойство "buffer" этой структуры в виде указателя на последовательность байтов, которая будет отображаться на экране. Учитывая, что материал отображается на экране в нужном месте (хотя размер и высота тона не соответствуют моим ожиданиям), я предполагаю, что это работает.

0 ответов

Другие вопросы по тегам