ALEXAÕ¾³¤È«¹¥ÂÔ

本文介绍了一个名为ALEXA的搜索引擎,该搜索引擎提供分类目录式的网站导航服务。不同于专门做网站流量排名的站点,ALEXA更专注于提供搜索服务。
д´ËÎÄ֮ǰ±¾ÄâÔÚ¡°ALEXA¡±Ç°¼ÓÒ»¸ö¡°ÍøÕ¾Á÷Á¿ÊÀ½çÅÅÃû¡±£¬¿Éת¶øÒ»ÏëALEXAÖ÷ÓªÒµÎñ¼°Ä¿Ç°µÄ¹¦ÄÜÒ²²»Ò»¸öר×öÍøÕ¾Á÷Á¿ÅÅÃûµÄÍøÕ¾£¬¸üÈ·ÇеÄ˵ËüÊÇÒ»¸öÌṩËÑË÷µÄÍøÕ¾£¬Ìṩ·ÖÀർº½µÄÍøÕ¾¡£²»¹ýÔÚÖйú£¬´ó ...
#include "sys.h" #include "delay.h" #include "usart.h" #include "includes.h" #include "led.h" /************************************************ ALIENTEK ¾«Ó¢°æSTM32¿ª·¢°åUCOSʵÑé Àý6-1 UCOSIII ÈÎÎñ´´½¨ÓÚɾ³ý ¼¼ÊõÖ§³Ö£ºwww.openedv.com ÌÔ±¦µêÆÌ£ºhttp://eboard.taobao.com ¹Ø×¢Î¢ÐŹ«ÖÚÆ½Ì¨Î¢Ðźţº"ÕýµãÔ­×Ó"£¬Ãâ·Ñ»ñÈ¡STM32×ÊÁÏ¡£ ¹ãÖÝÊÐÐÇÒíµç×ӿƼ¼ÓÐÏÞ¹«Ë¾ ×÷ÕߣºÕýµãÔ­×Ó @ALIENTEK ************************************************/ //UCOSIIIÖÐÒÔÏÂÓÅÏȼ¶Óû§³ÌÐò²»ÄÜʹÓã¬ALIENTEK //½«ÕâЩÓÅÏȼ¶·ÖÅ䏸ÁËUCOSIIIµÄ5¸öϵͳÄÚ²¿ÈÎÎñ //ÓÅÏȼ¶0£ºÖжϷþÎñ·þÎñ¹ÜÀíÈÎÎñ OS_IntQTask() //ÓÅÏȼ¶1£ºÊ±ÖÓ½ÚÅÄÈÎÎñ OS_TickTask() //ÓÅÏȼ¶2£º¶¨Ê±ÈÎÎñ OS_TmrTask() //ÓÅÏȼ¶OS_CFG_PRIO_MAX-2£ºÍ³¼ÆÈÎÎñ OS_StatTask() //ÓÅÏȼ¶OS_CFG_PRIO_MAX-1£º¿ÕÏÐÈÎÎñ OS_IdleTask() /* ΪÁËʵÏÖÁÙ½çÇøµÄ±£»¤£¬UCOSIIIÌṩÁËÁ½¸öºê£ºOS_CRITICAL_ENTER() ºÍOS_CRITICAL_EXIT()¡£ µ±Ò»¸öÈÎÎñ»òÖжϽøÈëÁÙ½çÇøÊ±£¬Ëü±ØÐëµ÷ÓÃOS_CRITICAL_ENTER()ºêÒÔ»ñµÃÁÙ½çÇøµÄ±£»¤¡£ Õâ¸öºê½«½ûÓÃÖжϣ¬ÒÔÈ·±£Ö´ÐÐÁÙ½çÇøµÄ´úÂë²»»á±»ÖжϻòÇÀÕ¼£¬´Ó¶ø±£Ö¤ÁËÁÙ½çÇøµÄÔ­×ÓÐÔ¡£ µ±´úÂëÖ´ÐÐÍê±Ïʱ£¬ÈÎÎñ»òÖжϱØÐëµ÷ÓÃOS_CRITICAL_EXIT()ºêÀ´»Ö¸´Öжϣ¬ÒÔ±ãÆäËûÈÎÎñºÍÖжϿÉÒÔ·ÃÎʹ²Ïí×ÊÔ´²¢Ö´ÐÐËüÃǵĴúÂë¡£ ʹÓÃOS_CRITICAL_ENTER()ºÍOS_CRITICAL_EXIT()ºêÀ´±£»¤ÁÙ½çÇø£¬ ÄÇôÔÚÈÎÎñT1Ö´ÐеÄÕû¸öʱ¼äÄÚ£¬ÖжϽ«±»½ûÓ㬠ÆäËûÈÎÎñ½«²»ÄÜ·ÃÎʹ²Ïí×ÊÔ´²¢ÇÒÁÙ½çÇøµÄ´úÂ뽫ÒÔÔ­×Ó·½Ê½Ö´ÐÐÍê±Ï¡£ ÕâÑù¿ÉÒÔÈ·±£ÁÙ½çÇø´úÂëµÄÕýÈ·ÐÔ£¬±ÜÃ⾺ÕùÌõ¼þºÍÆäËûͬ²½ÎÊÌâ¡£ */ /* ÔÚUCOS IIIÖУ¬ÈÎÎñµÄÖ´ÐÐ˳ÐòÊÇ»ùÓÚÓÅÏȼ¶µ÷¶ÈËã·¨¡£ ÿ¸öÈÎÎñ¶¼ÓÐÒ»¸öÓÅÏȼ¶£¨0µ½255£©£¬¾ßÓиü¸ßÓÅÏȼ¶µÄÈÎÎñ±ÈµÍÓÅÏȼ¶µÄÈÎÎñ¸ü¿ÉÄܵõ½µ÷¶È¡£ UCOS IIIʹÓÃÇÀռʽµ÷¶È£¬ÕâÒâζ×ŵ±ÓÐÒ»¸ö¸ßÓÅÏȼ¶µÄÈÎÎñ¾ÍÐ÷ʱ£¬µ±Ç°ÕýÔÚÖ´ÐеÄÈÎÎñ½«±»Öжϲ¢ÇÒ¸ßÓÅÏȼ¶ÈÎÎñ½«±»Ö´ÐС£ ÕâÈ·±£Á˾ßÓиü¸ßÓÅÏȼ¶µÄÈÎÎñ¿ÉÒÔ¼°Ê±»ñµÃÖ´ÐУ¬±ÜÃⳤʱ¼ä±»µÍÓÅÏȼ¶ÈÎÎñÕ¼Óô¦ÀíÆ÷µÄÇé¿ö·¢Éú¡£ UCOS IIIÈÎÎñµÄÖ´ÐÐÊÇͨ¹ýÉÏÏÂÎÄÇл»ÊµÏֵġ£ ÉÏÏÂÎÄÇл»ÊÇÖ¸½«´¦ÀíÆ÷µÄ״̬´ÓÒ»¸öÈÎÎñ±£´æµ½Äڴ棬Ȼºó½«ÁíÒ»¸öÈÎÎñµÄ×´Ì¬×°ÔØµ½´¦ÀíÆ÷ÖУ¬ÒÔÔÚ²»¼ä¶ÏµÄÇé¿öÏÂת»»ÈÎÎñÖ´ÐС£ µ±Ò»¸öÈÎÎñÐèÒª±»ÖÐֹʱ£¬¼´Ö´ÐÐOS_TaskSuspend()º¯Êýʱ£¬UCOS III´¦ÀíÆ÷»áÖ´ÐÐÒ»¸öÈÎÎñÇл»Öжϲ¢½«¿ØÖÆÈ¨×ªÒƵ½ÁíÒ»¸öÈÎÎñ¡£ ÈÎÎñÇл»Í¨³£·¢ÉúÔÚÒÔÏÂÇé¿öÏ£º µ±ÈÎÎñÖ÷¶¯µ÷ÓÃÁËÈÎÎñ¿ØÖƺ¯Êý£¨ÀýÈ磬OS_Delay()¡¢OS_EventWait()¡¢OS_TaskSuspend()µÈ£©²¢ÍËÈÃCPUʱ£» µ±Ä³¸öÖжϷþÎñ³ÌÐò(ISR)ÔڹؼüÈÎÎñÖ´ÐÐÆÚ¼äÖ´ÐУ¨¼´ÖжÏÓÅÏȼ¶¸ßÓڹؼüÈÎÎñµÄÓÅÏȼ¶£©¡£ */ //¿ªÊ¼ÈÎÎñ£¬´´½¨ÍêÈÎÎñ¶þºÍÈÎÎñÈý¾Íɾ³ý×Ô¼º //ÈÎÎñÓÅÏȼ¶ #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); ///ÈÎÎñ¶þÁÁµÆ£¬²¢´òÓ¡³öÐÅÏ¢ //ÈÎÎñÓÅÏȼ¶ #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); ///ÈÎÎñÈý£¬´òÓ¡ÈÎÎñÈýÖ´ÐÐÐÅÏ¢ //ÈÎÎñÓÅÏȼ¶ #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();//ÓÉÓÚ±¾¹¤³ÌÊÇÓÉstm32f103zet6ÒÆÖ²ËùÀ´£¬Òò´ËÕâÀïÒò¼ÓÈë±¾º¯ÊýÈ·±£delayº¯ÊýÕý³£Ê¹Óà delay_init(); //ʱÖÓ³õʼ»¯ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÖжϷÖ×éÅäÖà uart_init(115200); //´®¿Ú³õʼ»¯ LED_Init(); KEY_Init(); // ??????? OSInit(&err); //³õʼ»¯UCOSIII OS_CRITICAL_ENTER(); //½øÈëÁÙ½çÇø //´´½¨¿ªÊ¼ÈÎÎñ OSTaskCreate((OS_TCB * )&StartTaskTCB, //ÈÎÎñ¿ØÖÆ¿é (CPU_CHAR * )"start task", //ÈÎÎñÃû×Ö (OS_TASK_PTR )start_task, //ÈÎÎñº¯Êý (void * )0, //´«µÝ¸øÈÎÎñº¯ÊýµÄ²ÎÊý (OS_PRIO )START_TASK_PRIO, //ÈÎÎñÓÅÏȼ¶ (CPU_STK * )&START_TASK_STK[0], //ÈÎÎñ¶ÑÕ»»ùµØÖ· (CPU_STK_SIZE)START_STK_SIZE/10, //ÈÎÎñ¶ÑÕ»Éî¶ÈÏÞλ (CPU_STK_SIZE)START_STK_SIZE, //ÈÎÎñ¶ÑÕ»´óС (OS_MSG_QTY )0, //ÈÎÎñÄÚ²¿ÏûÏ¢¶ÓÁÐÄܹ»½ÓÊÕµÄ×î´óÏûÏ¢ÊýÄ¿,Ϊ0ʱ½ûÖ¹½ÓÊÕÏûÏ¢ (OS_TICK )0, //µ±Ê¹ÄÜʱ¼äƬÂÖתʱµÄʱ¼äƬ³¤¶È£¬Îª0ʱΪĬÈϳ¤¶È£¬ (void * )0, //Óû§²¹³äµÄ´æ´¢Çø (OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //ÈÎÎñÑ¡Ïî (OS_ERR * )&err); //´æ·Å¸Ãº¯Êý´íÎóʱµÄ·µ»ØÖµ OS_CRITICAL_EXIT(); //Í˳öÁÙ½çÇø OSStart(&err); //¿ªÆôUCOSIII } //¿ªÊ¼ÈÎÎñÈÎÎñº¯Êý 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); //ͳ¼ÆÈÎÎñ #endif #ifdef CPU_CFG_INT_DIS_MEAS_EN //Èç¹ûʹÄÜÁ˲âÁ¿ÖжϹرÕʱ¼ä CPU_IntDisMeasMaxCurReset(); #endif #if OS_CFG_SCHED_ROUND_ROBIN_EN //µ±Ê¹ÓÃʱ¼äƬÂÖתµÄʱºò //ʹÄÜʱ¼äƬÂÖתµ÷¶È¹¦ÄÜ,ʱ¼äƬ³¤¶ÈΪ1¸öϵͳʱÖÓ½ÚÅÄ£¬¼È1*5=5ms OSSchedRoundRobinCfg(DEF_ENABLED,1,&err); #endif OS_CRITICAL_ENTER(); //½øÈëÁÙ½çÇø //´´½¨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); //´´½¨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(); //Í˳öÁÙ½çÇø 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
#include "delay.h" #if SYSTEM_SUPPORT_OS #include "includes.h" //ucos ʹÓà #endif static u8 fac_us=0; //usÑÓʱ±¶³ËÊý static u16 fac_ms=0; //msÑÓʱ±¶³ËÊý,ÔÚucosÏÂ,´ú±íÿ¸ö½ÚÅĵÄmsÊý #if SYSTEM_SUPPORT_OS //Èç¹ûSYSTEM_SUPPORT_OS¶¨ÒåÁË,˵Ã÷ÒªÖ§³ÖOSÁË(²»ÏÞÓÚUCOS). //µ±delay_us/delay_msÐèÒªÖ§³ÖOSµÄʱºòÐèÒªÈý¸öÓëOSÏà¹ØµÄºê¶¨ÒåºÍº¯ÊýÀ´Ö§³Ö //Ê×ÏÈÊÇ3¸öºê¶¨Òå: // delay_osrunning:ÓÃÓÚ±íʾOSµ±Ç°ÊÇ·ñÕýÔÚÔËÐÐ,ÒÔ¾ö¶¨ÊÇ·ñ¿ÉÒÔʹÓÃÏà¹Øº¯Êý //delay_ostickspersec:ÓÃÓÚ±íʾOSÉ趨µÄʱÖÓ½ÚÅÄ,delay_init½«¸ù¾ÝÕâ¸ö²ÎÊýÀ´³õʼ¹þsystick // delay_osintnesting:ÓÃÓÚ±íʾOSÖжÏǶÌ×¼¶±ð,ÒòΪÖжÏÀïÃæ²»¿ÉÒÔµ÷¶È,delay_msʹÓøòÎÊýÀ´¾ö¶¨ÈçºÎÔËÐÐ //È»ºóÊÇ3¸öº¯Êý: // delay_osschedlock:ÓÃÓÚËø¶¨OSÈÎÎñµ÷¶È,½ûÖ¹µ÷¶È //delay_osschedunlock:ÓÃÓÚ½âËøOSÈÎÎñµ÷¶È,ÖØÐ¿ªÆôµ÷¶È // delay_ostimedly:ÓÃÓÚOSÑÓʱ,¿ÉÒÔÒýÆðÈÎÎñµ÷¶È. //±¾Àý³Ì½ö×÷UCOSIIºÍUCOSIIIµÄÖ§³Ö,ÆäËûOS,Çë×ÔÐвο¼×ÅÒÆÖ² //Ö§³ÖUCOSII #ifdef OS_CRITICAL_METHOD //OS_CRITICAL_METHOD¶¨ÒåÁË,˵Ã÷ÒªÖ§³ÖUCOSII #define delay_osrun
04-12
#include "control.h" /************************************************************************** ×÷ÕߣºÆ&frac12;ºâС&sup3;µÖ®&frac14;Ò ÎÒµÄÌÔ±¦Ð¡µê£ºhttp://shop114407458.taobao.com/ **************************************************************************/ #define T 0.156f #define L 0.1445f #define K 311.4f u8 Flag_Target; int Voltage_Temp,Voltage_Count,Voltage_All,sum; /************************************************************************** º¯Êý&sup1;¦ÄÜ£ºÐ¡&sup3;µÔ˶¯ÊýѧģÐÍ Èë¿Ú²ÎÊý£ºËٶȺÍת&frac12;Ç ·µ»Ø Öµ£ºÎÞ **************************************************************************/ void Kinematic_Analysis(float velocity,float turn) { Target_A=(velocity+turn); Target_B=(velocity-turn); //ºóÂÖ²îËÙ } void SelfLocalization(void) //С&sup3;µ×Ô¶¨Î» { const double T_Sampling=0.005*2; //5ms*2 ²ÉÑùÖÜÆÚ const double Encoder_Round=390*4; //±àÂëÆ÷ÏßÊý*4±¶ÆµÏ¸·Ö const double R=0.032, B=0.155; //&sup3;µÂÖ°ë&frac34;¶£¬ÂÖ&frac34;࣬m //Ö±&frac12;Ó¿ÉÓõÄÈ«&frac34;Ö±äÁ¿ //extern int Encoder_Left,Encoder_Right; //×óÓÒ±àÂëÆ÷µÄÂö&sup3;å&frac14;ÆÊý //extern float X_me,Y_me,theta_me; //С&sup3;µÎ»ÖúÍ×Ë̬ //extern float V_me,W_me; //С&sup3;µÏßËٶȺÍ&frac12;ÇËÙ¶È-±àÂëÆ÷&sup1;À&frac14;ÆÖµ //²&sup1;È«ÈçÏ´úÂ룬&frac14;ÆËãС&sup3;µÏßËٶȺÍ&frac12;ÇËÙ¶È£¬ÒÔ&frac14;°Ð¡&sup3;µÎ»ÖúÍ×Ë̬ V_me=; W_me=?; X_me=?; Y_me=?; theta_me=; //&frac34;­&sup1;ý&frac14;ÆËãµÄ&frac12;ǶÈÒ»¶¨Òª&sup1;æÕûµ&frac12;(-PI, PI] theta_me=£¿; } void PathPlanning(void) //·&frac34;¶&sup1;æ»® { static int Flag_Start=0; double X_des=3, Y_des=2, Angle_des=0; //Ä¿±êλÖúÍ×Ë̬ const double Kd=20,Ka=-7,Kb=0; double ds,da; if(Flag_Stop==1) { Flag_Start=0; Velocity=0,Turn=0; } else Flag_Start++; if(Flag_Start<3*1000/10) return; //µÈ´ý3sºóʵÑé×Ô¶¯¿ªÊ&frac14; //¸ù&frac34;ÝÄ¿±êλÖ㨺Í×Ë̬£©£¬ÒÔ&frac14;°µ±Ç°»úÆ÷È˵ÄλÖúÍ×Ë̬£¬&sup1;æ»®&sup3;ö»úÆ÷ÈËÏÂһʱ¿ÌµÄÏßËٶȺÍ&frac12;ÇËÙ¶È //Ö±&frac12;Ó¿ÉÓõÄÈ«&frac34;Ö±äÁ¿ //extern float X_me,Y_me,theta_me; //С&sup3;µÎ»ÖúÍ×Ë̬ //extern float V_me,W_me; //С&sup3;µÏßËٶȺÍ&frac12;ÇËÙ¶È-±àÂëÆ÷&sup1;À&frac14;ÆÖµ //extern float Velocity,Turn; //VelocityΪҪ&sup1;æ»®&sup3;öµÄÏßËÙ¶È,TurnΪҪ&sup1;æ»®&sup3;öµÄ&frac12;ÇËÙ¶È£¨ÊÜÓ²&frac14;þʵÏÖµÄÒªÇó£¬TurnË&sup3;ʱÕëΪÕý£© //²&sup1;È«ÈçÏ´úÂë // Velocity=£¿;
03-25
#include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "lcd.h" #include "key.h" #include "sram.h" #include "malloc.h" #include "usmart.h" #include "sdio_sdcard.h" #include "malloc.h" #include "w25qxx.h" #include "ff.h" #include "exfuns.h" #include "fontupd.h" #include "text.h" #include "piclib.h" #include "string.h" #include "math.h" #include "dcmi.h" #include "ov2640.h" #include "beep.h" #include "timer.h" //ALIENTEK Ì&frac12;Ë÷ÕßSTM32F407¿ª·¢°å ʵÑé42 //ÕÕÏà»ú ʵÑé -¿âº¯Êý°æ±&frac34; //&frac14;&frac14;ÊõÖ§&sup3;Ö£ºwww.openedv.com //ÌÔ±¦µêÆÌ£ºhttp://eboard.taobao.com //&sup1;ãÖÝÊÐÐÇÒíµç×Ó¿Æ&frac14;&frac14;ÓÐÏÞ&sup1;«Ë&frac34; //×÷ÕߣºÕýµãÔ­×Ó @ALIENTEK u8 ov2640_mode=0; //&sup1;¤×÷Ä£Ê&frac12;:0,RGB565Ä£Ê&frac12;;1,JPEGÄ£Ê&frac12; #define jpeg_dma_bufsize 5*1024 //¶¨ÒåJPEG DMA&frac12;ÓÊÕʱÊý&frac34;Ý»º´æjpeg_buf0/1µÄ´óС(*4×Ö&frac12;Ú) volatile u32 jpeg_data_len=0; //bufÖеÄJPEGÓÐЧÊý&frac34;Ý&sup3;¤¶È(*4×Ö&frac12;Ú) volatile u8 jpeg_data_ok=0; //JPEGÊý&frac34;ݲÉ&frac14;¯Íê&sup3;ɱêÖ&frac34; //0,Êý&frac34;ÝûÓвÉ&frac14;¯Íê; //1,Êý&frac34;ݲÉ&frac14;¯ÍêÁË,µ«ÊÇ»&sup1;û´¦Àí; //2,Êý&frac34;ÝÒÑ&frac34;­´¦ÀíÍê&sup3;ÉÁË,¿ÉÒÔ¿ªÊ&frac14;ÏÂÒ»Ö¡&frac12;ÓÊÕ u32 *jpeg_buf0; //JPEGÊý&frac34;Ý»º´æbuf,ͨ&sup1;ýmallocÉêÇëÄÚ´æ u32 *jpeg_buf1; //JPEGÊý&frac34;Ý»º´æbuf,ͨ&sup1;ýmallocÉêÇëÄÚ´æ u32 *jpeg_data_buf; //JPEGÊý&frac34;Ý»º´æbuf,ͨ&sup1;ýmallocÉêÇëÄÚ´æ //´¦ÀíJPEGÊý&frac34;Ý //µ±²É&frac14;¯ÍêÒ»Ö¡JPEGÊý&frac34;ݺó,µ÷Óô˺¯Êý,Çл»JPEG BUF.¿ªÊ&frac14;ÏÂÒ»Ö¡²É&frac14;¯. void jpeg_data_process(void) { u16 i; u16 rlen;//Ê£ÓàÊý&frac34;Ý&sup3;¤¶È u32 *pbuf; if(ov2640_mode)//Ö»ÓÐÔÚJPEG¸ñÊ&frac12;ÏÂ,²ÅÐèÒª×ö´¦Àí. { if(jpeg_data_ok==0) //jpegÊý&frac34;Ý»&sup1;δ²É&frac14;¯Íê? { DMA_Cmd(DMA2_Stream1,DISABLE); //Í£Ö&sup1;µ±Ç°´«Êä while(DMA_GetCmdStatus(DMA2_Stream1) != DISABLE); //µÈ´ýDMA2_Stream1¿ÉÅäÖà rlen=jpeg_dma_bufsize-DMA_GetCurrDataCounter(DMA2_Stream1);//µÃµ&frac12;Ê£ÓàÊý&frac34;Ý&sup3;¤¶È pbuf=jpeg_data_buf+jpeg_data_len;//Æ«ÒÆµ&frac12;ÓÐЧÊý&frac34;Ýĩβ,&frac14;ÌÐøÌí&frac14;Ó if(DMA2_Stream1->CR&(1<<19))for(i=0;i<rlen;i++)pbuf[i]=jpeg_buf1[i];//¶ÁÈ¡buf1ÀïÃæµÄÊ£ÓàÊý&frac34;Ý else for(i=0;i<rlen;i++)pbuf[i]=jpeg_buf0[i];//¶ÁÈ¡buf0ÀïÃæµÄÊ£ÓàÊý&frac34;Ý jpeg_data_len+=rlen; //&frac14;ÓÉÏÊ£Óà&sup3;¤¶È jpeg_data
03-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值