?? main.c
字號:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by: Chenmingji
** Created date: 2004-09-16
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by: Chenxibing
** Modified date: 2005-03-11
** Version:
** Descriptions: 信號量使用
**
********************************************************************************************************/
#include "config.h"
#include "stdlib.h"
#define TaskStkLengh 512 // 定義用戶任務0的堆棧長度
OS_STK TaskStk [TaskStkLengh]; // 定義用戶任務0的堆棧
OS_STK Task1Stk [TaskStkLengh]; // 定義Task1的堆棧
OS_STK taskUartStack[TASK_UART_STK_SIZE];
//緩沖區的有效數據
INT32U DF_Ndata;
//開始地址 0 DF_StartAddr;
INT32U DF_StartAddr;
//結束地址 容量 DF_EndAddr;
INT32U DF_EndAddr;
//最大容量 At45DB161的容量 DF_Vol;
INT32U DF_Vol;
//扇區容量 Pagesize DF_PageSize;
INT32U DF_PageSize;
uint32 E2WriteAddr;
uint32 E2ReadAddr;
extern uint32 eint0i;
extern int EintrdUsed(void);
extern int EintRead(void *data, int length, unsigned long tmout) ;
void Task0(void *pdata); // Task0 任務0
void cat1023_watchdog_init(void)
{
//P1.19
PINSEL2 = PINSEL2 & 0xFFFFFFF7;
IO1DIR = IO1DIR | 0x00080000;
}
void cat1023_wdi_output(char wdi)
{
if (wdi == 0)
{
IO1CLR |= 0x00080000;
}
else
{
IO1SET |= 0x00080000;
}
}
void modem_pwr_reset(void)
{
IO1CLR |= 0x01000000;
delay(5000);
IO1SET |= 0x01000000;
delay(5000);
IO1CLR |= 0x01000000;
delay(500);
}
/*
**********************************************************************************************************
** 函數名稱 :main()
** 函數功能 :uC/OS-II主函數,啟動多任務環境。
**********************************************************************************************************
*/
int main (void)
{
OSInit ();
OSTaskCreate (Task0,(void *)0, &TaskStk[TaskStkLengh - 1], 3);
OSStart ();
return 0;
}
/*********************************************************************************************************
** Task0 任務0
** 目標板初始化,創建Task1,向串口0發送字符串“I AM TASK A.”
********************************************************************************************************/
void Task0 (void *pdata)
{
int ret;
int cat1023_wdi_status = 0;
char RxTxBuf[1024+1];
char NeedWrite;
INT32U get_dcd_num = 0;
pdata = pdata;
TargetInit ();
//OSTaskCreate (Task1,(void *)0, &Task1Stk[TaskStkLengh - 1], 3);
cat1023_watchdog_init();
E2WriteAddr = 0x0;
E2ReadAddr = 0x0;
DF_Ndata = 0x0;
DF_StartAddr = 0;
DF_EndAddr = 2097151;//2097152 - 1;//512*4096
DF_PageSize = 512;
DataFlash_HardWareInit();
delay(100);
if ((WDMOD & 0x04) == 0x04)
{
DTU_DBG("WACTCH DOG !!\r\n");
WDMOD = 0;
}
myprintf("\r\n %s Starting...", DTU_VERSION);
delay(10);
myprintf("Read Status:0x%2X\r\n",DataFlash_ReadStatus());
myprintf("DataFlash is Busyornot?:%d\r\n",DataFlash_isBusy());
delay(100);
//delay(5000);
//mdmSmsNewRead();
DTU_DBG("\r\nAfter init modem");
//QueueCreate((void *)RcvSendBuf, sizeof(RcvSendBuf), NULL, NULL);
//QueueFlush((void *)RcvSendBuf);
while (1)
{
//清看門狗
if (cat1023_wdi_status == 1)
{
cat1023_wdi_status = 0;
}
else
{
cat1023_wdi_status = 1;
}
cat1023_wdi_output(cat1023_wdi_status);
//監控模塊
//如果模塊在N個周期內無反應,則復位模塊
if (uart1_get_dcd() != 0)
{
get_dcd_num =0;
}
else
{
get_dcd_num++;
}
if (get_dcd_num > 6000) //20for 1s
{
get_dcd_num =0 ;
modem_pwr_reset();
myprintf("modem reset\r\n");
}
//將緩沖區的內容寫進 Flash
//有數據一直到寫完
ret = EintrdUsed();//QueueNData((void *)RcvSendBuf);
if (ret > 0)
{
myprintf("Queue:%d \r\n",ret);
}
if ((ret + E2WriteAddr % DF_PageSize)>DF_PageSize)
{
ret = DF_PageSize - (E2WriteAddr%DF_PageSize);
}
if ((ret >0) && (DataFlash_isBusy() == 0))
{
NeedWrite = TRUE;
do
{
//QueueReadBlock(RxTxBuf, (void *)RcvSendBuf, ret, FALSE);
EintRead(RxTxBuf, ret, 0);
//printf("Adused:%d loginsecond:%d ret:%d\r\n",ADrdUsed(),LogingSecond,ret);
//這里應當判斷一個Flash的結束地址
//Block_Program((uint8*) RxTxBuf, ret, (E2WriteAddr/DF_PageSize)+DF_StartAddr/DF_PageSize, E2WriteAddr%DF_PageSize);
//Block_Program((uint8*) RxTxBuf, ret, (E2WriteAddr/DF_PageSize), E2WriteAddr%DF_PageSize);
delay(5);
/*printf("Write:\r\n");
for (i= 0;i< ret;i++)
{
printf("%X ",(uint8)RxTxBuf[i]);
}
printf("\r\n");
*/
DF_Ndata += ret;
E2WriteAddr += ret;
if (E2WriteAddr > DF_EndAddr)
{
E2WriteAddr = DF_StartAddr;
}
myprintf(" E2Write:%d ret:%d \r\n",E2WriteAddr,ret);
ret = EintrdUsed();//QueueNData((void *)RcvSendBuf);
myprintf("Queue:%d \r\n",ret);
if ((ret >= DF_PageSize) &&(DataFlash_isBusy() == 0))
{
NeedWrite = TRUE;
}
else
{
NeedWrite = FALSE;
}
if ((ret + E2WriteAddr % DF_PageSize)>DF_PageSize)
{
ret = DF_PageSize - (E2WriteAddr%DF_PageSize);
}
}while (NeedWrite == TRUE);
//delay(50);
}
// printf("DataFlash is Busyornot?:%d\r\n",DataFlash_isBusy());
//如果Flash里面有數據,則將其發送出去
if ((DF_Ndata > 0)&&(DataFlash_isBusy() == 0))// && (uart1_get_cts()!= 0))
{
if ((DF_Ndata +E2ReadAddr%DF_PageSize)>= DF_PageSize)
{
ret = DF_PageSize - (E2ReadAddr%DF_PageSize);
}
else
{
ret = DF_Ndata;
}
//Block_Read((uint8 *)RxTxBuf, 500, (E2ReadAddr/500)+20, 0);
//Block_Read((uint8 *)RxTxBuf, ret, (E2ReadAddr/DF_PageSize)+DF_StartAddr/DF_PageSize, E2ReadAddr%DF_PageSize);
delay(5);
myprintf("E2Read:%d ret:%d \r\n",E2ReadAddr,ret);
/*printf("Read:\r\n");
for (i= 0;i< ret;i++)
{
printf("%X ",(uint8)RxTxBuf[i]);
}
printf("\r\n");
*/
E2ReadAddr += ret;
if (E2ReadAddr> DF_EndAddr)
{
E2ReadAddr= DF_StartAddr;
}
DF_Ndata -= ret;
//這里要加上對模塊的控制
SendData(RxTxBuf, ret);
}
ret = ReadData(RxTxBuf, 1024, 0);
if (ret > 0)
{
rsWrite(RxTxBuf, ret);
}
if (DF_Ndata != 0)
{
myprintf("Ndata:%d\r\n",DF_Ndata);
}
//myprintf("oneloop\r\n");
delay(100);
myprintf("i:%d\r\n",eint0i);
}
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -