changeset 895:bed529c55eda

add alignment of classes in SPU width and height are automatically set in frame buffer API
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 16 Jul 2010 17:23:49 +0900
parents bfc61d38c004
children 3d19bc6424d0 ad95be23c794
files Renderer/Engine/Makefile.def Renderer/Engine/ViewerDevice.h Renderer/Engine/fb.h Renderer/Engine/main.cc Renderer/Engine/task/CreatePolygonFromSceneGraph.cc Renderer/Engine/viewer.cc Renderer/Engine/viewerFB.cc Renderer/Engine/viewerFB.h Renderer/Engine/viewerSDL.cc Renderer/Test/Makefile.cell Renderer/Test/Makefile.def TaskManager/Cell/spe/CellDmaManager.h TaskManager/Cell/spe/CellScheduler.h TaskManager/Cell/spe/SpeTaskManagerImpl.h TaskManager/Makefile.def TaskManager/kernel/ppe/DmaBuffer.h TaskManager/kernel/ppe/HTask.h TaskManager/kernel/ppe/HTaskInfo.h TaskManager/kernel/ppe/MailManager.h TaskManager/kernel/ppe/QueueInfo.h TaskManager/kernel/ppe/SimpleTask.h TaskManager/kernel/ppe/Task.h TaskManager/kernel/ppe/TaskList.h TaskManager/kernel/ppe/TaskManager.h TaskManager/kernel/ppe/TaskManagerImpl.h TaskManager/kernel/ppe/TaskQueue.h TaskManager/kernel/ppe/TaskQueueInfo.h TaskManager/kernel/ppe/Threads.h TaskManager/kernel/schedule/SchedTask.cc TaskManager/kernel/schedule/SchedTask.h TaskManager/kernel/schedule/SchedTaskArray.cc TaskManager/kernel/schedule/SchedTaskArray.h TaskManager/kernel/schedule/SchedTaskArrayLoad.h TaskManager/kernel/schedule/SchedTaskArrayNop.h TaskManager/kernel/schedule/SchedTaskBase.h TaskManager/kernel/schedule/Scheduler.h example/get_segment/Makefile.def example/get_segment/spe/Makefile
diffstat 38 files changed, 170 insertions(+), 130 deletions(-) [+]
line wrap: on
line diff
--- a/Renderer/Engine/Makefile.def	Fri Jul 16 00:13:45 2010 +0900
+++ b/Renderer/Engine/Makefile.def	Fri Jul 16 17:23:49 2010 +0900
@@ -5,7 +5,7 @@
 ABIBIT = 32 
 ABI = -m$(ABIBIT)
 CC      = g++
-OPT	= -g -DSPE_CREATE_POLYGON #-O2
+OPT	= -g -DSPE_CREATE_POLYGON -O9
 CFLAGS  = -g -Wall $(ABI) $(OPT)  #  -DDEBUG
 
 INCLUDE = -I$(CERIUM)/include/TaskManager -I.
--- a/Renderer/Engine/ViewerDevice.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/Renderer/Engine/ViewerDevice.h	Fri Jul 16 17:23:49 2010 +0900
@@ -11,6 +11,10 @@
 
     ViewerDevice(TaskManager *m) {};
 
+    int width;
+    int height;
+    int bpp;
+
     /* override function */
     virtual Uint32 *video_init(TaskManager *manager, int bpp, int width, int height) = 0;
     virtual void clean_pixels() = 0;
--- a/Renderer/Engine/fb.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/Renderer/Engine/fb.h	Fri Jul 16 17:23:49 2010 +0900
@@ -14,8 +14,6 @@
 #include <iostream>
 using namespace std;
 
-#define DEVICE_NAME "/dev/fb0"
-#define DIV_BYTE 8
 
 /* function prototype */
 void send_current_error_msg(const char *ptr);
@@ -24,78 +22,15 @@
 /*
     Don't put real function in a header...
  */
