Jiayu,
I recommend upgrading to the most current version of GCC. Either GCC 3.4.1 (latest and greatest), or GCC 3.3.4 (yesterday's tried and true).
There is no "GCC 2.96". It's an unofficial, maverick release of GCC by Red Hat. It's not supported on this forum (although we do give some general advice).
Your code snippets are incomplete.
Is your enum supposed to be missing the terminating semicolon (and thus typedefing to VOS_UINT16)? If so, have you tried separating out g_uwLogicalBoardNo variable from the typedef?
Is your VOS_NULL_WORD define supposed to come AFTER it is being used?
Is your typedef of VOS_UINT16 supposed to come AFTER it is being used?
For your "compiler can't assign by structure"...
Is there a good reason to override the platform recommended packing, which can cause errors such as "Internal compiler error in 'move_by_pieces'"?
HTH, --Eljay