Fehlermeldung ? Betriebssystem Tutorial

hhunderter

Erfahrenes Mitglied
Hi muss schon wieder Nerven, anderes Programm andere Fehlermeldungen:
Code:
video.c:12: warning: conflicting types for built-in function 'putc'
video.c:42: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'um'
video.c:44: error: stray '@' in program

was bedeuten diese Fehlermeldungen?

der Code Steht in diesem Tutorial, hab nix verändert außer das ich Statt den einzelnen Befehlen diese Makefile benutze:

Code:
SRCS = $(shell find -name '*.[cS]')
OBJS = $(addsuffix .o,$(basename $(SRCS)))

CC = gcc
LD = ld

ASFLAGS = -m32
CFLAGS = -m32 -Wall -g -fno-stack-protector -nostdinc
LDFLAGS = -melf_i386 -Tkernel.ld

kernel: $(OBJS)
	$(LD) $(LDFLAGS) -o $@ $^

%.o: %.c
	$(CC) $(CFLAGS) -c -o $@ $^

%.o: %.S
	$(CC) $(ASFLAGS) -c -o $@ $^

clean:
	rm $(OBJS)

.PHONY: clean
 
ehm, die betonung Lag auf dem Tutorial...

...der Code Steht in diesem Tutorial, hab nix verändert außer das ich Statt den einzelnen Befehlen diese Makefile benutze:...

naja dann der code:

**video.c**
Code:
#include "video.h"

// Breite des Bildschirms (Zeichen)
#define SCREEN_WIDTH 80
// Hoehe des Bildschirms (Zeilen)
#define SCREEN_HEIGHT 25

/// Bildschirm um eine Zeile scrollen
static void screen_scroll(unsigned int lines);

/// Einzelnes Zeichen anzeigen
static inline void putc(char c);

/// Zeiger auf den Videospeicher
static volatile char* video_memory = (char*) 0xB8000;

/// Aktuelle Position
static unsigned short video_position_x = 0;
static unsigned short video_position_y = 0;


/**
 * Den Bildschirm leeren
 */
void screen_clear()
{
    int i;

    // Alle Zeichen auf dem Bildschirm loeschen. Dazu werden sowohl die
    // Zeichen- als auch die Attribut-Bytes ueberschrieben. Das wird hier nur
    // der Einfachheit halber so gemacht.
    for (i = 0; i < SCREEN_WIDTH * SCREEN_HEIGHT * 2; i++) {
        video_memory[i] = (char) 0;
    }

    // Position auf erstes Zeichen setzen
    video_position_x = 0;
    video_position_y = 0;
}

**
 * Bildschirminhalt um X Zeilen scrollen
 *
 * @param lines Anzahl der Zeilen
 */
static void screen_scroll(unsigned int lines)
{
    int i;

    // Daten nach oben verschieben
    for (i = 0; i < SCREEN_WIDTH * (SCREEN_HEIGHT - lines) * 2; i++) {
        video_memory[i] = video_memory[lines * SCREEN_WIDTH * 2 + i];
    }

    // Frei gewordene Zeilen mit Nullen auffuellen
    for (i = 0; i <  lines * SCREEN_WIDTH * 2; i++) {
        video_memory[SCREEN_WIDTH * (SCREEN_HEIGHT - lines) * 2 + i] = 0;
    }
}

/**
 * Einzelnes Zeichen auf dem Bildschirm anzeigen
 *
 * @param c Das Zeichen
 */
static inline void putc(char c)
{
    // Zeilenumbruch
    if (c == '\n') {
        video_position_x = 0;
        video_position_y++;
        return;
    }

    // Pruefen ob die Zeile umgebrochen werden muss
    if (video_position_x > SCREEN_WIDTH) {
        video_position_y += video_position_x / SCREEN_WIDTH;
        video_position_x = video_position_x % SCREEN_WIDTH;
    }

    // Pruefen ob gescrollt werden muss
    if (video_position_y >= SCREEN_HEIGHT) {
        screen_scroll(1);
        video_position_y--;
    }

    // Offset zum Anfang des Videospeichers berechnen
    int offset = (video_position_y * SCREEN_WIDTH + video_position_x) * 2;

    // Das aktuelle Byte des Strings in den Videospeicher schreiben.
    video_memory[offset] = c;

    // Das Attribut-Byte 0x7 (weisser Text auf schwarzem Hintergrund)
    // schreiben
    video_memory[offset + 1] = (char) 0x7;

    // Position anpassen, damit das Zeichen nicht vom naechsten
    // ueberschrieben wird.
    video_position_x++;
}

/**
 * String auf dem Bildschrim anzeigen
 *
 * @param str Der String
 *
 * @return Anzahl der Zeichen
 */
int puts(const char* str)
{
    int count = 0;

    // Strings werden in C mit einem 0-Byte terminiert, deshalbt kann dieser
    // String Zeichenweise durchgegangen werden, bis ein 0-Byte gefunden wird.
    while (str[count] != '\0') {
        putc(str[count++]);
    }
    return count;
}

**video.h**
Code:
#ifndef _VIDEO_H_
#define _VIDEO_H_
/// Den Bildschirm leeren
void screen_clear();

/// Eine Nachricht auf dem Bildschirm anzeigen
int puts(const char* msg);
#endif // ifndef _VIDEO_H_

**main.c**
Code:
#include "video.h"
/**
 * Hauptfunktion, die aus der header.S angesprungen wird
 */
void kernel()
{
    // Bildschirm leeren und eine Meldung anzeigen
    screen_clear();
    puts("Hello World");
    
    // Endlosschleife
    while (1);
}
 
Hey super danke, asu dern Fehlermeldungen werde ich noch nicht so ganz schlau, naja ich knobel und lerne mal weiter^^
 
Zurück