-
-int get_fbdev_addr(void)
-{
-	int fd_framebuffer ;
-	struct fb_var_screeninfo vinfo;
-	struct fb_fix_screeninfo finfo;
-	long int screensize ;
-	//long int location;
-	char *fbptr ;
-	char tmp[DIV_BYTE*10];
-
-	//int x , y ;
+typedef struct screen_info {
 	int xres,yres,vbpp,line_len;
-	//unsigned short tcolor ;
-
-	/* 読み書き用にファイルを開く */
-	fd_framebuffer = open( DEVICE_NAME , O_RDWR);
-	if ( !fd_framebuffer ) {
-	    send_current_error_msg("Framebuffer device open error !");
-	    exit(1);
-	}
-	send_current_information("The framebuffer device was opened !");
-	
-	/* 固定スクリーン情報取得 */
-	if ( ioctl( fd_framebuffer , FBIOGET_FSCREENINFO , &finfo ) ) {
-	    send_current_error_msg("Fixed information not gotton !");
-	    exit(2);
-	}
+	char *fbptr;
+} ScreenInfo , *ScreenInfoPtr;
 
-	/* 変動スクリーン情報取得 */
-	if ( ioctl( fd_framebuffer , FBIOGET_VSCREENINFO , &vinfo ) ) {
-		send_current_error_msg("Variable information not gotton !");
-		exit(3);
-	}
-	xres = vinfo.xres ;
-	yres = vinfo.yres ;
-	vbpp = vinfo.bits_per_pixel ;
-	line_len = finfo.line_length ;
-	sprintf( tmp , "%d(pixel)x%d(line), %dbpp(bits per pixel)",xres,yres,vbpp);
-	send_current_information( tmp );
 
-	/* バイト単位でのスクリーンのサイズを計算 */
-	screensize = xres * yres * vbpp / DIV_BYTE ;
-
-	/* デバイスをメモリにマップする */
-	fbptr = (char *)mmap(0,screensize,PROT_READ | PROT_WRITE,MAP_SHARED,fd_framebuffer,0);
-	if ( (int)fbptr == -1 ) {
-		send_current_error_msg("Don't get framebuffer device to memory !");
-		exit(4);
-	}
-	send_current_information("The framebuffer device was mapped !");
-
-	printf("fb: 0x%x \n", (unsigned int)fbptr);
-	return (int)fbptr;
-	//munmap(fbptr,screensize);
-	//close(fd_framebuffer);
-	//return 0;
-}
-
-void send_current_error_msg(const char *ptr)
-{
-    fprintf( stderr , "%s\n" , ptr );
-}
-
-void send_current_information(const char *ptr)
-{
-    fprintf( stdout , "%s\n" , ptr );
-}
-#else /* !defined(__linux__) */
-int get_fbdev_addr(void) {return 0;}
-#endif /* defined(__linux__) */
-
-extern int get_fbdev_addr(void);
 
 #endif
+
+extern ScreenInfo get_fbdev_addr(void);
+
+#endif
--- a/Renderer/Engine/main.cc	Fri Jul 16 00:13:45 2010 +0900
+++ b/Renderer/Engine/main.cc	Fri Jul 16 17:23:49 2010 +0900
@@ -17,15 +17,9 @@
 /*
 const char *usr_help_str = "Usage: ./test_nogl [OPTION]\n\
   -cpu Number of SPE (default 1)\n\
-  -width, -height window size (default 640x480)\n\
-  -sg Draw SceneGraph\n\
-      0: Joystick の 丸ボタン(Keyboard だとx) を押すと、キューブが二つに分かれる\n\
-      1: 0 のキューブが大きい版\n\
-      2: テクスチャテスト:576x384\n\
-      3: テクスチャテスト:1024x768\n\
-      4: テクスチャテスト:2048x1536\n\
-      5: 地球が動き、その周りを月が自転、公転する\n\
-      6 以降: キューブが跳ね返りながら、勝手にキューブが増えて行く\n";
+  -width, -height window size (default 640x480), -bpp bits per pixcel\n\
+  -video {sdl|fb}   in case of frame buffer, width,height,bpp is automatically set\n\
+  \n";
  */
 
 int
@@ -94,7 +88,6 @@
 void
 TMend(TaskManager *manager)
 {
-    printf("test_nogl end\n");
 }
 
 #endif
--- a/Renderer/Engine/task/CreatePolygonFromSceneGraph.cc	Fri Jul 16 00:13:45 2010 +0900
+++ b/Renderer/Engine/task/CreatePolygonFromSceneGraph.cc	Fri Jul 16 17:23:49 2010 +0900
@@ -15,6 +15,7 @@
 #define PP_LOAD 12
 #define PP_STORE 13
 
+#if !SPE_CREATE_POLYGON
 /**
  *  ベクトルに行列を乗算する
  * @param[out] v vector (float[4])
@@ -48,6 +49,7 @@
         v[i] = t[0]*m[i] + t[1]*m[i+4] + t[2]*m[i+8];
     }
 }
+#endif
 
 
 /**
@@ -247,8 +249,8 @@
     free(pp);
     free(send_pp);
 
-    return 0;
 
 #endif
+    return 0;
 
 }
--- a/Renderer/Engine/viewer.cc	Fri Jul 16 00:13:45 2010 +0900
+++ b/Renderer/Engine/viewer.cc	Fri Jul 16 17:23:49 2010 +0900
@@ -45,14 +45,16 @@
 
 Viewer::Viewer(TaskManager *m, ViewerDevice *vd, int b, int w, int h, int _num)
 {
-    bpp = b;
-    width = w;
-    height = h;
     spe_num = _num;
     manager = m;
+
     dev = vd;
     pixels = dev->video_init(manager, b, w, h);
 
+    width = dev->width;
+    height = dev->height;
+    bpp = dev->bpp;
+
 }
 
 int
--- a/Renderer/Engine/viewerFB.cc	Fri Jul 16 00:13:45 2010 +0900
+++ b/Renderer/Engine/viewerFB.cc	Fri Jul 16 17:23:49 2010 +0900
@@ -1,11 +1,101 @@
 #include "viewerFB.h"
 #include "fb.h"
+#include <stdio.h>
 
 #define default_sdl_flag SDL_INIT_TIMER | SDL_INIT_JOYSTICK
-//extern void post2runLoop(void *);
+
 ViewerFB::ViewerFB() {}
 ViewerFB::~ViewerFB() {}
 
+#if defined(__linux__)
+
+#define DEVICE_NAME "/dev/fb0"
+#define DIV_BYTE 8
+
+
+ScreenInfo get_fbdev_addr(void)
+{
+	ScreenInfo info;
+	int fd_framebuffer ;
+	struct fb_var_screeninfo vinfo;
+	struct fb_fix_screeninfo finfo;
+	long int screensize ;
+	//long int location;
+	char *fbptr ;
+	char tmp[DIV_BYTE*10];
+
+	//int x , y ;
+	int xres,yres,vbpp,line_len;
+	//unsigned short tcolor ;
+
+	/* 読み書き用にファイルを開く */
+	fd_framebuffer = open( DEVICE_NAME , O_RDWR);
+	if ( !fd_framebuffer ) {
+	    send_current_error_msg("Framebuffer device open error !");
+	    exit(1);
+	}
+	send_current_information("The framebuffer device was opened !");
+	
+	/* 固定スクリーン情報取得 */
+	if ( ioctl( fd_framebuffer , FBIOGET_FSCREENINFO , &finfo ) ) {
+	    send_current_error_msg("Fixed information not gotton !");
+	    exit(2);
+	}
+
+	/* 変動スクリーン情報取得 */
+	if ( ioctl( fd_framebuffer , FBIOGET_VSCREENINFO , &vinfo ) ) {
+		send_current_error_msg("Variable information not gotton !");
+		exit(3);
+	}
+	xres = vinfo.xres ;
+	yres = vinfo.yres ;
+	vbpp = vinfo.bits_per_pixel ;
+	line_len = finfo.line_length ;
+	sprintf( tmp , "%d(pixel)x%d(line), %dbpp(bits per pixel)",xres,yres,vbpp);
+	send_current_information( tmp );
+
+	/* バイト単位でのスクリーンのサイズを計算 */
+	screensize = xres * yres * vbpp / DIV_BYTE ;
+
+	/* デバイスをメモリにマップする */
+	fbptr = (char *)mmap(0,screensize,PROT_READ | PROT_WRITE,MAP_SHARED,fd_framebuffer,0);
+	if ( (int)fbptr == -1 ) {
+		send_current_error_msg("Don't get framebuffer device to memory !");
+		exit(4);
+	}
+	send_current_information("The framebuffer device was mapped !");
+
+	printf("fb: 0x%x \n", (unsigned int)fbptr);
+	info.xres = xres;
+        info.yres = yres; 
+        info.vbpp = vbpp;
+        info.line_len = line_len;
+	info.fbptr = fbptr;
+      
+	return info;
+	//munmap(fbptr,screensize);
+	//close(fd_framebuffer);
+	//return 0;
+}
+
+void send_current_error_msg(const char *ptr)
+{
+    fprintf( stderr , "%s\n" , ptr );
+}
+
+void send_current_information(const char *ptr)
+{
+    fprintf( stdout , "%s\n" , ptr );
+}
+
+#else /* !defined(__linux__) */
+ScreenInfo get_fbdev_addr(void) { 
+    ScreenInfo tmp = {0,0,0,0};
+    return tmp;
+}
+#endif /* defined(__linux__) */
+
+
 Uint32 *
 ViewerFB::video_init(TaskManager *manager, int bpp, int width, int height)
 {
@@ -16,11 +106,16 @@
 	exit(1);
     }
 
