📄 app.c
字号:
/* Create start task */
OSTaskCreateExt(AppTaskStart,
NULL,
(OS_STK *)&AppTaskStartStk[APP_TASK_START_STK_SIZE - 1],
APP_TASK_START_PRIO,
APP_TASK_START_PRIO,
(OS_STK *)&AppTaskStartStk[0],
APP_TASK_START_STK_SIZE,
NULL,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
#if OS_TASK_NAME_SIZE > 11
OSTaskNameSet(APP_TASK_START_PRIO, "Start Task", &err);
#endif
OSStart(); /* Start uC/OS-II */
}
/*
*********************************************************************************************************
* uC/OS-View TERMINAL WINDOW CALLBACK
*********************************************************************************************************
*/
#if OS_VIEW_MODULE > 0
static void AppTerminalRx (CPU_INT08U rx_data)
{
}
#endif
/*
*********************************************************************************************************
* AppInit_OSView()
*
* Description : This function is called by AppTaskStart() and is responsible for initializing uC/OSView
*
*********************************************************************************************************
*/
#if OS_VIEW_MODULE > 0
static void AppInit_OSView (void)
{
OSView_Init(38400);
OSView_TerminalRxSetCallback(AppTerminalRx);
OSView_RxIntEn();
}
#endif
/*
*********************************************************************************************************
* AppInit_TCPIP()
*
* Description : This function is called by AppTaskStart() and is responsible for initializing uC/TCP-IP
* uC/HTTPs, uC/TFTPs and uC/DHCPc if enabled.
*
*********************************************************************************************************
*/
static void AppInit_TCPIP (void)
{
NET_ERR err;
#if EMAC_CFG_MAC_ADDR_SEL == EMAC_CFG_MAC_ADDR_SEL_CFG
NetIF_MAC_Addr[0] = 0x00;
NetIF_MAC_Addr[1] = 0x50;
NetIF_MAC_Addr[2] = 0xC2;
NetIF_MAC_Addr[3] = 0x25;
NetIF_MAC_Addr[4] = 0x60;
NetIF_MAC_Addr[5] = 0x01;
#endif
err = Net_Init(); /* Initialize uC/TCP-IP */
ip = NetASCII_Str_to_IP("202.38.215.187", &err);
msk = NetASCII_Str_to_IP("255.255.255.0", &err);
gateway = NetASCII_Str_to_IP("202.38.215.186", &err);
err = NetIP_CfgAddrThisHost(ip, msk);
err = NetIP_CfgAddrDfltGateway(gateway);
#if uC_HTTPs_MODULE > 0
//HTTPs_Init(); /* Initialize uC/HTTPs */
#endif
#if uC_TFTP_MODULE > 0
//TFTPs_Init(OS_TICKS_PER_SEC); /* Initialize the uC/TFTPs */
#endif
}
/*$PAGE*/
/*
*********************************************************************************************************
* STARTUP TASK
*
* Description : This is an example of a startup task. As mentioned in the book's text, you MUST
* initialize the ticker only once multitasking has started.
* Arguments : p_arg is the argument passed to 'AppStartTask()' by 'OSTaskCreate()'.
* Notes : 1) The first line of code is used to prevent a compiler warning because 'p_arg' is not
* used. The compiler should not generate any code for this statement.
* 2) Interrupts are enabled once the task start because the I-bit of the CCR register was
* set to 0 by 'OSTaskCreate()'.
*********************************************************************************************************
*/
static void AppTaskStart (void *p_arg)
{
CPU_INT08S i;
(void)p_arg; /* Prevent compiler warning */
//初始化参数
BSP_Init();
FS_Init(); //文件系统初始化
Init_DBGU(); /*初始化调试串口*/
AT91F_USB_Open(); //初始化USB为CDC /* Initialize the BSP */
#if OS_VIEW_MODULE > 0
AppInit_OSView(); /* Initialize uC/OSView */
#endif
#if uC_TCPIP_MODULE > 0
AppInit_TCPIP(); /* Initialize uC/TCP-IP and associated appliations */
#endif
LED_Off(0); /* Turn on ALL the LEDs */
#if OS_TASK_STAT_EN > 0
OSStatInit(); /* Start stats task */
#endif
TaskStartCreateTasks(); //创建任务
while (DEF_TRUE)
{ /* Task body, always written as an infinite loop. */
for ( i=0 ; i < 16 ; i=i+1 )
{
LED_On_number(i);
OSTimeDlyHMSM(0, 0, 1, 0);
LED_Off_number(i);
//OSTimeDlyHMSM(0, 0, 1, 0);
}
for ( i=16 ; i > 0 ; i=i-1 )
{
LED_On_number(i);
OSTimeDlyHMSM(0, 0, 1, 0);
LED_Off_number(i);
//OSTimeDlyHMSM(0, 0, 1, 0);
}
}
}
/*
********************************************************************
创建军任务
********************************************************************
*/
static void TaskStartCreateTasks (void)
{
CPU_INT08U err;
OSTaskCreateExt(FSTask, //创建文件系统任务
NULL,
(OS_STK *)&FSTaskStk[FS_TASK_SIZE - 1],
FS_TASK_PRIO,
FS_TASK_PRIO,
(OS_STK *)&FSTaskStk[0],
FS_TASK_SIZE,
NULL,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(USBCDCTask, //创建USB_CDC任务
NULL,
(OS_STK *)&USBCDCTaskStk[USB_CDC_TASK_SIZE-1],
USB_CDC_TASK_PRIO,
USB_CDC_TASK_PRIO,
(OS_STK *)&USBCDCTaskStk[0],
USB_CDC_TASK_SIZE,
NULL,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
#if uC_TCPIP_MODULE > 0
OSTaskCreateExt(AppTaskPhy,
(void *)0,
(OS_STK *)&AppTaskPhyStk[APP_TASK_PHY_STK_SIZE - 1],
APP_TASK_PHY_PRIO,
APP_TASK_PHY_PRIO,
(OS_STK *)&AppTaskPhyStk[0],
APP_TASK_PHY_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
#if OS_TASK_NAME_SIZE > 11
OSTaskNameSet(APP_TASK_PHY_PRIO, "PHY Status", &err);
#endif
#endif
OSTaskCreateExt(ADCTask, //创建adc任务
NULL,
(OS_STK *)&ADCTaskStk[ADC_TASK_SIZE-1],
ADC_TASK_PRIO,
ADC_TASK_PRIO,
(OS_STK *)&ADCTaskStk[0],
ADC_TASK_SIZE,
NULL,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
}
/*********************************************************************
*
* 文件系统任务
*/
static void FSTask(void *arg)
{
int x;
for(;;)
{
/* format your RAM disk */
x = FS_IoCtl("ram:",FS_CMD_FORMAT_MEDIA,FS_MEDIA_RAM_16KB,0);
if (x!=0) {
_error("Cannot format RAM disk.\n");
}
/* create file 'default.txt' on your default device */
_write_file("default.txt",dev_default_msg);
/* create file 'ram.txt' on your RAM disk */
_write_file("ram:\\ram.txt",dev_ram_msg);
/* dump file 'default.txt' on you default device */
_dump_file("default.txt");
/* dump file 'ram.txt' on you default RAM disk */
_dump_file("ram:\\ram.txt");
#if FS_POSIX_DIR_SUPPORT
/* show root directory of default device */
_show_directory("");
/* show root directory of RAM disk */
_show_directory("ram:");
#endif /* FS_POSIX_DIR_SUPPORT */
/* display disk space information of the default device */
_show_free("");
/* display disk space information of the RAM disk */
_show_free("ram:");
OSTimeDly(10);
}
}
/*******************************************************************************************
USB_CDC任务
********************************************************************************************/
static void USBCDCTask(void *arg)
{
for(;;)
{
usb_c_irq_handle();
OSTimeDlyHMSM(0, 0, 0,50 );
}
}
/*******************************************************************************************
ADC任务
********************************************************************************************/
static void ADCTask(void *arg)
{
for(;;)
{
OSTimeDlyHMSM(0, 0, 1,50 );
}
}
/*
*********************************************************************************************************
* PHY STATUS TASK
*
* Description : This task monitors the link state and updates the NetNIC_ConnStatus.
*
* Arguments : p_arg is the argument passed to 'AppTaskPhy()' by 'OSTaskCreate()'.
*
* Returns : none
*********************************************************************************************************
*/
static void AppTaskPhy (void *p_arg)
{
(void)p_arg;
while (DEF_TRUE) { /* Task body, always written as an infinite loop. */
OSTimeDlyHMSM(0, 0, 1, 0);
NetNIC_ConnStatus = NetNIC_PhyLinkState2(); /* Set NetNIC_ConnStatus according to link state */
if (NetNIC_ConnStatus == DEF_ON) {
NetNIC_LinkUp();
} else {
NetNIC_LinkDown();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -