Anuncios Google

[Duda] Crear un array en C con OSLib

Hola buenas.

Verán, estoy aprendiendo C con OSLib y tengo la siguiente duda:

Estoy intentando desarrollar un OS y necesito modularlo. Para ello creo el módulo "wallpaper" y dentro creo alguna variable y dos funciones. Una función es para cargar el módulo y la otra para imprimir el wallpaper.

Tengo un código pero no me funciona. Me da una serie de errores.

Main:

#include <oslib/oslib.h>
 
 
PSP_MODULE_INFO( "Prueba", 0, 1, 1 );
PSP_MAIN_THREAD_ATTR( THREAD_ATTR_USER | THREAD_ATTR_VFPU );
 
 
int wallpaper[2] = {
 
	int	k = 1,
 
	void cargar( self )
	{
		OSL_IMAGE *self.img;
		img = oslLoadImageFile( "system/image/wallpaper/wallpaper.png", OSL_IN_RAM, OSL_PF_8888 );
		self.img->x = 0;
		self.img->y = 0;
	},
 
	int blit( self )
	{
		while( self.k == 1 ){ self:cargar(); self.k = 0; }
 
		oslDrawImage( self.img );
	},
}
 
int main(){
 
	oslInit( 0 );
	oslInitGfx( OSL_PF_8888, 0 );
 
	while( !osl_quit )
	{
		wallpaper:blit();
 
		oslEndDrawing();
 
		oslSyncFrame();
	}
 
	oslEndGfx();
	oslQuit();
	return 0;
}

Makefile:

TARGET = iNextOS
OBJS = main.o  
 
INCDIR =
CFLAGS = -G4 -Wall -O2
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
 
LIBDIR =
LDFLAGS =
STDLIBS= -losl -lpng -lz \
  -lpspsdk -lpspctrl -lpspumd -lpsprtc -lpsppower -lpspgu -lpspaudiolib -lpspaudio -lm
LIBS=$(STDLIBS)$(YOURLIBS)
 
 
EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = iNext OS
 
 
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

Error:

Espero que me puedan ayudar.

Saludos.

 



Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de klozz

uno que otro error de tipeo

uno que otro error de tipeo tuy como 

int	k = 1,
 
//cambialo por
int	k = 1;

esto por

void cargar( self )
	{
		OSL_IMAGE *self.img;
		img = oslLoadImageFile( "system/image/wallpaper/wallpaper.png", OSL_IN_RAM, OSL_PF_8888 );
		self.img->x = 0;
		self.img->y = 0;
	},
 
 
 
//cambialo por
void cargar( self )
	{
		OSL_IMAGE *self.img;
		img = oslLoadImageFile( "system/image/wallpaper/wallpaper.png", OSL_IN_RAM, OSL_PF_8888 );
		self.img->x = 0;
		self.img->y = 0;
	}

int blit( self )
	{
		while( self.k == 1 ){ self:cargar(); self.k = 0; }
 
		oslDrawImage( self.img );
	}//quita la coma

Saludos no eh revisado el code compilado pero eh visto que tenias comas donde deberian ir ; y , despues de } Saludos


TEAM MEX Homebrew y desarrollo PSP

Metal TrooperV.Pre-Alpha (15%)Lua , 10% C .

Ubunshell VProof. (45%)C

RPG Magues (35%)Lua , 5% C


Android development for Xperia X8 ^^ mis roms en XDA-Developers ya que en Scenebeta no las publican xD

Xperience  | MIUI Pikachu | Semc debrand engine | Froyexp | Xperience walkman mod | Android 4.0.4 CN9 Crema de nieve

-- KLOZZ

Imagen de Andresmargar

Se puede hacer mas facilmente

//Includes OSLIB
#include <oslib/oslib.h>
//Variables
char wallpapername[32]; //ea, 32 caracteres para el fondo
//Funciones a declarar
void CargaWallpaper(const char* file, const char* name); //carga del wallpaper en pantalla
 
                OSL_IMAGE *self.img; //Puntero al dibujo
		img = oslLoadImageFile( file, OSL_IN_RAM, OSL_PF_8888 ); //Ponlo en RAM
                //Pon a 0 sus scrolls
		self.img->x = 0;
		self.img->y = 0; 
                //Guarda su nombre
                wallpapername=file;
}
void Wallpaper2Screen(const char* file){
oslDrawImage(file);
}
 
