请叫下原子哥及各位大神,小弟用uCOS-II 时在任务中使用sprintf函数问题。程序就跑死了,跑带void HardFault_Handler(void)函数里面堆栈大小设置的也没问题啊,把sprintf注释了运行就没问题,很疑惑。。
[mw_shl_code=c,true]
[mw_shl_code=c,true]#include "ucos_ii.h"
#include "stm32f10x.h"
#include "led.h"
#include "uart.h"
#include "stdio.h"
static OS_STK startup_task_stk[STARTUP_TASK_STK_SIZE];
static OS_STK task1_stk[TASK1_STK_SIZE];
static OS_STK task2_stk[TASK2_STK_SIZE];
OS_EVENT*msg_key;
char *s;
INT32U time=0;
static void systick_init(void)
{
RCC_ClocksTypeDef rcc_clocks;
RCC_GetClocksFreq(&rcc_clocks);
SysTick_Config(rcc_clocks.HCLK_Frequency / OS_TICKS_PER_SEC);
}
static void task1(void *pdata)
{
INT8U err;
INT8U timeL;
pdata=pdata;
for (;;)
{
timeL=(INT16U)OSMboxPend(msg_key,10,&err);
USART_SendData(USART2,timeL);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC));
led_on(LED_0);
OSTimeDlyHMSM(0,0,1,0);
led_off(LED_0);
OSTimeDlyHMSM(0,0,1,0);
}
}
static void task2(void *pdata)
{
pdata=pdata;
for (;;)
{
sprintf(s,"%d",1);
OSMboxPost(msg_key,s);
s++;
OSTimeDlyHMSM(0,0,1,0);
}
}
static void startup_task(void *pdata)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
pdata=pdata;
systick_init(); /* Initialize the SysTick. */
OSStatInit(); /* Determine CPU capacity. */
msg_key=OSMboxCreate((void*)0);
OS_ENTER_CRITICAL();
OSTaskCreate(task1, (void *)0,
&task1_stk[TASK1_STK_SIZE-1], TASK1_PRIO);
OSTaskCreate(task2, (void *)0,
&task2_stk[TASK2_STK_SIZE-1], TASK2_PRIO);
OS_EXIT_CRITICAL();
OSTaskDel(OS_PRIO_SELF);
}
int main(void)
{
led_init();
uart_init(9600);
OSInit();
OSTaskCreate(startup_task, (void *)0,
&startup_task_stk[STARTUP_TASK_STK_SIZE - 1],
STARTUP_TASK_PRIO);
OSStart();
return 0;
}
[/mw_shl_code]
[/mw_shl_code]
|