Ìì²ÅÃǵĶÀ²ÃÕþÌå

#################################################################### ## ## ## ## ## CODE SKELETON v1.0.0 ## ## ## ## TP-LINK ## ## 2013.7.9 ## #################################################################### 1. žÅÊö CODE SKELETONÊÇÌáÈ¡CODEʵÏÖµÄÖ÷Ìå¿òŒÜ¡£ËüžúʵŒÊʵÏÖ»&sup1;Óзdz£ŽóµÄ&sup2;î Ÿà¡£·œ±ãŽóŒÒÊìÏ€CODEµÄ&sup1;ŠÄÜ»®·ÖÒÔŒ°ŽóžÅÁËœâÓïÒô&sup1;ŠÄÜÉæŒ°µÄһЩ±à³ÌŒŒÊõ¡£ ËüÖ÷Òª°üº¬menuconfigµÄ»ùŽ¡Ê&sup1;Óá¢MakefileŽîœš&sup1;€³Ì¡¢¶¯Ì¬¿âµÄÊ&sup1;Óᢟ&sup2;̬¿â µÄÊ&sup1;Óᢌòµ¥ÖÕ¶ËI/O¡¢»Øµ÷º¯Êý¡¢¶àÏ̱߳à³Ì¡¢socket±à³Ì¡¢Œòµ¥Çý¶¯±à³ÌµÈ ÄÚÈÝ¡£&sup1;ŠÄÜʵÏֱȜώÖ&sup2;Ú£¬»¶Ó­¶ÁÕß·áž»CODE SKELETONµÄÄÚÈÝ¡£CODE SKELETON Ö»º­žÇÁËCODEʵÏÖµÄÒ»&sup2;¿·ÖÄÚÈÝ£¬Èç&sup1;û¶ÁÕß¶ÔÓïÒôÄÚÈÝÓÐÐËÈ€¿ÉÒÔœøÒ»&sup2;œÑ§Ï° ºÍÉºóÎÄ&sup2;οŒ×ÊÁϵÄÄÚÈÝ¡£ 2. ¿òŒÜ CODE SKELETON°üÀšÈýžöÄ£¿é£ºÄÚºËÄ£¿é£š×Ö·ûÇý¶¯simple£©£¬·þÎñŽŠÀíÖÐ ÐÄ£šcs_server)ºÍ·þÎñÇëÇó¿Í»§¶Ë£šcs_client£©¡£cs_clientÒÔÃüÁîÐеķœÊœ œÓÊÜÓû§µÄÇëÇ󣬞ùŸÝÃüÁîÔÙÍš&sup1;ýsocket°ÑÃüÁË͵œcs_server, cs_server ŽŠÀíºó·µ»ØÖŽÐМá&sup1;ûžøcs_client¡£Œòµ¥œá&sup1;&sup1;ÍŒÈçÏÂËùÊŸ¡£ *--------* *-----------* *---------* | | | | | | | simple |<----------->| server |<---------->| client | | | | | | | *--------* *-----------* *---------* server ºÍ client Ä£¿éŸùÊ&sup1;ÓÃÁœžöÄ£¿é£¬mini_shellºÍsocketÄ£¿é¡£Ç°Õß ·â×°ÖÕ¶ËI/OºÍ»Øµ÷º¯Êý±í¡£ºóÕß·â×°unixÓòÌלÓ×ÖÓÃÓÚœø³ÌŒäÍšÐÅ¡£ 3. ĿŒœá&sup1;&sup1; TOP [code skeleton¶¥&sup2;ãĿŒ] | *---> readme [±ŸÎĵµ *-*] | *---> build [&sup1;€³Ì±àÒë»·Ÿ³] | *---> config [ÅäÖÃĿŒ£¬µ±Ç°Ö»ÓÐmenuconfig] | *---> install [&sup1;€³Ì±àÒëºóÉú³ÉµÄÊ&sup1;ÓÃÎÄŒþ] | *---> code [ÔŽŽúÂë] | *---> modules [ÄÚºËÄ£¿é] | | | *---> simple [Œòµ¥×Ö·ûÇý¶¯ÊµÏÖ] | *---> apps [Óû§&sup2;ãŽúÂë] | *---> inc [&sup1;«ÓÃÍ·ÎÄŒþ] | *---> cs_libs [¿âÎÄŒþ] | | | *---> mini_shell | | | *---> socket | *---> cs_server | *---> cs_client 4. Ê&sup1;ÓÃ&sup2;œÖè 4.1 ÅäÖÃ&sup1;€³Ì œøÈëTOP/buildĿŒ£¬ÊäÈëÏÂÃæÃüÁî¡£#ÊÇlinux shellÌáÊŸ·û£¬&sup2;»ÊôÓÚÃüÁî&sup2;¿·Ö£¬ ºóÐøŸùÏàͬº¬Òå¡£Èç&sup1;û&sup2;»ÊäÈëMODEL=xxx, ĬÈÏÊ&sup1;ÓÃMODEL=TEST¡£ÅäÖÃÍê³Éºó±£ŽæÅä ÖÃÐÅÏ¢¡£ # make MODEL=xxx menuconfig 4.2 ±àÒë&sup1;€³Ì ŒÌÐøÍ£ÁôÔÚbuildĿŒ£¬ÊäÈëÏÂÃæÃüÁî¡£ # make MODEL=xxx /* MODEL=xxx¿ÉÒÔ&sup2;»ÊäÈ룬ĬÈÏÊ&sup1;ÓÃMODEL=TEST */ ÁíÍ⣬±àÒëʱ¿ÉÒÔÊäÈë&sup2;ÎÊýÀŽŸö¶šÊÇ·ñÆô¶¯µ÷ÊÔ¿ª&sup1;ØŒ°µ÷ÊԵȶ±ð£¬ÈçÏÂÃüÁî # make MODEL=xxx VSDEBUG=yyy /* ÆäÖÐyyy¿ÉÒÔȡֵ error, sys, info, debugl, debugm, debugh£¬Ä¬ÈÏΪerror */ 4.3 ÔËÐгÌÐò ÏÂÃæµÄ&sup2;Ù×÷ŸùÔÚ TOP/installĿŒÏ¡£ 4.3.1 ŒÓÔØÇý¶¯ ŒÓÔØŒòµ¥×Ö·ûÇý¶¯simple£¬ÊäÈëÏÂÃæÃüÁî¡£ # insmod csmsimple.ko # cd /dev # mknod -m 666 csmsimple c 220 0 # cd - 4.3.2 Æô¶¯cs_server Èç&sup1;û±àÒëÑ¡ÏîÉèÖÃΪ¶¯Ì¬ÁŽœÓ¿â£¬ÐèÒªÏȰѶ¯Ì¬ÁŽœÓ¿â¿œ±ŽµœÏàӊλÖãš±ÈÈç /usr/lib/£©¡£Èç&sup1;û±àÒëÑ¡ÏîÉèÖÃΪŸ&sup2;̬¿â£¬Ö±œÓÊäÈëÏÂÃæÃüÁî¡£ # ./cs_server & 4.3.3 Æô¶¯cs_client Èç&sup1;û±àÒëÑ¡ÏîÉèÖÃΪ¶¯Ì¬ÁŽœÓ¿â£¬ÐèÒªÏȰѶ¯Ì¬ÁŽœÓ¿â¿œ±ŽµœÏàӊλÖãš±ÈÈç /usr/lib/£©¡£Èç&sup1;û±àÒëÑ¡ÏîÉèÖÃΪŸ&sup2;̬¿â£¬Ö±œÓÊäÈëÏÂÃæÃüÁî¡£ # ./cs_client È»ºó¿ÉÒÔœøÈëÃüÁîÐÐģʜ£º[ code skeleton client ] # ¡£Æô¶¯Íê³É¡£ 5. ÍØÕ&sup1; µ±Ç°°æ±ŸÏµÍ³±ÈœÏŽÖ&sup2;Ú£¬»¶Ó­¶ÁÕßÍêÉÆ±ŸÏµÍ³¡£ŽóÖÂÂÞÁÐÐèÒªÍêÉÆµÄµØ·œ¡£ 1£©ÖÕ¶ËI/O£» 2£©ÃüÁîÐÐģʜµÄÀúÊ·ŒÇÂŒ¡¢×Ô¶¯Æ¥Å䣻 3£©Çý¶¯µÄÄں˶šÊ±Æ÷»òÕßÄÚºËÏß³Ì&sup2;úÉúÊÂŒþʵÏÖclientµÄ׎̬Çл»£¬Íê³ÉÒ»žö СÐ͵Ä׎̬»ú£» 4£©Ïß³Ìͬ&sup2;œÊµÏÖ£» 5£©ÓŠÓÃ&sup2;ãŽúÂëºÍÄںˎúÂëµ÷ÊÔŒŒÊõ£» 6£©clientÌíŒÓžüÓÐÈ€µÄÃüÁî¡£ 6. &sup2;οŒ×ÊÁÏ [1] rfc3261, J. RosenbergµÈ, 2002 [2] Understanding the Session Initiation Protocol (Third Edition), Alan B.Johnston, 2009 [3] LinuxÉ豞Çý¶¯³ÌÐò [4] LinuxÍøÂç°&sup2;È«ŒŒÊõÓëʵÏÖ(µÚ¶þ°æ), ³ÂÓÂÑ«, Ç廪Žóѧ³ö°æÉç [5] Unix»·Ÿ³žßŒ¶±à³Ì [6] pjsip&sup1;ÙÍø [7] netfilter&sup1;ÙÍø 7. ·ŽÀ¡ÐÅÏ¢ »¶Ó­ŽóŒÒ·ŽÀ¡ÐÅÏ¢µœ zhonglianbo@tp-link.net¡£ 为什么我的readme是这杨的
最新发布
08-14
04-12
#include "sys.h" #include "delay.h" #include "usart.h" #include "includes.h" #include "led.h" /************************************************ ALIENTEK ¾«Ó¢°æSTM32¿ª·¢°åUCOSʵÑé Àý6-1 UCOSIII ÈÎÎñ´´&frac12;¨ÓÚɾ³ý &frac14;&frac14;ÊõÖ§³Ö£ºwww.openedv.com ÌÔ±¦µêÆÌ£ºhttp://eboard.taobao.com &sup1;Ø×¢Î¢ÐÅ&sup1;«ÖÚÆ&frac12;̨΢Ðźţº"ÕýµãÔ­×Ó"£¬Ãâ·Ñ»ñÈ¡STM32×ÊÁÏ¡£ &sup1;ãÖÝÊÐÐÇÒíµç×Ó¿Æ&frac14;&frac14;ÓÐÏÞ&sup1;«Ë¾ ×÷ÕߣºÕýµãÔ­×Ó @ALIENTEK ************************************************/ //UCOSIIIÖÐÒÔÏÂÓÅÏÈ&frac14;¶Óû§³ÌÐò&sup2;»ÄÜÊ&sup1;Óã¬ALIENTEK //&frac12;«ÕâЩÓÅÏÈ&frac14;¶·ÖÅ䏸ÁËUCOSIIIµÄ5¸öϵͳÄÚ&sup2;¿ÈÎÎñ //ÓÅÏÈ&frac14;¶0£ºÖжϷþÎñ·þÎñ&sup1;ÜÀíÈÎÎñ OS_IntQTask() //ÓÅÏÈ&frac14;¶1£ºÊ±ÖÓ&frac12;ÚÅÄÈÎÎñ OS_TickTask() //ÓÅÏÈ&frac14;¶2£º¶¨Ê±ÈÎÎñ OS_TmrTask() //ÓÅÏÈ&frac14;¶OS_CFG_PRIO_MAX-2£ºÍ³&frac14;ÆÈÎÎñ OS_StatTask() //ÓÅÏÈ&frac14;¶OS_CFG_PRIO_MAX-1£º¿ÕÏÐÈÎÎñ OS_IdleTask() /* ΪÁËʵÏÖÁÙ&frac12;çÇøµÄ±£»¤£¬UCOSIIIÌá&sup1;©ÁËÁ&frac12;¸öºê£ºOS_CRITICAL_ENTER() ºÍOS_CRITICAL_EXIT()¡£ µ±Ò»¸öÈÎÎñ»òÖжÏ&frac12;øÈëÁÙ&frac12;çÇøÊ±£¬Ëü±ØÐëµ÷ÓÃOS_CRITICAL_ENTER()ºêÒÔ»ñµÃÁÙ&frac12;çÇøµÄ±£»¤¡£ Õâ¸öºê&frac12;«&frac12;ûÓÃÖжϣ¬ÒÔÈ·±£Ö´ÐÐÁÙ&frac12;çÇøµÄ´úÂë&sup2;»»á±»ÖжϻòÇÀÕ&frac14;£¬´Ó¶ø±£Ö¤ÁËÁÙ&frac12;çÇøµÄÔ­×ÓÐÔ¡£ µ±´úÂëÖ´ÐÐÍê±Ïʱ£¬ÈÎÎñ»òÖжϱØÐëµ÷ÓÃOS_CRITICAL_EXIT()ºêÀ´»Ö¸´Öжϣ¬ÒÔ±ãÆäËûÈÎÎñºÍÖжϿÉÒÔ·ÃÎÊ&sup1;&sup2;Ïí×ÊÔ´&sup2;¢Ö´ÐÐËüÃǵĴúÂë¡£ Ê&sup1;ÓÃOS_CRITICAL_ENTER()ºÍOS_CRITICAL_EXIT()ºêÀ´±£»¤ÁÙ&frac12;çÇø£¬ ÄÇôÔÚÈÎÎñT1Ö´ÐеÄÕû¸öʱ&frac14;äÄÚ£¬ÖжÏ&frac12;«±»&frac12;ûÓ㬠ÆäËûÈÎÎñ&frac12;«&sup2;»ÄÜ·ÃÎÊ&sup1;&sup2;Ïí×ÊÔ´&sup2;¢ÇÒÁÙ&frac12;çÇøµÄ´úÂë&frac12;«ÒÔÔ­×Ó·&frac12;Ê&frac12;Ö´ÐÐÍê±Ï¡£ ÕâÑù¿ÉÒÔÈ·±£ÁÙ&frac12;çÇø´úÂëµÄÕýÈ·ÐÔ£¬±ÜÃ⾺ÕùÌõ&frac14;þºÍÆäËûͬ&sup2;&frac12;ÎÊÌâ¡£ */ /* ÔÚUCOS IIIÖУ¬ÈÎÎñµÄÖ´ÐÐ˳ÐòÊÇ»ùÓÚÓÅÏÈ&frac14;¶µ÷¶ÈËã·¨¡£ ÿ¸öÈÎÎñ¶&frac14;ÓÐÒ»¸öÓÅÏÈ&frac14;¶£¨0µ&frac12;255£©£¬¾ßÓиü¸ßÓÅÏÈ&frac14;¶µÄÈÎÎñ±ÈµÍÓÅÏÈ&frac14;¶µÄÈÎÎñ¸ü¿ÉÄܵõ&frac12;µ÷¶È¡£ UCOS IIIÊ&sup1;ÓÃÇÀÕ&frac14;Ê&frac12;µ÷¶È£¬ÕâÒâζ×ŵ±ÓÐÒ»¸ö¸ßÓÅÏÈ&frac14;¶µÄÈÎÎñ¾ÍÐ÷ʱ£¬µ±Ç°ÕýÔÚÖ´ÐеÄÈÎÎñ&frac12;«±»ÖжÏ&sup2;¢ÇÒ¸ßÓÅÏÈ&frac14;¶ÈÎÎñ&frac12;«±»Ö´ÐС£ ÕâÈ·±£Á˾ßÓиü¸ßÓÅÏÈ&frac14;¶µÄÈÎÎñ¿ÉÒÔ&frac14;°Ê±»ñµÃÖ´ÐУ¬±ÜÃⳤʱ&frac14;ä±»µÍÓÅÏÈ&frac14;¶ÈÎÎñÕ&frac14;Óô¦ÀíÆ÷µÄÇé¿ö·¢Éú¡£ UCOS IIIÈÎÎñµÄÖ´ÐÐÊÇͨ&sup1;ýÉÏÏÂÎÄÇл»ÊµÏֵġ£ ÉÏÏÂÎÄÇл»ÊÇÖ¸&frac12;«´¦ÀíÆ÷µÄ״̬´ÓÒ»¸öÈÎÎñ±£´æµ&frac12;Äڴ棬Ȼºó&frac12;«ÁíÒ»¸öÈÎÎñµÄ×´Ì¬×°ÔØµ&frac12;´¦ÀíÆ÷ÖУ¬ÒÔÔÚ&sup2;»&frac14;ä¶ÏµÄÇé¿öÏÂת»»ÈÎÎñÖ´ÐС£ µ±Ò»¸öÈÎÎñÐèÒª±»ÖÐÖ&sup1;ʱ£¬&frac14;´Ö´ÐÐOS_TaskSuspend()º¯Êýʱ£¬UCOS III´¦ÀíÆ÷»áÖ´ÐÐÒ»¸öÈÎÎñÇл»ÖжÏ&sup2;¢&frac12;«¿ØÖÆÈ¨×ªÒƵ&frac12;ÁíÒ»¸öÈÎÎñ¡£ ÈÎÎñÇл»Í¨³£·¢ÉúÔÚÒÔÏÂÇé¿öÏ£º µ±ÈÎÎñÖ÷¶¯µ÷ÓÃÁËÈÎÎñ¿ØÖƺ¯Êý£¨ÀýÈ磬OS_Delay()¡¢OS_EventWait()¡¢OS_TaskSuspend()µÈ£©&sup2;¢ÍËÈÃCPUʱ£» µ±Ä³¸öÖжϷþÎñ³ÌÐò(ISR)ÔÚ&sup1;Ø&frac14;üÈÎÎñÖ´ÐÐÆÚ&frac14;äÖ´ÐУ¨&frac14;´ÖжÏÓÅÏÈ&frac14;¶¸ßÓÚ&sup1;Ø&frac14;üÈÎÎñµÄÓÅÏÈ&frac14;¶£©¡£ */ //¿ªÊ&frac14;ÈÎÎñ£¬´´&frac12;¨ÍêÈÎÎñ¶þºÍÈÎÎñÈý¾Íɾ³ý×Ô&frac14;º //ÈÎÎñÓÅÏÈ&frac14;¶ #define START_TASK_PRIO 3 //ÈÎÎñ¶ÑÕ»´óС #define START_STK_SIZE 128 //ÈÎÎñ¿ØÖÆ¿é OS_TCB StartTaskTCB; //ÈÎÎñ¶ÑÕ» CPU_STK START_TASK_STK[START_STK_SIZE]; //ÈÎÎñº¯Êý void start_task(void *p_arg); ///ÈÎÎñ¶þÁÁµÆ£¬&sup2;¢´òÓ¡³öÐÅÏ¢ //ÈÎÎñÓÅÏÈ&frac14;¶ #define TASK1_TASK_PRIO 4 //ÈÎÎñ¶ÑÕ»´óС #define TASK1_STK_SIZE 128 //ÈÎÎñ¿ØÖÆ¿é OS_TCB Task1_TaskTCB; //ÈÎÎñ¶ÑÕ» CPU_STK TASK1_TASK_STK[TASK1_STK_SIZE]; void task1_task(void *p_arg); ///ÈÎÎñÈý£¬´òÓ¡ÈÎÎñÈýÖ´ÐÐÐÅÏ¢ //ÈÎÎñÓÅÏÈ&frac14;¶ #define TASK2_TASK_PRIO 5 //ÈÎÎñ¶ÑÕ»´óС #define TASK2_STK_SIZE 128 //ÈÎÎñ¿ØÖÆ¿é OS_TCB Task2_TaskTCB; //ÈÎÎñ¶ÑÕ» CPU_STK TASK2_TASK_STK[TASK2_STK_SIZE]; //ÈÎÎñº¯Êý void task2_task(void *p_arg); volatile u8 key_pressed = 0; volatile u8 current_task = 1; void KEY_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // ???? GPIO_Init(GPIOA, &GPIO_InitStructure); } void Key_Scan(void) { static u8 key_up = 1; if (key_up && GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) { delay_ms(20); // ?? if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) { key_up = 0; key_pressed = 1; // ?????? } } else if (!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) { key_up = 1; } } //Ö÷º¯Êý int main(void) { OS_ERR err; CPU_SR_ALLOC(); SystemInit();//ÓÉÓÚ±¾&sup1;¤³ÌÊÇÓÉstm32f103zet6ÒÆÖ&sup2;ËùÀ´£¬Òò´ËÕâÀïÒò&frac14;ÓÈë±¾º¯ÊýÈ·±£delayº¯ÊýÕý³£Ê&sup1;Óà delay_init(); //ʱÖÓ³õÊ&frac14;»¯ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÖжϷÖ×éÅäÖà uart_init(115200); //´®¿Ú³õÊ&frac14;»¯ LED_Init(); KEY_Init(); // ??????? OSInit(&err); //³õÊ&frac14;»¯UCOSIII OS_CRITICAL_ENTER(); //&frac12;øÈëÁÙ&frac12;çÇø //´´&frac12;¨¿ªÊ&frac14;ÈÎÎñ OSTaskCreate((OS_TCB * )&StartTaskTCB, //ÈÎÎñ¿ØÖÆ¿é (CPU_CHAR * )"start task", //ÈÎÎñÃû×Ö (OS_TASK_PTR )start_task, //ÈÎÎñº¯Êý (void * )0, //´«µÝ¸øÈÎÎñº¯ÊýµÄ&sup2;ÎÊý (OS_PRIO )START_TASK_PRIO, //ÈÎÎñÓÅÏÈ&frac14;¶ (CPU_STK * )&START_TASK_STK[0], //ÈÎÎñ¶ÑÕ»»ùµØÖ· (CPU_STK_SIZE)START_STK_SIZE/10, //ÈÎÎñ¶ÑÕ»Éî¶ÈÏÞλ (CPU_STK_SIZE)START_STK_SIZE, //ÈÎÎñ¶ÑÕ»´óС (OS_MSG_QTY )0, //ÈÎÎñÄÚ&sup2;¿ÏûÏ¢¶ÓÁÐÄÜ&sup1;»&frac12;ÓÊÕµÄ×î´óÏûÏ¢ÊýÄ¿,Ϊ0ʱ&frac12;ûÖ&sup1;&frac12;ÓÊÕÏûÏ¢ (OS_TICK )0, //µ±Ê&sup1;ÄÜʱ&frac14;䯬ÂÖתʱµÄʱ&frac14;䯬³¤¶È£¬Îª0ʱΪĬÈϳ¤¶È£¬ (void * )0, //Óû§&sup2;&sup1;³äµÄ´æ´¢Çø (OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //ÈÎÎñÑ¡Ïî (OS_ERR * )&err); //´æ·Å¸Ãº¯Êý´íÎóʱµÄ·µ»ØÖµ OS_CRITICAL_EXIT(); //Í˳öÁÙ&frac12;çÇø OSStart(&err); //¿ªÆôUCOSIII } //¿ªÊ&frac14;ÈÎÎñÈÎÎñº¯Êý void start_task(void *p_arg) { OS_ERR err; CPU_SR_ALLOC(); p_arg = p_arg; CPU_Init(); #if OS_CFG_STAT_TASK_EN > 0u OSStatTaskCPUUsageInit(&err); //ͳ&frac14;ÆÈÎÎñ #endif #ifdef CPU_CFG_INT_DIS_MEAS_EN //Èç&sup1;ûÊ&sup1;ÄÜÁË&sup2;âÁ¿ÖжÏ&sup1;رÕʱ&frac14;ä CPU_IntDisMeasMaxCurReset(); #endif #if OS_CFG_SCHED_ROUND_ROBIN_EN //µ±Ê&sup1;ÓÃʱ&frac14;䯬ÂÖתµÄʱºò //Ê&sup1;ÄÜʱ&frac14;䯬ÂÖתµ÷¶È&sup1;¦ÄÜ,ʱ&frac14;䯬³¤¶ÈΪ1¸öϵͳʱÖÓ&frac12;ÚÅÄ£¬&frac14;È1*5=5ms OSSchedRoundRobinCfg(DEF_ENABLED,1,&err); #endif OS_CRITICAL_ENTER(); //&frac12;øÈëÁÙ&frac12;çÇø //´´&frac12;¨TASK1ÈÎÎñ OSTaskCreate((OS_TCB * )&Task1_TaskTCB, (CPU_CHAR * )"Task1 task", (OS_TASK_PTR )task1_task, (void * )0, (OS_PRIO )TASK1_TASK_PRIO, (CPU_STK * )&TASK1_TASK_STK[0], (CPU_STK_SIZE)TASK1_STK_SIZE/10, (CPU_STK_SIZE)TASK1_STK_SIZE, (OS_MSG_QTY )0, (OS_TICK )0, (void * )0, (OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, (OS_ERR * )&err); //´´&frac12;¨TASK2ÈÎÎñ OSTaskCreate((OS_TCB * )&Task2_TaskTCB, (CPU_CHAR * )"task2 task", (OS_TASK_PTR )task2_task, (void * )0, (OS_PRIO )TASK2_TASK_PRIO, (CPU_STK * )&TASK2_TASK_STK[0], (CPU_STK_SIZE)TASK2_STK_SIZE/10, (CPU_STK_SIZE)TASK2_STK_SIZE, (OS_MSG_QTY )0, (OS_TICK )0, (void * )0, (OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, (OS_ERR * )&err); OS_CRITICAL_EXIT(); //Í˳öÁÙ&frac12;çÇø OSTaskDel((OS_TCB*)0,&err); //ɾ³ýstart_taskÈÎÎñ×ÔÉí } // ??1:??PB0(LED0) void task1_task(void *p_arg) { OS_ERR err; while (1) { Key_Scan(); if (key_pressed) { current_task = 2; // ?????2 key_pressed = 0; printf("Switch to Task2\n"); } else { // LED0?? GPIO_SetBits(GPIOB, GPIO_Pin_0); // LED0? OSTimeDlyHMSM(0, 0, 0, 5000, OS_OPT_TIME_HMSM_STRICT, &err); // 500ms GPIO_ResetBits(GPIOB, GPIO_Pin_0); // LED0? OSTimeDlyHMSM(0, 0, 0, 5000, OS_OPT_TIME_HMSM_STRICT, &err); // 500ms } } } void task2_task(void *p_arg) { OS_ERR err; while (1) { Key_Scan(); if (key_pressed) { current_task = 1; // ?????1 key_pressed = 0; printf("Switch back to Task1\n"); } else { // ????2??? // ??:LED1?? GPIO_SetBits(GPIOB, GPIO_Pin_1); // LED1? OSTimeDlyHMSM(0, 0, 0, 5000, OS_OPT_TIME_HMSM_STRICT, &err); // 500ms GPIO_ResetBits(GPIOB, GPIO_Pin_1); // LED1? OSTimeDlyHMSM(0, 0, 0, 5000, OS_OPT_TIME_HMSM_STRICT, &err); // 500ms } } }我现在需要刚开始时B0(任务一)LED闪烁,当按下按键后(A0)给予信息量,使得代码进入(任务二),再次摁下按键,两个任务均不执行
06-06
////////////////////////////////////////////////////////////////////////////////// //±¾³ÌÐòÖ»&sup1;©Ñ§Ï°Ê&sup1;Óã¬Î´¾­×÷ÕßÐí¿É£¬&sup2;»µÃÓÃÓÚÆäËüÈκÎÓÃ; //ÐÀÞ±µç×Ó // // ÎÄ &frac14;þ Ãû :yanwu.c // °æ ±¾ ºÅ : v1.0 // ×÷ Õß : ÐÀÞ±µç×Ó // Éú³ÉÈÕÆÚ : 20200101 // ×î&frac12;üÐÞ¸Ä : // &sup1;¦ÄÜÃèÊö :Ö÷º¯Êý // ÐÞ¸ÄÀúÊ· : // ÈÕ ÆÚ : // ×÷ Õß : ÐÀÞ±µç×Ó // ÐÞ¸ÄÄÚÈÝ : ´´&frac12;¨ÎÄ&frac14;þ //°æÈ¨ËùÓУ¬µÁ°æ±Ø¾¿¡£ //Copyright(C) ÐÀÞ±µç×Ó2020/3/16 //All rights reserved //******************************************************************************/. //³ÌÐòÍ·º¯Êý #include <reg52.h> #include <intrins.h> //°üº¬Í·ÎÄ&frac14;þ //ÏÔʾº¯Êý #include <display.h> //ºê¶¨Òå #define uint unsigned int #define uchar unsigned char //&sup1;Ü&frac12;ÅÉùÃ÷ sbit LED_R= P2^2;//ºìµÆ sbit LED_G= P2^0;//ÂÌµÆ sbit FENG = P2^5;//·äÃùÆ÷ //sbit san=P3^4; //·çÉÈ¿ØÖÆ£¨Ñ¡Å䣩 sbit CS = P1^4; sbit Clk = P1^2; sbit DATI = P1^3; sbit DATO = P1^3; //ADC0832Òý&frac12;Å //°´&frac14;ü sbit Key1=P2^6; //ÉèÖÃ&frac14;ü sbit Key2=P2^7; //&frac14;Ó°´&frac14;ü sbit Key3=P3^7; //&frac14;õ°´&frac14;ü bit bdata flag; //±¨¾¯±ê־λ uchar set; //ÉèÖÃ״̬ /*******************************¶¨ÒåÈ«¾Ö±äÁ¿********************************/ unsigned char dat = 0; //ADÖµ unsigned char CH=0; //ͨµÀ±äÁ¿ unsigned int sum=0; //Æ&frac12;¾ùÖµ&frac14;ÆËãʱµÄ×ÜÊý unsigned char m=0; //º¯ÊýÉùÃ÷ extern uchar ADC0809(); extern void Key(); //¾Æ¾«º¬Á¿±äÁ¿ uchar temp=0; uchar WARNING=25; //±¨¾¯Öµ /**************************************************************************** º¯Êý&sup1;¦ÄÜ:ADת»»×Ó³ÌÐò Èë¿Ú&sup2;ÎÊý:CH ³ö¿Ú&sup2;ÎÊý:dat ****************************************************************************/ unsigned char adc0832(unsigned char CH) { unsigned char i,test,adval; adval = 0x00; test = 0x00; Clk = 0; //³õÊ&frac14;»¯ DATI = 1; _nop_(); CS = 0; _nop_(); Clk = 1; _nop_(); if ( CH == 0x00 ) //ͨµÀÑ¡Ôñ { Clk = 0; DATI = 1; //ͨµÀ0µÄµÚһλ _nop_(); Clk = 1; _nop_(); Clk = 0; DATI = 0; //ͨµÀ0µÄµÚ¶þλ _nop_(); Clk = 1; _nop_(); } else { Clk = 0; DATI = 1; //ͨµÀ1µÄµÚһλ _nop_(); Clk = 1; _nop_(); Clk = 0; DATI = 1; //ͨµÀ1µÄµÚ¶þλ _nop_(); Clk = 1; _nop_(); } Clk = 0; DATI = 1; for( i = 0;i < 8;i++ ) //¶Áȡǰ8λµÄÖµ { _nop_(); adval <<= 1; Clk = 1; _nop_(); Clk = 0; if (DATO) adval |= 0x01; else adval |= 0x00; } for (i = 0; i < 8; i++) //¶ÁÈ¡ºó8λµÄÖµ { test >>= 1; if (DATO) test |= 0x80; else test |= 0x00; _nop_(); Clk = 1; _nop_(); Clk = 0; } if (adval == test) //±È&frac12;Ïǰ8λÓëºó8λµÄÖµ£¬Èç&sup1;û&sup2;»ÏàͬÉáÈ¥¡£ÈôÒ»Ö±³öÏÖÏÔʾΪÁ㣬Çë&frac12;«¸ÃÐÐÈ¥µô dat = test; nop_(); CS = 1; //ÊÍ·ÅADC0832 DATO = 1; Clk = 1; return dat; } void init() //³õÊ&frac14;»¯º¯Êý { TMOD=0x01; //&sup1;¤×÷·&frac12;Ê&frac12; TL0=0xb0; TH0=0x3c; //¸³³õÖµ£¨12MHz¾§ÕñµÄ50ms£© EA=1; //´ò¿ªÖжÏ×Ü¿ª&sup1;Ø ET0=1; //´ò¿ªÖжÏÔÊÐí¿ª&sup1;Ø TR0=1; //´ò¿ª¶¨Ê±Æ÷¿ª&sup1;Ø } void main() //Ö÷º¯Êý { Init1602();//³õÊ&frac14;»¯ÏÔʾ init(); //³õÊ&frac14;»¯¶¨Ê±Æ÷ while(1) //&frac12;øÈëÑ­»· { for(m=0;m<50;m++) //¶Á50´ÎADÖµ sum = adc0832(0)+sum; //¶Áµ&frac12;µÄADÖµ£¬&frac12;«¶Áµ&frac12;µÄÊý¾ÝÀÛ&frac14;Óµ&frac12;sum temp=sum/50; //Ìø³öÉÏÃæµÄforÑ­»·ºó£¬&frac12;«ÀÛ&frac14;ÓµÄ×ÜÊý³ýÒÔ50µÃµ&frac12;Æ&frac12;¾ùÖµtemp sum=0; //Æ&frac12;¾ùÖµ&frac14;ÆËãÍê³Éºó£¬&frac12;«×ÜÊýÇåÁã if(set==0) //Ö»ÓÐÔÚ·ÇÉèÖÃ״̬ʱ£¬ Display_1602(temp,WARNING); //&sup2;ÅË¢ÐÂÏÔʾʵʱŨ¶ÈÖµ if(temp<WARNING&&set==0) //·ÇÉèÖÃʱµ±Å¨¶ÈֵСÓÚ±¨¾¯ÖµÊ± { flag=0; //±¨¾¯±ê־λÖÃ0£¬&sup2;»±¨¾¯ } else if(temp>WARNING&&set==0) //·ÇÉèÖÃʱµ±Å¨¶ÈÖµ´óÓÚ±¨¾¯ÖµÊ± { flag=1; //±¨¾¯±ê־λÖÃ1 } Key(); //ɨÃè°´&frac14;ü } } void Key() //°´&frac14;üº¯Êý { if(Key1==0) //ÉèÖÃ&frac14;ü°´ÏÂʱ { while(Key1==0); //&frac14;ì&sup2;â°´&frac14;üÊÇ·ñÊÍ·Å FENG=0; //·äÃùÆ÷Ïì set++; //ÉèÖÃ״̬±êÖ¾&frac14;Ó flag=0; //Í£Ö&sup1;±¨¾¯ // san=1; //·çÉÈÍ£Ö&sup1;ת¶¯£¨Ñ¡Å䣩 TR0=0; //¶¨Ê±Æ÷Í£Ö&sup1; } if(set==1) //ÉèÖÃʱ { write_com(0x38);//ÆÁÄ»³õÊ&frac14;»¯ write_com(0x80+0x40+13);//Ñ¡Öб¨¾¯ÖµµÄλÖà write_com(0x0f);//´ò¿ªÏÔʾ ÎÞ&sup1;â±ê &sup1;â±êÉÁ˸ write_com(0x06);//µ±¶Á»òдһ¸ö×Ö·ûÊÇÖ¸Õëºóһһλ FENG=1; //·äÃùÆ÷Í£Ö&sup1;ÃùÏì } else if(set>=2) //ÔÙ°´Ò»ÏÂÉèÖÃ&frac14;üʱ£¬Í˳öÉèÖà { set=0; //ÉèÖÃ״̬ÇåÁã write_com(0x38);//ÆÁÄ»³õÊ&frac14;»¯ write_com(0x0c);//´ò¿ªÏÔʾ ÎÞ&sup1;â±ê ÎÞ&sup1;â±êÉÁ˸ FENG=1; //·äÃùÆ÷Í£Ö&sup1;Ïì flag=1; //±¨¾¯±ê־λÖÃ1 TR0=1; //¶¨Ê±Æ÷¿ªÊ&frac14;&frac14;ÆÊ± } if(Key2==0&&set!=0) //µ±ÔÚÉèÖÃ״̬ʱ£¬°´ÏÂ&frac14;Ó&frac14;üʱ { while(Key2==0); //°´&frac14;üÊÍ·Å FENG=0; //·äÃùÆ÷ÃùÏì WARNING++; //±¨¾¯ãÐÖµ&frac14;Ó if(WARNING>=255)//ãÐÖµ×î´ó&frac14;Óµ&frac12;255 WARNING=0; //ÇåÁã write_com(0x80+0x40+11); //ÔÚãÐÖµµÄλÖÃдÈëÉèÖõÄÊý¾Ý write_data('0'+WARNING/100); //ÏÔʾ°Ù루&frac12123³ýÒÔ100µÃµ&frac12;µÄÉÌÊÇ1£¬¾ÍÊǰÙλÊý¾Ý£©123ΪÀý×Ó write_data('0'+WARNING/10%10);//ÏÔʾʮ루&frac12123³ýÒÔ10µÃµ&frac12;ÉÌÊÇ12£¬&frac1212³ýÒÔ10µÄÓàÊý¾ÍÊÇʮ룩 write_data('0'+WARNING%10); //ÏÔʾ¸ö루&frac12123³ýÒÔ10µÄÓàÊý3¾ÍÊǸöλÊý¾Ý£©123ΪÀý×Ó write_com(0x80+0x40+13);//λÖà FENG=1;//·äÃùÆ÷Í£Ö&sup1; } if(Key3==0&&set!=0) //&frac14;õ°´&frac14;ü×¢ÊÍ&sup2;ο&frac14;&frac14;Ó°´&frac14;ü&sup2;¿·Ö { while(Key3==0); FENG=0; WARNING--; if(WARNING<=0) WARNING=255; write_com(0x80+0x40+11); write_data('0'+WARNING/100); write_data('0'+WARNING/10%10); write_data('0'+WARNING%10); write_com(0x80+0x40+13);//λÖà FENG=1; } } void time1_int(void) interrupt 1 //¶¨Ê±Æ÷º¯Êý { uchar count; TL0=0xb0; TH0=0x3c; //ÖØÐ¸³³õÖµ count++; //&frac14;ÆÊ±±äÁ¿&frac14;Ó if(count==10)//¶¨Ê±Æ÷¶¨Ê±ÊÇ50ms£¬´Ë´¦&frac14;ÆÊý10´Î£¬ÕýºÃÊÇ500ms£¬ÓÃÓÚ±¨¾¯Ê± µÆÁÁºÍ·äÃùÆ÷Ïì { if(flag==0) //±¨¾¯±ê־Ϊ0ʱ { LED_G=0; //Â̵ÆÁÁ LED_R=1; //ºìµÆÃð FENG=1; //·äÃùÆ÷&sup2;»Ïì // san=1; //·çÉÈ&sup2;»×ª£¨Ñ¡Å䣩 } if(flag==1) //±¨¾¯±ê־λΪ1ʱ { LED_G=1; //Â̵ÆÃð LED_R=0; //ºìµÆÁÁ FENG=0; //·äÃùÆ÷Ïì // san=0; //·çÉÈת¶¯£¨Ñ¡Å䣩 } } if(count==20) //&frac14;ÆÊýµ&frac12;20ʱ£¬ÕýºÃÊÇ1000ms£¬¾ÍÊÇ1s£¬ÕâÀï¾ÍÊÇÈõÆÃ𣬷äÃùÆ÷&sup2;»Ï죬´Ó¶ø×ö³öÉÁ˸µÄЧ&sup1;û { count=0; //&frac14;Ƶ&frac12;1sʱ£¬&frac12;«countÇåÁ㣬×&frac14;±¸ÖØÐÂ&frac14;ÆÊý if(flag==0) { LED_G=1; LED_R=1; FENG=1; // san=1; //È«&sup2;¿&sup1;Ø±Õ } if(flag==1) { LED_G=1; LED_R=1; FENG=1; // san=0; //±¨¾¯Öµ£¬·çÉÈÊÇһֱת¶¯µÄ£¨Ñ¡Å䣩 } } } 修改为下限报警
07-05
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值