Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
VxWorks--ÈÎÎñ¼äͬ²½
 
À´Ô´£ºmy_businessµÄרÀ¸  ·¢²¼ÓÚ 2016-5-4
  3607  次浏览      29
 

ÈÎÎñ¼äͬ²½ÓëͨÐÅÖ®¹ÜµÀ

VxWorksÌṩÁËÒ»ÖÖÀàËÆÏûÏ¢¶ÓÁеÄÈÎÎñ¼äÊý¾ÝͨÐŵĻúÖÆ----¹ÜµÀ¡£¹ÜµÀµÄ×÷ÓøúÏûÏ¢¶ÓÁм¸ºõÍêȫһÖ£¬¾ÍÊÇ¿ÉÒÔ°ïÖú°ÑÊý¾Ý´ÓÒ»¸öÈÎÎñ·¢Ë͸øÁíÒ»¸öÈÎÎñ£¬µ«Êǹ¦ÄÜÀàËÆ£¬Ê¹Ó÷½Ê½È´½ØÈ»²»Í¬¡£¹ÜµÀÊôÓÚÒ»ÖÖÐéÄâµÄI/OÉ豸£¬ËùÒÔËüµÄÏà¹ØAPI¸úͳһI/O·ÃÎʽӿÚÍêȫһÖ£¬±ÈÈçopen£¬close£¬read£¬writeµÈ¡£Ò²¾ÍÊÇ˵ËüÌṩÁËÒ»×éͨÓõÄI/O²Ù×÷½Ó¿Ú£¬¶ÔʹÓÃÕßÀ´Ëµ·Ç³£·½±ã¡£

ÏÂÃæ¿ÉÒÔ¿´Ò»¶Î¹ÜµÀʹÓõĴúÂ룺

// ´´½¨¹ÜµÀÐéÄâI/OÉ豸
pipeDevCreate("/pipe/try1", 10, 100);
// ´ò¿ª¸ÃÉ豸
int fd = open ("/pipe/try1", O_RDWR, 0);
// Ïò¹ÜµÀдÈëÊý¾Ý
write (fd, (char*)&inData, sizeof(inData));
// ´Ó¹ÜµÀ¶ÁÈ¡Êý¾Ý
int len = read (fd, (char*)&outData, sizeof(outData));

´ÓÈçÉÏ´úÂë¿ÉÒÔ¿´³ö£¬´´½¨Íê¹ÜµÀºóµÄ´¦ÀíÍêÈ«¸úͨÓÃI/O½Ó¿ÚµÄʹÓÃÊÇÍêÈ«ÏàͬµÄ£¬¶ÔC/C++³ÌÐòÔ­À´Ëµ¼¸ºõûÓжîÍâµÄѧϰ³É±¾¡£ËùÒÔÄã·ÃÎʹܵÀ¿ÉÒÔ¸úÆäËûI/O·ÃÎʵĴ¦ÀíÒ»Ñù£¬ÓÅ»¯ÁË´úÂëµÄͨÓÃÐÔ¡£Í¬Ê±£¬Ê¹ÓùܵÀ»¹´øÀ´ÁíÒ»Öֺô¦£¬ËüÖ§³Ö¶à·I/O¸´ÓÃ----select¡£´ó¼ÒÖªµÀselectÖ§³Ö¾ø´ó¶àÊýµÄÒì²½I/OÉ豸µÄ²Ù×÷£¬°üÀ¨Socket£¬´®ÐÐÉ豸µÈ¡£ËùÒÔʹÓÃselect¿ÉÒÔʹһ¸öÈÎÎñͬʱ¼àÌý¶à×鲻ͬµÄI/OÉ豸£¬´ó´óÌá¸ß³ÌÐòÐÔÄÜ¡£¹ØÓÚselect£¬´ó¼ÒÒ²¿ÉÒԲο¼Îҵġ¶·þÎñÆ÷Ä£ÐÍ·ÖÎöÓëÑéÖ¤¡·ÖжԶà·I/O¸´ÓõÄÃèÊö¡£

¿´µ½ÕâÀÓÐÈË»á˵£¬ÄǹܵÀÔÚʹÓú͹¦ÄÜÉϲ»ÊÇÍêʤÏûÏ¢¶ÓÁÐÂð£¬ÊDz»ÊÇ´ó¼Ò¶¼Ó¦¸ÃʹÓùܵÀ°¡£¿µ±È»²»ÊÇ£¬ÆäʵÁ½Õ߸÷ÓÐÌØµã£¬Ç°ÎÄÖÐÒ²ÓÐÌáµ½£¬ÏûÏ¢¶ÓÁÐÖ§³ÖÔÚ¶ÁºÍд²Ù×÷ʱÉèÖó¬Ê±Ê±¼ä£¬Í¬Ê±»¹Ö§³ÖÉèÖÃÏûÏ¢ÀàÐÍ£¨URGENT»¹ÊÇNORMAL£©µÈ£¬¶ø¹ÜµÀ²¢²»Ö§³ÖÕâЩ£¬ËüÖ»ÊÇÖ§³ÖͨÓÃI/O²Ù×÷Ëù¾ßÓеĽӿÚÐÎʽ¡£ËùÒÔ¾ßÌåÈçºÎÑ¡Ôñ»¹ÊÇ¿´Êµ¼ÊµÄÓ¦Óá£

×ܵÄÀ´Ëµ£¬ÏûÏ¢¶ÓÁиü·ûºÏͨÓõÄÈÎÎñ¼äͨÐŵÄʹÓÃϰ¹ß£¬Ò²¸üÈÝÒ׿ØÖÆ£¬¶øµ±ÐèҪͨ¹ý¶à·I/O¸´ÓÃÀ´ÓÅ»¯³ÌÐò´¦Àíʱ£¬Ôò¿ÉÒÔ¿¼ÂÇʹÓùܵÀ¡£

ÈÎÎñ¼äͬ²½ÓëͨÐÅ֮ʼþ

´ÓVxWorks 5.5¿ªÊ¼£¬ÌṩÁËеÄÈÎÎñ¼äͬ²½Í¨ÐŵĻúÖÆ----ʼþ£¬Ê¼þ¿ÉÓÃÓÚÈÎÎñºÍÖжϷþÎñ³ÌÐòISRÖ®¼ä¡¢ÈÎÎñºÍÈÎÎñÖ®¼ä¡¢ÈÎÎñºÍVxWorks×ÊÔ´Ö®¼ä½øÐÐͨÐÅ¡£ ÈÎÎñÓú¯ÊýeventReceive()À´½ÓÊÕËü¹ØÐĵÄʼþ£¬ÓÃeventSend()À´ÏòÁíÒ»¸öÈÎÎñ·¢ËÍʼþ¡££¨ÊÇ·ñ¿´ËƼòµ¥?)

ÏÈÀ´¿´µÚÒ»¸öÀý×Ó£º

void eventRoute1(void* param)
{
int task_id = (int)param;
eventSend(task_id , VXEV01);

}
void tryEvent()
{
int id = taskIdSelf();
taskSpawn("vxEvent1", 150, VX_FP_TASK, 30000, (FUNCPTR)eventRoute1, id,0,0,0,0,0,0,0,0,0 );
eventReceive(VXEV01, EVENTS_WAIT_ALL, WAIT_FOREVER, 0);
}

ÔÚtryEventÖÐÆô¶¯Ò»¸öÈÎÎñ£¬È»ºóµ÷ÓÃeventReceiveͨ¹ýÉèÖÃEVENTS_WAIT_ALLÀ´µÈ´ýVXEV01ʼþµÄ·¢Éú£¬×ÓÈÎÎñÖе÷ÓÃeventSendÏò³õʼÈÎÎñ·¢ËÍʼþVXEV01£¬´Ó¶ø´¥·¢³õʼÈÎÎñ¼ÌÐøÖ´ÐС£

