This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

HELP

When i compile this code it give error like:-]

error 88: illegal cast of Literal value to 'generic' pointer from type 'literal-unsigned-char' to type 'unsigned-char generic*'

error 47:indirection to different types assignment from type 'literal-unsigned generic*' to type 'unsigned-char'

#include <8051.H>
#include "Kernel.h"

#include "AVX.H"
#ifndef IntSP
#define xdata unsigned char * xdata IntSP; IntSP = (0xC0);
#endif
//---------------------------------------------------------------------------
Kernel data g_Kernel;
//---------------------------------------------------------------------------

extern void Kernel_RestoreContext();
extern void Save_Stack(unsigned char idata *InternalSP, unsigned char xdata *ExternalSP );
extern void Restore_Stack(unsigned char idata *InternalSP, unsigned char xdata *ExternalSP );
extern void Init_Ram();
//---------------------------------------------------------------------------
void Kernel_ContextSwitch()
{ unsigned short data pc;

// Save return address. // Pop high byte of return address. *(unsigned char xdata *)&pc = *(unsigned char idata *)SP--;

// Pop low byte of return address. *((unsigned char xdata *)&pc + 1) = *(unsigned char idata *)SP--;

Save_Stack(g_Kernel.Tasks[g_Kernel.RunningTaskIndex].InternalSP , g_Kernel.Tasks[g_Kernel.RunningTaskIndex].ExternalSP ); // Save current Task's internal stack pointer. g_Kernel.Tasks[g_Kernel.RunningTaskIndex].InternalSP = ( unsigned char idata *)SP; // Save current Task's external stack pointer. // g_Kernel.Tasks[g_Kernel.RunningTaskIndex].ExternalSP = Kernel_GetXBP();

// Switch to next Task. // Round-Robin scheduling.

#ifdef PREEMPTIVE

r=LogTable256[taskRdyMatrixIndex]; c=LogTable256[taskRdyMatrix[r]];

priority = (r<<3) | c; // priority = 63 - priority; g_Kernel.RunningTaskIndex =taskRdyQue[priority];

#else

g_Kernel.RunningTaskIndex = (g_Kernel.RunningTaskIndex + 1) % g_Kernel.TaskCount;
#endif

Restore_Stack(g_Kernel.Tasks[g_Kernel.RunningTaskIndex].InternalSP , g_Kernel.Tasks[g_Kernel.RunningTaskIndex].ExternalSP ); // Restore next Task's internal stack pointer. SP= (volatile unsigned char)g_Kernel.Tasks[g_Kernel.RunningTaskIndex].InternalSP; // Restore next Task's external stack pointer.

// Restore return address. // Push low byte of return address. *(unsigned char idata *)++SP = *((unsigned char xdata *)&pc + 1); // Push high byte of return address. *(unsigned char idata *)++SP = *(unsigned char xdata *)&pc;

// Note: ISR will restore next Task's all registers.
} //---------------------------------------------------------------------------
void Kernel_Initialize()
{ #if 0 == OS_TASK_COUNT
#error OS_TASK_COUNT can not be 0!
#endif

// Initialize the kernel object. Init_Ram(); Initialise_Shell(); TaskCreate(Task_Idle,63, 0x6000); g_Kernel.RunningTaskIndex = 0; g_Kernel.TaskCount = 1;
} //---------------------------------------------------------------------------
void Kernel_Start()
{

#ifdef PREEMPTIVE

r=LogTable256[taskRdyMatrixIndex]; // calculate highest priority task c=LogTable256[taskRdyMatrix[r]];

priority = (r<<3) | c;

g_Kernel.RunningTaskIndex =taskRdyQue[priority];

#else // roundrobin

g_Kernel.RunningTaskIndex = 0;

#endif

*(IntSP) =(unsigned char*)(g_Kernel.Tasks[g_Kernel.RunningTaskIndex].ExternalSP);

(unsigned char*) *(IntSP + 1) =((g_Kernel.Tasks[g_Kernel.RunningTaskIndex].ExternalSP)+1);

// Restore next Task's internal stack pointer. SP =(volatile unsigned char ) g_Kernel.Tasks[g_Kernel.RunningTaskIndex].InternalSP; // Restore next Task's external stack pointer. start_timer(); // start the timer // Restore first Task's all registers. Kernel_RestoreContext();
} void start_timer()
{ // Setup timer. TMOD |= 1; // Interrupt per millisecond. TH0 = (65536 - 20000) / 256; TL0 = (65536 - 20000) % 256; ET0 = 1; TR0 = 1; // Enable all interrupts. EA = 1;

}
//--------------------------------------------------------------------------- void Initialise_Shell(void)
{ TMOD|=0x20; // timer 1 mode 2 auto reload TH1|=0xFD; TL1|=0xFD; // baud 9600 SCON|=0x50; // 8 bit 1 top bin 1 ren enabled IE|=0x90; // enable serial interrupt TR1|=1;
}

void Task_Idle() { while(1); }

---)))))))))------((((((((==========((((((++++++++++)))))))))))))))))___________

Kernel.h file

//---------------------------------------------------------------------------
#ifndef KernelH
#define KernelH
//---------------------------------------------------------------------------
#include <AVX.h>
#include "Task.h"

//---------------------------------------------------------------------------

void Task_Idle();
typedef struct _Kernel
{ unsigned char RunningTaskIndex; // Running Task index. unsigned char TaskCount; // Task count. Task Tasks[OS_TASK_COUNT]; // Task objects.
} Kernel;

// Initialize the kernel.
// Parameters:
// None.
// Return value:
// None.
void Kernel_Initialize();
// Context switch the kernel.
// Parameters:
// None.
// Return value:
// None.
void Kernel_ContextSwitch();
// Start the kernel.
// Parameters:
// None.
// Return value:
// None.
void Kernel_Start();
void start_timer();
void Task_Idle();

//---------------------------------------------------------------------------
extern Kernel data g_Kernel;
//---------------------------------------------------------------------------
#endif // KernelH
//---------------------------------------------------------------------------

0