-    Uint32 *pixels = (Uint32*)get_fbdev_addr();
+    screen_info = get_fbdev_addr();
+    Uint32 *pixels = (Uint32*) screen_info.fbptr;
 
     if (pixels == 0) {
+	fprintf(stderr, "Cannot get frame buffer!\n");
     	pixels = (new Uint32[width*height*32/8]);
     }
+    width = screen_info.xres;
+    height = screen_info.yres;
+    bpp = screen_info.vbpp;
 
     return pixels;
 }
@@ -28,8 +123,6 @@
 void
 ViewerFB::clean_pixels()
 {
-    //bzero(pixels, sizeof(int)*width*height);
-    //memset(pixels, 0xFF, sizeof(int)*width*height);
 }
 
 void
--- a/Renderer/Engine/viewerFB.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/Renderer/Engine/viewerFB.h	Fri Jul 16 17:23:49 2010 +0900
@@ -1,6 +1,7 @@
 #ifndef INCLUDED_VIEWER_FB
 #define INCLUDED_VIEWER_FB
 
+#include "fb.h"
 #include "ViewerDevice.h"
 
 class ViewerFB : public ViewerDevice {
@@ -8,6 +9,7 @@
     ViewerFB(TaskManager *manager) {};
     ViewerFB();
     virtual ~ViewerFB();
+    ScreenInfo screen_info ;
 
     /* override function */
     Uint32 *video_init(TaskManager *manager, int bpp, int width, int height);
--- a/Renderer/Engine/viewerSDL.cc	Fri Jul 16 00:13:45 2010 +0900
+++ b/Renderer/Engine/viewerSDL.cc	Fri Jul 16 17:23:49 2010 +0900
@@ -27,6 +27,9 @@
 	SDL_Quit();
 	exit(1);
     }
+    this->width = screen->w;
+    this->height = screen->h;
+    this->bpp = screen->format->BitsPerPixel;
     
     p = (Uint32*)manager->allocate(screen->pitch*height);
     bitmap = SDL_CreateRGBSurfaceFrom((void *)p,
--- a/Renderer/Test/Makefile.cell	Fri Jul 16 00:13:45 2010 +0900
+++ b/Renderer/Test/Makefile.cell	Fri Jul 16 17:23:49 2010 +0900
@@ -11,7 +11,7 @@
 .cc.o:
 	$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@
 
-ALL = spe-main ball_bound boss1_action direction gaplant ieshoot node panel universe untitled vacuum dynamic viewer SgRootChange property_test create_task property_universe chain_old property_chain aquarium
+ALL = spe-main ball_bound boss1_action direction gaplant ieshoot node panel universe untitled vacuum dynamic viewer SgRootChange property_test create_task property_universe chain_old property_chain # aquarium
 
 all: $(ALL)
 
--- a/Renderer/Test/Makefile.def	Fri Jul 16 00:13:45 2010 +0900
+++ b/Renderer/Test/Makefile.def	Fri Jul 16 17:23:49 2010 +0900
@@ -4,7 +4,7 @@
 ABIBIT = 32
 ABI =  -m$(ABIBIT)
 CC      = g++
-CFLAGS  = -g -Wall $(ABI)    # -O -DDEBUG
+CFLAGS  = -g -Wall $(ABI) -O9   # -O -DDEBUG
 
 INCLUDE = -I$(CERIUM)/include/TaskManager -I$(CERIUM)/Renderer/Engine -I. -I$(CERIUM)/include/Cerium
 LIBS = -L$(CERIUM)/TaskManager -L$(CERIUM)/Renderer/Engine $(ABI)
--- a/TaskManager/Cell/spe/CellDmaManager.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/Cell/spe/CellDmaManager.h	Fri Jul 16 17:23:49 2010 +0900
@@ -18,7 +18,7 @@
     typedef struct dma_list {
 	uint32 addr;  // should be memaddr, but in Cell's specification...
 	uint32 size;
-    } DmaList, *DmaListPtr;
+    }  __attribute__ ((aligned (DEFAULT_ALIGNMENT))) DmaList, *DmaListPtr;
 
 
     CellDmaManager() ;