´ÓÕâ¸öÀý×Ó£¬ºÜ¶àÈËÒ²Ðí»á¾õµÃʼþ¸úÐźÅÁ¿¹¦ÄÜÒ»Ñù£¬Ã»ÓÐÌ«¶àÒâÒå¡£ÆäʵÉÏÃæÌåÏֵŦÄÜÖ»ÊÇʼþµÄ±ùɽһ½Ç£¬ÈÃÎÒÃÇÂýÂýÀ´Ò»¿úȫò°É¡£

ÄÇô£¬Ê¼þÓÐÄÄÐ©ÌØµãÄØ£¿

µÚÒ»£¬´ÓÉÏÃæµÄÀý×ÓÒѾ­¿ÉÒÔ¿´³ö£¬Ê¹ÓÃʼþʱ²»ÐèÒª´´½¨ÈκζÔÏó£¬ËùÒÔËüÊÇÒ»ÖÖ¸üÇáÁ¿¼¶µÄͬ²½Í¨ÐÅ»úÖÆ¡£ÒòΪÿһ¸öÈÎÎñ¶¼ÓÐÒ»¸ö32λʼþ¼Ä´æÆ÷£¬ÆäÖиß8λÓÉVxWorksϵͳ±£Áô£¬¿ª·¢Õß¿ÉÒÔʹÓõÍ24루VXEV01~VXEV24£©£¬Ã¿Ò»Î»±íʾһÖÖʼþ¡£

µÚ¶þ£¬Ê¹ÓÃʼþ¿ÉÒԵȴý¶à¸öʼþµÄ·¢Éú£¬ÕâÀïµÄ¶à¸öʼþ·¢ÉúµÄ¹ØÏµ£¬¿ÉÒÔÊÇ¡°Ó롱Ҳ¿ÉÒÔÊÇ¡°»ò¡±£¬ÔÚeventReceive·½·¨ÖпÉÒÔÖ¸¶¨EVENTS_WAIT_ANY»òEVENTS_WAIT_ALL£¬±ÈÈçµÈ´ýVXEV01»òVXEV02Ö®Ò»µÄ·¢Éú:

eventReceive(VXEV01 | VXEV02, EVENTS_WAIT_ANY, WAIT_FOREVER, 0);

¸öÈËÈÏΪÕâÊǷdz£ÓÐÓõÄÒ»µã£¬±Ï¾¹Èç¹ûÒª×Ô¼ºÊµÏÖ¶àʼþ½áºÏ²¢¿É¿ØÖƳ¬Ê±Ê±¼äµÄ»°£¬¿ÉÒÔ˵²¢·ÇÄÇô¼òµ¥£¬¶øÇÒÐÔÄÜÒ²»áÓÐÎÊÌâ¡£

µÚÈý£¬³ýÁËÉÏÊöÀý×ÓÖÐeventReceiveºÍeventSendµÄʹÓÃÍ⣬ʼþ»¹¿ÉÓÃÓÚÈÎÎñ¸úVxWorks×ÊÔ´Ö®¼ä½øÐÐͨÐÅ£¬ÕâÀïËùνµÄ×ÊÔ´ÓÐÐźÅÁ¿£¬ÏûÏ¢¶ÓÁеȡ£

±ÈÈçÔÙ¿´µÚ¶þ¸öÀý×Ó£¨¼ÙÉèÒÑ´´½¨ÁËsem_ev1ºÍsem_ev2Á½¸öÐźÅÁ¿£©£º

void eventRoute1(void* param)
{
semGive(sem_ev1);
}
void eventRoute2(void* param)
{
semGive(sem_ev2);
}
void tryEvent()
{
semEvStart(sem_ev1, VXEV01, EVENTS_SEND_ONCE);
semEvStart(sem_ev2, VXEV02, EVENTS_SEND_ONCE);
taskSpawn("vxEvent1", 150, VX_FP_TASK, 30000, (FUNCPTR)eventRoute1, 0,0,0,0,0,0,0,0,0,0 );
taskSpawn("vxEvent2", 150, VX_FP_TASK, 30000, (FUNCPTR)eventRoute2, 0,0,0,0,0,0,0,0,0,0 );
eventReceive(VXEV01 | VXEV02, EVENTS_WAIT_ALL, WAIT_FOREVER, 0);
semEvStop(sem_ev1);
semEvStop(sem_ev2);
}

¸ú×ÊԴͨÐÅ£¬ÐèÒª°Ñ¶ÔÓ¦×ÊÔ´×¢²áµ½Ìض¨Ê¼þ£¬ÈçÉÏÀýÖÐÊÇͨ¹ýsemEvStart°ÑÐźÅÁ¿sem_ev1ºÍsem_ev2·Ö±ð×¢²áµ½Ê¼þVXEV01ºÍVXEV02£¬È»ºósemGiveÐźÅÁ¿±»ÊÍ·ÅÇÒ¿ÉÓÃʱ£¬¶ÔӦע²áµÄʼþ»á±»´¥·¢¡£

µÚËÄ£¬Ç°ÃæËµµ½semGiveÐźÅÁ¿±»ÊÍ·ÅÇÒ¿ÉÓÃʱ£¬¶ÔӦע²áµÄʼþ»á±»´¥·¢£¬ÕâÀïËùν¿ÉÓõĺ¬ÒåÊÇ£¬semGiveÊÍ·ÅÐźÅÁ¿Í¬Ê±Ã»ÓÐÆäËûÈÎÎñÕýÔÚËø¶¨¸Ã×ÊÔ´£¬Ò²¾ÍÊǸÃʱ¼äµã¸Ã×ÊÔ´¿ÉÓÃʱ£¬²Å»á´¥·¢Ê¼þ¡£µ«²»Äܱ£Ö¤¸Ã×ÊÔ´ÔÚʼþ±»´¥·¢ºó»¹¿ÉÓã¬ÒòΪºóÐøÓпÉÄÜÓÖ±»ÆäËûÈÎÎñËø¶¨¡£

µÚÎ壬Èç¹ûÏà¹Ø±»×¢²áµ½Ê¼þµÄ×ÊÔ´±»É¾³ýʱ£¬Í¨¹ýeventReceiveµÈ´ý¸ÃʼþµÄÈÎÎñ»á×Ô¶¯±»´¥·¢£¬Ò²¾ÍÊÇ˵semDeleteºÍmsgQDelete»á´¥·¢¸Ã×ÊÔ´×¢²á¹ýʼþ¡£µ«ÊÇÐèҪעÒâµÄÊÇ£¬µ±µ÷ÓÃsemDeleteʱ£¬ÈÎÎñÖ´ÐÐÓÚsemEvStartºÍeventReceiveÖ®¼äµÄ»°£¬ÔòºóÐøeventReceive»á±»×èÈû¡£

×ÜÉÏËùÊö£¬VxWorksÖУ¬Ê¼þÌṩÁ˷dz£·á¸»µÄ¹¦ÄÜ£¬ÔÚʵ¼ÊÓ¦Óó¡¾°ÖÐËüµÄÒ»Ð©ÌØÐÔ¿ÉÒÔʹºÜ¶à¸´ÔÓµÄÊÂÇé±äµÃ¼«Æä¼òµ¥¡£

ÈÎÎñ¼äͬ²½ÓëͨÐÅÖ®ÐźÅ

VxWorksÖеÄÐźÅÊÇ´ÓPOSIXÑØÓùýÀ´µÄ¸ÅÄÈç¹ûÄãÊìϤLinuxϵÄsignal£¬ÄÇô¼¸ºõ¾ÍÊÇÒ»»ØÊ¡£ÐźŸúÐźÅÁ¿£¬ÄÇÍêÈ«ÊÇÁ½»ØÊ£¬ÐźÅÓеãÀàËÆÊ¼þ£¬²»¹ýʼþ½Ó¿ÚÊÇͬ²½µÄ£¬¶øÐźŴ¦ÀíÊÇÒì²½µÄ£¬ËùÒÔÆäʵÐźŸüÏñÖжϣ¬»ò¿ÉÒÔ³ÆÎªÈíÖжϡ£

ÏÈ¿´¸ö¼òµ¥µÄÀý×Ó£º

