野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15589|回复: 2

关于修改UCOS II2.86系统使用printf函数的问题

[复制链接]
发表于 2015-11-17 14:21:24 | 显示全部楼层 |阅读模式
实验条件:野火STM32F103VET6早期开发板
实验工程:01.STM32-M3\野火STM32-02、程序\4-库开发系统篇\第四部分-库开发系统篇\野火M3-uCOS-II\野火M3-uCOS-II\2-野火M3-uCOS-II+LED(多任务)滴答定时器和UCOS II 2.86配置:
串口配置函数:static void USART1_NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        /* Configure the NVIC Preemption Priority Bits */  
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
       
        /* Enable the USARTy Interrupt */
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;         
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}


void USART1_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
       
        /* config USART1 clock */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
       
        /* USART1 GPIO config */
        /* Configure USART1 Tx (PA.09) as alternate function push-pull */
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);   
        /* Configure USART1 Rx (PA.10) as input floating */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        /* USART1 mode config */
        USART_InitStructure.USART_BaudRate = 115200;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No ;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
        USART_Init(USART1, &USART_InitStructure);
       
        /* ê1Äü′®¿ú1½óêÕÖD¶Ï */
        USART1_NVIC_Configuration();
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
       
        USART_Cmd(USART1, ENABLE);
}

int fputc(int ch, FILE *f)
{
                USART_SendData(USART1, (uint8_t) ch);
                while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);               
                return (ch);
}

int fgetc(FILE *f)
{
                while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
                return (int)USART_ReceiveData(USART1);
}


任务1函数:
OS_STK task_led1_stk[TASK_LED1_STK_SIZE];                 
void Task_LED1(void *p_arg)
{
    (void)p_arg;                                               

    while (1)
    {
                        LED1( ON );
                        OSTimeDlyHMSM(0, 0,0,1000);
                        LED1( OFF);   
                        OSTimeDlyHMSM(0, 0,0,1000);     
                        printf("Task_LED1\r\n");
    }
}
通过调试可以看到程序:
; Reset handler routine
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main
                LDR     R0, = SystemInit_ExtMemCtl ; initialize external memory controller

到这里程序就不运行了。????请求大神帮助。


如果注释掉printf("Task_LED1\r\n");,程序可以正常运行。



QQ截图20151117141844.png
回复

使用道具 举报

发表于 2015-11-17 14:40:08 | 显示全部楼层
1.把工程的使用MicroLIB选项勾选上
QQ截图20151117143306.png
2. 把任务的堆栈大小改大一些

回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-17 14:48:17 | 显示全部楼层
OK。谢谢。下次还买你家的板子,服务真好!生意兴隆!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 19:31 , Processed in 0.043634 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表