µÚÒ»·¶ÎÄÍø - רҵÎÄÕ·¶ÀýÎĵµ×ÊÁÏ·ÖÏíÆ½Ì¨

UCGUI

À´Ô´£ºÓû§·ÖÏí ʱ¼ä£º2026/8/13 0:00:57 ±¾ÎÄÓÉloading ·ÖÏí ÏÂÔØÕâÆªÎĵµÊÖ»ú°æ
˵Ã÷£ºÎÄÕÂÄÚÈݽö¹©Ô¤ÀÀ£¬²¿·ÖÄÚÈÝ¿ÉÄܲ»È«£¬ÐèÒªÍêÕûÎĵµ»òÕßÐèÒª¸´ÖÆÄÚÈÝ£¬ÇëÏÂÔØwordºóʹÓá£ÏÂÔØwordÓÐÎÊÌâÇëÌí¼Ó΢ÐźÅ:xxxxxxx»òQQ£ºxxxxxx ´¦Àí£¨¾¡¿ÉÄܸøÄúÌṩÍêÕûÎĵµ£©£¬¸ÐлÄúµÄÖ§³ÖÓëÁ½⡣

µÄÖµËù¶ÔÓ¦µÄµØÖ·£¬ÕÒµ½Ëü±£´æµÄSPÖµ£¬¸ÃÖµ¶ÔÓ¦µÄÊÇ´æ´¢PU¼Ä´æÆ÷µÄ¶ÑÕ»Çø£¬¸ù¾ÝÕâ¸ö¶ÑÕ»ÇøµÄÖµ£¬¿ÉÒÔ¿´µ½±£´æµÄX£¬Y£¬A£¬B£¬ÒÔ¼°ÈÎÎñº¯ÊýµÄÊ×µØÖ·ÊÇ·ñÕýÈ·ÁË¡£ÔÚÕâÀÕâ¸öµØÖ·ÒªÖ¸ÏòOS_TaskIdle()£¬ÕâÑùÔÚOSStartHighRdy()ÔËÐк󣬳ÌÐò²ÅÄÜÌø×ªµ½OS_TaskIdle()ÔËÐС£

Èç¹ûûÓÐÌø×ª£¬Ôò˵Ã÷OsTaskStkInit()ÍÆÈë¶ÑÕ»³ö´íÁË¡£Õâʱ£¬¿ÉÒÔÖØÐµ¥²½Ö´ÐУ¬ÔÚ¿ÕÏÐÈÎÎñ´´½¨º¯ÊýOS_InitTaskIdle()¼ÓÈë¶Ïµã£¬ÔÙµ¥²½Ö´ÐУ¬Ö±µ½ÔËÐе½OSTaskStkInit()£¬½øÈë¸Ãº¯Êý£¬¹Û²ìµ÷ÊÔÆ÷ÖеĴ洢Æ÷ÇøÖжÔÓ¦µÄ¶ÑÕ»´¦£¬ÊÇ·ñ¶ÔCPU¼Ä´æÆ÷½øÐÐÁËÕýÈ·µÄ±£´æ£¬ÓÈÆä×¢ÒâÈÎÎñº¯ÊýµØÖ·µÄ´æ´¢¡£

ÔÚÎÒµ÷ÊÔ¹ý³ÌÖУ¬·¢ÏÖÈÎÎñº¯ÊýµÄµØÖ·Ã»Óб»ÕýÈ·µÄ±£´æ£¬µ¥²½Ö´ÐУ¬·¢ÏÖ³ÌÐòÖУ¬ÈÎÎñ´æ´¢Ò»¾äÓÐÎÊÌ⣬֮ºó¼ÓÒÔ¸ÄÕý£¬³ÌÐòÔËÐÐÕý³£¡£ ´úÂëÈçÏ£º

OS_STK *OSTaskStkInit (void (*task)(void *pd), void *p_arg, OS_STK *ptos, INT16U opt) {

INT16U *wstk; INT8U *bstk;

opt = opt; /* 'opt' is not used, prevent warning */ wstk=(INT16U *)ptos /* Load stack pointer */

wstk=(INT16U)p_arg;/* Simulate call to function with argument */ Ô­³ÌÐò³ö´í´¦

//*--wstk = (INT16U)(((INT32U)task) >> 8); /* Put task return address on top of stack */

//*--wstk = (INT16U)(((INT32U)task) >> 8); /* Put task return address on top of stack */ Ð޸ĺó

*--wstk = (INT16U)((INT32U)task); /* Return address of simulated call¡£ Format: PCH:PCL */

*--wstk=(INT16U)0x2222; /* Y Register */

20

*--wstk=(INT16U)0x1111; /* X Register */ *--wstk=(INT16U)0xBBAA; /* D Register */

*--wstk = (INT16U)0x0080; /* CCR: Disable STOP, Int¡£ Level = 0¡£ User Mode */

bstk = (INT8U *)wstk; /* Convert WORD ptr to BYTE ptr to set CCR */

*--bstk = *(INT8U *)0x10;/* Save the GPAGE register */ *--bstk = *(INT8U *)0x17;/* Save the EPAGE register */ *--bstk = *(INT8U *)0x16;/* Save the RPAGE register */

*--bstk = (INT8U )task;/* Save the task's PPAGE register value*/ return ((OS_STK *)bstk);/* Return pointer to new top-of-stack */ }

2 ÑéÖ¤OSCtxSw()º¯Êý