void signalRoute1(int sig)
{
logMsg("signalRoute1 signal id: %d\n", sig,0,0,0,0,0);
}
void trySignal()
{
signal(SIGBUS, signalRoute1);
raise(SIGBUS);
}


ÔÚÕâ¸öÀý×ÓÖУ¬ÏÈͨ¹ýsignal·½·¨£¬°ó¶¨ÐźÅSIGBUSµÄ´¦Àí·½·¨signalRoute1£¬È»ºóͨ¹ýraiseÏòµ±Ç°ÈÎÎñ·¢ËÍÐźţ¬ÐźŴ¦Àíº¯Êý±»Ö´ÐС£

µÚÒ»¸ö¸ÅÄ°ó¶¨µÄÐźŴ¦Àíº¯ÊýÊÇÔÚÄÄÔËÐУ¬ºǫ́ÐÂÈÎÎñÖУ¿µ±Ç°ÈÎÎñÖУ¿ÏµÍ³ÌØÊâÈÎÎñÖУ¿´ð°¸ÊÇ»áÔÚÐźÅÄ¿±êÈÎÎñµÄÉÏÏÂÎÄÖÐÔËÐУ¬ËùÒÔ¸ÃÀý×ÓÖÐÒòΪraiseÊÇÏòµ±Ç°ÈÎÎñ·¢ËÍÐźţ¬ËùÒÔÖ®ºó»á¹ÒÆðµ±Ç°ÈÎÎñµÄÖ´ÐУ¬µ«ÈÔ¾ÉÔÚ±¾ÈÎÎñµÄÉÏÏÂÎÄÖÐÏìÓ¦signalRoute1¡£

ÔÙ¿´Ò»¸öÀý×Ó£º

void signalRoute2(int sig)
{
logMsg("signalRoute2 sig id: %d\n", sig,0,0,0,0,0);
}
void taskRoute(void* param)
{
int task_id = (int)param;
kill(task_id, 0x10);
}
void trySignal()
{
int id = taskIdSelf();
signal(0x10, signalRoute2);
taskSpawn("vxSignal", 150, VX_FP_TASK, 30000, (FUNCPTR)taskRoute, id,0,0,0,0,0,0,0,0,0 );
}

ÏÈ˵Ã÷Ï£¬kill¸úrasiseÒ»Ñù¶¼ÊǸøÈÎÎñ·¢ËÍÐźţ¬µ«rasiseÖ»Äܸøµ±Ç°ÈÎÎñ£¬¶økill¿ÉÒÔÖ¸¶¨ÈÎÎñ·¢ËÍ£¬Ö¸¶¨ÈÎÎñ»á±»¹ÒÆð£¬¶øÐźŴ¦Àí¾Í»áÔÚÈÎÎñidÖ¸¶¨ÈÎÎñµÄÉÏÏÂÎÄÖÐÔËÐС£

µÚ¶þ¸ö¸ÅÄ²»ÄÜÏòÄÚºËÈÎÎñ·¢ËÍÐźţ¬¿ÉÒÔ¸øÈÎÎñ±¾Éí£¬ÏµÍ³publicµÄÈÎÎñ»òϵͳÈÎºÎÆäËû½ø³Ì£¨6.x¿ªÊ¼Ö§³Öprocess£©·¢ËÍÐźš£

µÚÈý¸ö¸ÅÄϵͳÖÐÓÐ31¸ö¿ÉÓõÄÐźţ¨1~31£©£¬Ã¿¸öÐźŶ¼ÓÐĬÈϵĺ¬ÒåºÍ´¦Àí£¬µ«Óû§¿ÉÒÔÐÞ¸ÄĬÈϵÄÉ趨¡£