@@ -53,6 +53,6 @@
 
 
 /* end */
-};
+}  __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 #endif
--- a/TaskManager/Cell/spe/CellScheduler.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/Cell/spe/CellScheduler.h	Fri Jul 16 17:23:49 2010 +0900
@@ -17,6 +17,6 @@
 
 private:
     int mainMemNum;
-};
+}  __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 #endif
--- a/TaskManager/Cell/spe/SpeTaskManagerImpl.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/Cell/spe/SpeTaskManagerImpl.h	Fri Jul 16 17:23:49 2010 +0900
@@ -27,7 +27,7 @@
     void set_task_cpu(HTaskPtr, CPU_TYPE);
     void polling() {}
 
-};
+}  __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 
 #endif /* INCLUDED_SPE_TASK_MANAGER_IMPL */
--- a/TaskManager/Makefile.def	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/Makefile.def	Fri Jul 16 17:23:49 2010 +0900
@@ -30,7 +30,7 @@
 ABIBIT = 32
 
 #OPT = -O9
-OPT =  -g -O9 -DTASK_LIST_MAIL
+OPT =  -g -O9  -DTASK_LIST_MAIL
 
 CC     = g++   
 CFLAGS = -Wall `sdl-config --cflags` -m$(ABIBIT)   $(OPT)
--- a/TaskManager/kernel/ppe/DmaBuffer.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/ppe/DmaBuffer.h	Fri Jul 16 17:23:49 2010 +0900
@@ -18,6 +18,6 @@
     /* functions */
     void swap_buffer(void);
     void get_buffer(void*);
-};
+}  __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 #endif
--- a/TaskManager/kernel/ppe/HTask.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/ppe/HTask.h	Fri Jul 16 17:23:49 2010 +0900
@@ -114,7 +114,7 @@
     add_outData_t((memaddr)(addr), (size));
 
 
-};
+}  __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 typedef HTask* HTaskPtr;
 
--- a/TaskManager/kernel/ppe/HTaskInfo.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/ppe/HTaskInfo.h	Fri Jul 16 17:23:49 2010 +0900
@@ -44,6 +44,6 @@
     /* functions */
     int extend_pool(int num);
     void destroy();  
-};
+}  __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 #endif
--- a/TaskManager/kernel/ppe/MailManager.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/ppe/MailManager.h	Fri Jul 16 17:23:49 2010 +0900
@@ -25,7 +25,7 @@
 
     void calc_mask(unsigned int qsize);
     void extend();
-};
+}  __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 typedef MailManager *MailManagerPtr;
 
--- a/TaskManager/kernel/ppe/QueueInfo.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/ppe/QueueInfo.h	Fri Jul 16 17:23:49 2010 +0900
@@ -65,7 +65,7 @@
     int extend_pool(int num);
     void destroy();  
     void queueInfoInit();
-};
+}  __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 
 
--- a/TaskManager/kernel/ppe/SimpleTask.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/ppe/SimpleTask.h	Fri Jul 16 17:23:49 2010 +0900
@@ -32,7 +32,7 @@
     void set_input(memaddr i,int size) { r_size = size; rbuf= i; }
     void set_output(memaddr o,int size) { w_size = size; wbuf= o; } 
 
-};
+} __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 typedef SimpleTask *SimpleTaskPtr;
 
--- a/TaskManager/kernel/ppe/Task.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/ppe/Task.h	Fri Jul 16 17:23:49 2010 +0900
@@ -119,7 +119,7 @@
     set_inData_t(index, (memaddr)(addr), (size));
 #define set_outData(index, addr, size)			\
     set_outData_t(index, (memaddr)(addr), (size));
