[mw_shl_code=c,true]#include"stm32f10x.h"
/*任务堆栈设置*/
//开始任务
#define START_TASK_PRIO 10
#define START_STK_SIZE 64
OS_STK_START_TASK_STK[START_STK_SIZE];
void start_task(void *pdata);
#define MAIN_TASK_PRIO 9
#define MAIN_STK_SIZE 64
OS_STK_MAIN_TASK_STK[MAIN_STK_SIZE];
void main_task(void *pdata);
#define KEY_TASK_PRIO 8
#define KEY_STK_SIZE 64
OS_STK_KEY_TASK_STK[KEY_STK_SIZE];
void key_task(void *pdata);
OS_EVENT *msg_key;
OS_EVENT *sem_beep;
void GPIO_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
void RCC_Configuration(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_SPI1, ENABLE);
}
void SysClock_Init(void)
{
ErrorStatus HSEStartUpStatus;
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS){
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){
;
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08){
;
}
}
}
u32 key_scan(void)
{if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0)==0) return 1;
if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_1)==0) return 2;
if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_2)==0) return 3;
if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3)==0) return 4;
if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_4)==0) return 5;
return 0;
}
void delay(int i)
{for(int k=i;k>0:k--)
for(int j=1000;j>0;j--) ;
}
int main()
{ SysClock_Init();
RCC_Configuration();
GPIO_Configuration();
delay(100);
OSInit();
OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务
OSStart();
}
void start_task(void* pdata)
{OS_CPU_SR cpu_sr=0;
pdata=pdata;
meg_key=OSMboxCreate((void*) 0);
sem_beep=OSSemCreate(0);
OSStatInit();
OS_ENTER_CRITICAL();
OSTaskCreate(key_task,(void *)0,(OS_STK*)&KEY_TASK_STK[KEY_STK_SIZE-1],KEY_TASK_PRIO);
OSTaskCreate(main_task,(void *)0,(OS_STK*)&MAIN_TASK_STK[MAIN_STK_SIZE-1],MAIN_TASK_PRIO);
OSTaskSuspend(START_TASK_PRIO); //挂起起始任务.
OS_EXIT_CRITICAL();
}
void main_task(void* pdata)
{u32 key=0;
while(1)
{
key=(u32)OSMboxPend(msg_key,5,&err);
switch(key)
{ case 1:
if(GPIO_ReadOutputDataBit(GPIOD, GPIO_Pin_8)==Bit_RESET)
{ GPIO_SetBits(GPIOD, GPIO_Pin_8); break;}
else { GPIO_ResetBits(GPIOD, GPIO_Pin_8); break;}
case 2:
if(GPIO_ReadOutputDataBit(GPIOD, GPIO_Pin_9)==Bit_RESET)
{GPIO_SetBits(GPIOD, GPIO_Pin_9);break; }
else {GPIO_ResetBits(GPIOD, GPIO_Pin_9); break;}
case 3:
if(GPIO_ReadOutputDataBit(GPIOD, GPIO_Pin_10)==Bit_RESET)
{GPIO_SetBits(GPIOD, GPIO_Pin_10);break;}
else { GPIO_ResetBits(GPIOD, GPIO_Pin_10); break; }
case 4:
if(GPIO_ReadOutputDataBit(GPIOD, GPIO_Pin_11)==Bit_RESET)
{GPIO_SetBits(GPIOD, GPIO_Pin_11); break;}
else {GPIO_ResetBits(GPIOD, GPIO_Pin_11); break;}
}
}
}
void key_task(void* pdata)
{OS_CPU_SR cpu_sr=0;
pdata=pdata;
//u32 key=key_scan(void);
while(1)
{u32 key=key_scan(void);
if(key)
OSMboxPost(msg_key,(void*) key);
}
}
[/mw_shl_code]
为什么这段代码编译不过去呢,我的UCOS文件是直接复制别人工程文件下的UCOS那个文件夹,为什么不能编译通过呢?应该怎么样使用UCOS 呢?急!急!急
|