µÚËĸö¸ÅÄӦ¸ÃÔÚʲôʱºòÓÃÐźţ¿Ðźű¾ÉíÒ²¿ÉÒԺܷ½±ãµÄ´ï³ÉÈÎÎñ¼äµÄͨÐÅ£¬µ«ÊÇÕý³£Çé¿öÏÂÎÒÃÇÓ¦¸Ã¾¡Á¿ÉÙÓÃÐźţ¬ÎªÊ²Ã´£¿ÒòΪÐÅºÅ»áÆÆ»µ¼ÈÓд¦ÀíµÄÓÅÏȼ¶¿ØÖÆ¡£ÒòΪÐźÅÊÇÒì²½´¦ÀíµÄ£¬ËùÒÔºÜÄѱÜÃâÔÚÐźŴ¦Àíµ¼ÖÂÄ¿±êÈÎÎñ¹ÒÆðʱ£¬ÊÇ·ñ»áÒòΪ¸ÃÈÎÎñËø¶¨ÁËij×ÔÔ¸µ¼ÖÂÕý³£´¦ÀíÂß¼­±»ÆÆ»µ£¬Í¨Ë×µã˵¾ÍÊÇÐźŴ¦ÀíºÜ¿ÉÄÜ×èÈûÕý³£µÄÂß¼­¡£ËùÒÔÒ»°ãÖ»ÓÐÔÚ´íÎó´¦Àí»òÕßÒì³£µÈÓÅÏȼ¶Ïà¶ÔºÜ¸ßµÄ´¦ÀíÉÏʹÓÃÐźš£

µÚÎå¸ö¸ÅÄ¼´Ê¹ÈÎÎñ´¦ÓÚ¹ÒÆð״̬£¨±ÈÈçµÈ´ýijÐźÅÁ¿£©£¬·¢ËÍÐźÅʱ»¹ÊÇ¿ÉÒÔ´¥·¢¸ÃÈÎÎñ¡£

µÚÁù¸ö¸ÅÄÐźŴ¦Àíº¯ÊýÓкÎÐèҪעÒâµÄ£¿ÒòΪµÚËĵãÖÐÌáµ½µÄÎÊÌ⣬ËùÒÔÐźŴ¦Àíº¯ÊýÓ¦¸Ã¾¡Á¿±£Ö¤´¦Àí¶ÌС£¬¾«¼ò£¬²»Ê¹ÓûᵼÖÂ×èÈûµÄ´¦Àí¡£ÆäʵÓеãÀàËÆÖжϵĴ¦Àí£¬¹ØÓÚÕâµã¿ÉÒԲο¼ÎÒÁíһƪÎÄÕ£º¡¶¡¾VxWorksϵÁС¿ÖжϷþÎñ³ÌÐòÖÐÄÄЩ¿ÉÒÔ×öÄÄЩ²»¿ÉÒÔ×ö¡·¡£

×ܽáһϣ¬¶ÔÓÚ³£¹æµÄÈÎÎñ¼äͨÐÅ£¬ÍùÍùǰ¼¸ÆªÖÐÌáµ½µÄ¼¸ÖÖ·½Ê½¸üºÏÊÊ£¬¸üͨÓ㬸ü°²È«¡£¶ø¶ÔÓÚÐźţ¬Ò»°ã¸ü¶àµÄ±»Ê¹ÓÃÔÚ´íÎó´¦Àí»òÒì³£ÖУ¬×ÜÖ®»¹ÊÇÉ÷Óá£

   
3607 ´Îä¯ÀÀ       29
 
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
 
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
 
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]

ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þµÄ˼¿¼
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS
Ïà¹ØÅàѵ¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
Windows Azure ÔÆ¼ÆËãÓ¦ÓÃ

ĦÍÐÂÞÀ­ ÔÆÆ½Ì¨µÄ¹¹½¨ÓëÓ¦ÓÃ
ͨÓù«Ë¾GE DockerÔ­ÀíÓëʵ¼ù
ijÑз¢ÖÐÐÄ Openstackʵ¼ù
ÖªÃûµç×Ó¹«Ë¾ ÔÆÆ½Ì¨¼Ü¹¹ÓëÓ¦ÓÃ
ijµçÁ¦ÐÐÒµ »ùÓÚÔÆÆ½Ì¨¹¹½¨ÔÆ·þÎñ
ÔÆ¼ÆËãÓëWindows AzureÅàѵ
±±¾© ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