-};
+} __attribute__ ((aligned (DEFAULT_ALIGNMENT))) ;
 
 typedef Task* TaskPtr;
 
--- a/TaskManager/kernel/ppe/TaskList.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/ppe/TaskList.h	Fri Jul 16 17:23:49 2010 +0900
@@ -5,20 +5,21 @@
 #include "Task.h"
 
 
-#define TASK_MAX_SIZE 32
+#define TASK_MAX_SIZE 31
 
-class TaskList { // 784 byte
+class TaskList { // 1024 byte 
 public:
     BASE_NEW_DELETE(TaskList);
 
-    long length; // 4 byte
+    int length; // 4 byte
     TaskList *next; // 4 byte
     TaskList *prev; // 4 byte
     TaskList *waiter; // 4 byte
-    SimpleTask tasks[TASK_MAX_SIZE]; // 24*TASK_MAX_SIZE
+    int dummy[4]; // 16 byte
+    SimpleTask tasks[TASK_MAX_SIZE]; // 32*TASK_MAX_SIZE
 
     void init() { length = 0; waiter=this; }
-};
+} __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 typedef TaskList* TaskListPtr;
 
--- a/TaskManager/kernel/ppe/TaskManager.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/ppe/TaskManager.h	Fri Jul 16 17:23:49 2010 +0900
@@ -40,7 +40,7 @@
 
 private:
     int machineNum;
-};
+}  __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 #endif
 
--- a/TaskManager/kernel/ppe/TaskManagerImpl.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/ppe/TaskManagerImpl.h	Fri Jul 16 17:23:49 2010 +0900
@@ -84,6 +84,6 @@
 
     Scheduler* get_scheduler() { return scheduler; }
     void set_scheduler(Scheduler *s) {  scheduler = s; }
-};
+}  __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 #endif
--- a/TaskManager/kernel/ppe/TaskQueue.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/ppe/TaskQueue.h	Fri Jul 16 17:23:49 2010 +0900
@@ -2,6 +2,7 @@
 #define INCLUDED_TASK_QUEUE
 
 #include "base.h"
+#include "types.h"
 
 class HTask;
 
@@ -21,7 +22,7 @@
     TaskQueue *next;
     TaskQueue *prev;
 
-};
+}  __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 typedef TaskQueue* TaskQueuePtr;
 
--- a/TaskManager/kernel/ppe/TaskQueueInfo.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/ppe/TaskQueueInfo.h	Fri Jul 16 17:23:49 2010 +0900
@@ -44,6 +44,6 @@
     /* functions */
     int extend_pool(int num);
     void destroy();  
-};
+}  __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 #endif
--- a/TaskManager/kernel/ppe/Threads.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/ppe/Threads.h	Fri Jul 16 17:23:49 2010 +0900
@@ -2,10 +2,13 @@
 #define INCLUDED_THREADS
 
 #include <pthread.h>
+#include <base.h>
 
 
 class Threads {
 public:
+    BASE_NEW_DELETE(Threads);
+
     /* constructor */
     Threads(int num = 1) {};
     virtual ~Threads() {};
@@ -19,6 +22,6 @@
     /* variables */
     pthread_t *threads;
     int cpu_num;
-};
+}  __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 #endif
--- a/TaskManager/kernel/schedule/SchedTask.cc	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/schedule/SchedTask.cc	Fri Jul 16 17:23:49 2010 +0900
@@ -86,14 +86,13 @@
 void
 SchedTask::exec()
 {
-    __debug("[SchedTask:%s]\n", __FUNCTION__);
-
     task_list[task->command].wait(scheduler,task->command);
+    TaskObjectRun run = task_list[task->command].run;
     if (task->w_size > 0) {
 	writebuf = manager->allocate(task->w_size);
     }
     scheduler->dma_wait(DMA_READ);
-    task_list[task->command].run(this, readbuf, writebuf);
+    run(this, readbuf, writebuf);
     free(readbuf);
 
     // 書き込む領域がなければ無視
--- a/TaskManager/kernel/schedule/SchedTask.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/schedule/SchedTask.h	Fri Jul 16 17:23:49 2010 +0900
@@ -107,7 +107,7 @@
 
     int printf(const char * format, ...);
 
-};
+} __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 
 extern void loadSchedTask(Scheduler *scheduler,TaskPtr task);