//Main
int main(int argc, char** argv){
oslInit( 0 );
	oslInitGfx( OSL_PF_8888, 0 );
        CargaWallpaper("wallpaper.png");
	while(1)
	{
                Wallpaper2Screen("wallpaper.png");
		oslEndDrawing();
 
		oslSyncFrame();
	}
 
	oslEndGfx();
	oslQuit();
	return 0;
}


~Actualmente estudiando Ingeniería de las Tecnologías de la Telecomunicación en la Escuela de Ingenieros~

Imagen de sting18

Bien, como veras es muy

Bien, como veras es muy parecido a como se declara una variable normal, sólo que hay que poner corchetes detrás del tipo. Los programadores de C/C++ habrán observado inmediatamente la diferencia sintáctica. En efecto, en la declaración de un array en C los corchetes se colocan detrás del tipo y no detrás de la variable. Esta pequeña diferencia sintáctica se debe a una importante diferencia semántica: aquí los arrays son objetos derivados de la clase System.Array. Por lo tanto, y esto es muy importante, cuando declaramos un array en C este aún no se habrá creado, es decir, no se habrá reservado aún memoria para él. En consecuencia, los arrays de C son todos dinámicos, y antes de poder usarlos habrá que instanciarlos, como si fuera cualquier otro objeto. Veamos un breve ejemplo de lo que quiero decir:

string[] nombres; // Declaración del array
nombres = new string[3]; // Instanciación del array

En efecto, tal como puedes ver, el array nombres será utilizable únicamente a partir de su instanciación. En este ejemplo, el número 3 que está dentro de los corchetes indica el número total de elementos de que constará el array. No te vallas a equivocar, puesto que todos los arrays de C están basados en cero, esto es, el primer elemento del array es cero. Por lo tanto, en este caso, el último elemento sería 2 y no 3, ya que son tres los elementos que lo componen (0, 1 y 2).


En C no puedes manejar así

En C no puedes manejar así los arrays, eso sólo es en Lua xD

Imagen de User170294

¿Me podrías dar un ejemplo de

¿Me podrías dar un ejemplo de como modular en C con OSLib? ¿Como meter las funciones dentro del array?

Gracias.

¿Funciones dentro de arrays?

Que mal acostumbrados os tiene Lua. Aprender a programar en un lenguaje poco tipado y que te deja hacer casi cualquier cosa, no son los mejores inicios xD. Creo (y corregirme si me equivoco) que en Lua la sintaxis de los corchetes aparte de para arrays se reutilizan para declarar tablas, que tambien pueden funcionar casi como si fuesen objetos, pudiendo meter en ellas lo que quieras. En C (aunque tampoco es un lenguaje muy tipado, pero si algo) no se puede hacer eso, en el codigo que has puesto has declarado un array de 2 enteros, en el que solo pueden ir enteros (en teoria, ya que con casts y punteros puedes guardar cualquier cosa, pero no lo recomiendo). Una "guarreria" que puedes hacer que se me ocurre, aunque no te la recomiendo y nose si funciona porque no la he probado ni lo voy a hacer, es meter punteros a funciones, aunque dudo que funciona, mejor simplemente ten un metodo que cargue o muestre el wallpaper. Tampoco se lo que hace la libreria OSlib, pero en C puro, lo que tu quieres hacer no se puede hacer.

Imagen de Andresmargar

Con lo facil que//

es haciendo una funcion que carge el wallpaper y lo pongas en pantalla, no he probado lua pero lo mejor es que te olvides de LUA, y busques un tuto de C


~Actualmente estudiando Ingeniería de las Tecnologías de la Telecomunicación en la Escuela de Ingenieros~

Solo es curiosidad, por que

Solo es curiosidad, por que te pasa de LuaDev a C?

Imagen de User170294

Por la gran potencia de C.

Por la gran potencia de C.

Imagen de Andresmargar

toma, 4 scenebitos :D

4 scenebitos para ti

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.