搜狐首页 科技 宫主大人

手机搜狐

SOHU.COM

STM32 UCOS所需最小空间参考

利用STM32UCOS写了个很简单的程序,编译如下

ProgramSize:Code=24562RO-data=746RW-data=88ZI-data=7456

以此推算,小于FLASH小于24KRAM小于8K根本不能考虑STM32的UCOS,只能祼奔,

STM32的FLASH到还好满足些,一般都有64K,主要是RAM,看来STM32F0XX STM32F100上估计是没多大希望的了

----------------------以下为main.c-----------------------

#define MAIN_C

#include "includes.h"

void first_task(void *pdata);

void task_2(void *pdata);

void task_3(void *pdata);

int main()

{

RCC_ClocksTypeDef OS_Clocks;

bsp_Ini(); //初始化各个驱动,放于bsp_ini.c中

OSInit(); //ucos的系统初始化

RCC_GetClocksFreq(OS_Clocks);

OS_CPU_SysTickInit( OS_Clocks.HCLK_Frequency / OS_TICKS_PER_SEC ); //设置时钟滴答,1ms

OSTaskCreate(first_task,0,stk1[99],task1_sn); //创建第一个任务

OSStart(); //任务开始

}

void first_task(void *pdata) //在第一个任务里面创建其他任务(官方的推荐)

{

INT8U err;

int AD_value;

pdata=pdata;

flag1=OSFlagCreate(0,err);

OSTaskCreate(task_2,0,stk2[99],task2_sn);

OSTaskCreate(task_3,0,stk3[99],task3_sn);

while(1)

{

AD_value=(int) ( (double) ADC_GetConversionValue(ADC1) *3/4096 * 100 ) ;

DEBUG_COM_STREAM("\r\nAD=%L",(u8*)AD_value);//USART_SendData(USART1, test);

OSTimeDly(1000);

}

}

void task_2(void *pdata) //在第一个任务里面创建其他任务(官方的推荐)

{

INT8U err1;

char test;

pdata=pdata;

while(1)

{

OSFlagPend(flag1,EVENT_1,OS_FLAG_WAIT_SET_ALL+OS_FLAG_CONSUME,0,err1);

test = (char)USART_Date;

DEBUG_COM_STREAM("\r\n收到:%c",(u8*)test);//USART_SendData(USART1, test);

DAC_SetChannel1Data(DAC_Align_12b_R, test*16);

}

}

u8 count;

void task_3(void *pdata) //在第一个任务里面创建其他任务(官方的推荐)

{

pdata=pdata;

GPIO_INITIAL();

EXTI_INITIAL(ENABLE);

while(1)

{

OSTimeDly(1000);

count++;

if(count==3000)

{PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);

RCC_Ini();//bsp_Ini();

count=0;

}

else if(wake_id!=0)

{DEBUG_COM_STREAM("wake_id=%x",(u8*)wake_id);

wake_id=0;

}

DEBUG_COM_STREAM(" 我是任务3=%x",count);

精选