--- a/TaskManager/kernel/schedule/SchedTaskArray.cc	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/schedule/SchedTaskArray.cc	Fri Jul 16 17:23:49 2010 +0900
@@ -110,6 +110,7 @@
 SchedTaskArray::exec()
 {
     task_list[atask->command].wait(scheduler,atask->command);
+    TaskObjectRun run = task_list[atask->command].run;
     if (atask->outData_count > 0) {
 	// allocate write buffer
 	outListData.length = atask->outData_count;
@@ -125,7 +126,7 @@
         //}
     }
     scheduler->dma_wait(DMA_READ);
-    task_list[atask->command].run(this, readbuf, writebuf);
+    run(this, readbuf, writebuf);
     free(readbuf);
     // 書き込む領域がなければ無視
 
--- a/TaskManager/kernel/schedule/SchedTaskArray.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/schedule/SchedTaskArray.h	Fri Jul 16 17:23:49 2010 +0900
@@ -38,7 +38,7 @@
     memaddr get_param(int);
     int read_size();
 
-};
+}  __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 
 #endif
--- a/TaskManager/kernel/schedule/SchedTaskArrayLoad.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/schedule/SchedTaskArrayLoad.h	Fri Jul 16 17:23:49 2010 +0900
@@ -25,7 +25,7 @@
     SchedTaskBase* next(Scheduler *, SchedTaskBase *);
 
 
-};
+} __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 
 #endif
--- a/TaskManager/kernel/schedule/SchedTaskArrayNop.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/schedule/SchedTaskArrayNop.h	Fri Jul 16 17:23:49 2010 +0900
@@ -26,7 +26,7 @@
     void write();
     SchedTaskBase* next(Scheduler *, SchedTaskBase *);
 
-};
+} __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 
 #endif
--- a/TaskManager/kernel/schedule/SchedTaskBase.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/schedule/SchedTaskBase.h	Fri Jul 16 17:23:49 2010 +0900
@@ -74,6 +74,6 @@
     ListData inListData;
     ListData outListData;
 
-};
+}  __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 #endif
--- a/TaskManager/kernel/schedule/Scheduler.h	Fri Jul 16 00:13:45 2010 +0900
+++ b/TaskManager/kernel/schedule/Scheduler.h	Fri Jul 16 17:23:49 2010 +0900
@@ -39,7 +39,8 @@
     MemorySegment *segment;
     void (*load)(Scheduler *,int);
     void (*wait)(Scheduler *,int);
-} TaskObject, *TaskObjectPtr;
+}  __attribute__ ((aligned (DEFAULT_ALIGNMENT)))
+      TaskObject, *TaskObjectPtr;
 
 extern "C" {
     extern long random();
@@ -138,7 +139,7 @@
     int printf(const char *format, ...);
     int vprintf0(const char *format, va_list ap);
 
-};
+}  __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
 
 extern void register_task(int cmd, TaskObjectRun run);
 extern void register_dynamic_task(int cmd, 
--- a/example/get_segment/Makefile.def	Fri Jul 16 00:13:45 2010 +0900
+++ b/example/get_segment/Makefile.def	Fri Jul 16 17:23:49 2010 +0900
@@ -1,10 +1,10 @@
 TARGET = mainMem
 
 # include/library path
-# ex: macosx
+# ex  macosx
 #CERIUM = /Users/gongo/Source/Cerium
 
-# ex: linux/ps3
+# ex  linux/ps3
 CERIUM = ../../../Cerium
 
 CC      = g++
--- a/example/get_segment/spe/Makefile	Fri Jul 16 00:13:45 2010 +0900
+++ b/example/get_segment/spe/Makefile	Fri Jul 16 17:23:49 2010 +0900
@@ -23,11 +23,11 @@
 
 OFFSET_H = runTask_offset.h
 
-all: $(TARGET)
+all: $(TARGET) always
 
 .SUFFIXES: .cc .o
 
-$(OFFSET_H) $(LDSCRIPT_ED): $(OVLOBJS:.o=.cc) ovly_table.pl
+$(OFFSET_H) $(LDSCRIPT_ED) always : $(OVLOBJS:.o=.cc) ovly_table.pl
 	 perl ovly_table.pl $(TARGET) $(OVLOBJS:.o=.cc) 
 
 $(SPEOBJS): %.o : %.cc $(OFFSET_H)