ÔÚÒѾ­ÖªµÀOSTaskStkInitº¯ÊýÕýÈ·ºó£¬¾Í¿ÉÒÔÔÚ³ÌÐòÖмÓÈëÒ»¸öÈÎÎñ£¬²¢²»¶ÏµÄÇл»µ½¿ÕÏÐÈÎÎñ¡£ÕâÀïÊÇʹÓõÄÈíÖжÏswiÀ´µ÷ÓÃOSCtxSwº¯ÊýµÄ¡££¨±ØÐë±£Ö¤³ÌÐòÖеÄÖжÏÏòÁ¿±íÖÐswiÖжÏÏòÁ¿µÄµØÖ·ÒѾ­Á´½Óµ½ÁËOSCtxSwº¯ÊýÉÏ£© ´úÂëÈçÏ£º

#define TASK_STK_SIZE 1024

OS_STK TaskStartStk[TASK_STK_SIZE]; /* ¶¨ÒåÈÎÎñ¶ÑÕ» */ INT8U err;

TASKDATA TaskStartData; TASKDATA *pdata;

void TaskStart(TASKDATA *pdata); void main(void) {

Init_Settings();

TaskStartData¡£PPAGE1 = 0xFE; DisableInterrupts;

21

OSInit();

OSTaskCreateExt(TaskStart,

(void *)&TaskStartData, /* Arguments passed to TaskStart() */ (void *)&TaskStartStk[TASK_STK_SIZE-1], /* Set Top-Of-Stack */

9, /* Lowest priority level */ 0, /* Task ID,no use */ &TaskStartStk[0], /* Set Bottom-Of-Stack */ TASK_STK_SIZE,

(void *)0, /* No TCB extension */ OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* Enable stack checking and clear stack */ OSStart(); }

void TaskStart(TASKDATA *pdata) {

pdata = pdata; while(1) {

OSTimeDly(1); } }

ÔÚÈÎÎñTaskStartÖÐÖ»ÓÐÒ»¸öOSTimeDly(1)£¬ÒòΪûÓÐÔÊÐíÖжϣ¬Ò²Ã»Óдò¿ªÊ±ÖÓ½ÚÅÄ£¬ËùÒÔOSTimeDly(1)²»»á·µ»Øµ½TaskStart¡£

µ¥²½Ö´ÐнøÈëOSTimeDlyº¯Êý£¬Ëü½Ó×ŵ÷ÓÃOS_Sched()£¬Èç¹ûÖжÏÏòÁ¿±íÕýÈ·£¬Ôò»áÔÙµ÷ÓÃOSCtxSw()£¬Ôڸú¯Êý·µ»Øºó£¬Ó¦¸Ã½øÈëOS_TaskIdle()¡£ 3 ÑéÖ¤OSIntCtxSw()ºÍOSTickISR()º¯Êý

ÔÚ²âÊÔ֮ǰ£¬ÐèÒª±£Ö¤Ê±ÖÓÖжÏÏòÁ¿Ö¸ÏòÁËʱÖÓ½ÚÅÄÖжϷþÎñ×Ó³ÌÐòOSTickISR()£¬È»ºó±ØÐëÔÚµÚÒ»¸öÈÎÎñ³ö£¬³õʼ»¯Ê±ÖÓ²¢¿ªÖжϣ¬¾ø¶Ô²»ÄÜÔÚ

22

OSStart()֮ǰ¿ªÆôʱÖÓÖжϡ£ ´úÂëÈçÏ£º

#define TASK_STK_SIZE 1024

OS_STK TaskStartStk[TASK_STK_SIZE]; /* ¶¨ÒåÈÎÎñ¶ÑÕ» */ OS_STK Task1Stk[TASK_STK_SIZE]; INT8U err;

TASKDATA TaskStartData; TASKDATA Task1Data; TASKDATA *pdata;

void TaskStart(TASKDATA *pdata); void Task1(TASKDATA *pdata); void main(void) {

Init_Settings();

TaskStartData¡£PPAGE1 = 0xFE; Task1Data¡£PPAGE1 = 0xFE; DisableInterrupts;

OSInit();

OSTaskCreateExt(TaskStart,

(void *)&TaskStartData, /* Arguments passed to TaskStart() */ (void *)&TaskStartStk[TASK_STK_SIZE-1], /* Set Top-Of-Stack */ 9, /* Lowest priority level */ 0, /* Task ID,no use */ &TaskStartStk[0], /* Set Bottom-Of-Stack */ TASK_STK_SIZE,

23

ËÑË÷¸ü¶à¹ØÓÚ£º UCGUI µÄÎĵµ
UCGUI.doc ½«±¾ÎĵÄWordÎĵµÏÂÔØµ½µçÄÔ£¬·½±ã¸´ÖÆ¡¢±à¼­¡¢ÊղغʹòÓ¡
±¾ÎÄÁ´½Ó£ºhttps://www.diyifanwen.net/c2i35s19vxm5zpal1bu2t_6.html£¨×ªÔØÇë×¢Ã÷ÎÄÕÂÀ´Ô´£©
ÈÈÃÅÍÆ¼ö
Copyright © 2012-2023 µÚÒ»·¶ÎÄÍø °æÈ¨ËùÓÐ ÃâÔðÉùÃ÷ | ÁªÏµÎÒÃÇ
ÉùÃ÷ :±¾ÍøÕ¾×ðÖØ²¢±£»¤ÖªÊ¶²úȨ£¬¸ù¾Ý¡¶ÐÅÏ¢ÍøÂç´«²¥È¨±£»¤ÌõÀý¡·£¬Èç¹ûÎÒÃÇ×ªÔØµÄ×÷Æ·ÇÖ·¸ÁËÄúµÄȨÀû,ÇëÔÚÒ»¸öÔÂÄÚ֪ͨÎÒÃÇ£¬ÎÒÃǻἰʱɾ³ý¡£
¿Í·þQQ£ºxxxxxx ÓÊÏ䣺xxxxxx@qq.com
ÓåICP±¸2023013149ºÅ
Top