久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2847|回復: 5
打印 上一主題 下一主題
收起左側

OA日志

[復制鏈接]
跳轉到指定樓層
樓主
ID:82781 發表于 2015-6-13 15:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
今天難題了,昨天建華改了硬件電路,今天不好用了,前天是好用,今天不好用了?奇怪,我又對程序檢查,其實很簡單啊,ADC嘛,無非是第一步初始化端口,第二選中ADC的通道,然后時能中斷,開始轉換,就這么簡單,為什么呢?后來發現程序在不DBUG的時候不運行,所以引起我的懷疑,我換了硬件電路,換了一塊板子,結果程序跑起來了但是還是解不出來了,很是郁悶,然后著重開始對癥手冊對程序繼續檢查,其中有一句話是這樣的“ It needs about 27 ADC clocks to complete an A/D conversion.”也就是說ADC時鐘我是可以控制的,間接地對目標精心采樣,但是遺憾的是,我用的是200K的ADC時鐘,那么采樣肯定達不到200K,但是確實好用 ,信號要求,必須達到300-200K的速率才可以接出來正確的波,很難理解,PLL時鐘是50M。這個應該和PLL沒什么關系,因為源氏中我選定外部的晶體,下午快下班的時候我把DIV換到4,然后莫名其妙的就好了,此時軟件測得采樣率每秒鐘11萬次,根本不對,卻可以得到正確的數據,凌亂。示波器波形顯示上升沿和下降沿時間均在5微妙左右,所以硬件上沒有問題,有問題也是我程序的問題,但是這個真的求不出來這個速率,因為權威的軟件取采樣率和實際并不相符啊!必須要200K-300K的速率來采才會得到正確的結果,可是我設定的是11萬次的采樣率一樣可以得到正確的值,很詭異很詭異!有待研究學習啊,好神奇!真是有神!有神!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:82781 發表于 2015-6-13 15:44 | 只看該作者
    今天搞DHCP的時候,也碰到一個很奇怪的問題,無反應,后來檢查程序,原來移植程序的時候中斷引腳沒有改,改掉之后發現仍然獲取不到DHCP服務器給的IP地址,萬般無奈下只好改成固定IP測試硬件    txrx,測得硬件完全正常,只不過剛開始碰到一個號段問題,那就是0號段的可以向1號段發。反之則不行,修改后好使,但是DHCP任然不好用,并未得導IP地址,不得不跟蹤代碼。
IP4_ADDR(&gw, 0,0,0,0);
IP4_ADDR(&ipaddr, 0,0,0,0);
IP4_ADDR(&netmask, 0,0,0,0);
清掉IP網管子網掩碼信息,
tcpip_init(RT_NULL, RT_NULL);

netif_set_addr(netif_default, &ipaddr, &netmask, &gw);
netif_set_up(netif_default);
初始化TCPIP服務線程,加載地址
dhcp_start(netif_default);
向DHCP服務器發送請求
while (netif_default->ip_addr.addr == 0)
等待分配IP,
結束,這就是DHCP的全過程,如果順利的分配到IP地址那么就會跳出堵塞,向下執行,如果得不到,那將會啟動一個超時等待(DHCP transaction timeout handling)。我得到的是等待,顯然發出去請求沒有回應,于是實在是沒有道理,考慮MAC地址,一看地址是0X27*6,馬上改掉,問題解決了,IP地址分配了,一切有正常起來!哈哈也就是說MAC雖然可以亂寫,但是不能重復,當然這個變數就多了,經驗經驗!好使才是王道!

回復

使用道具 舉報

板凳
ID:82781 發表于 2015-6-13 15:44 | 只看該作者
今天上午在Mbus項目上加上GPRS,做了實驗, 經測試數據可以上傳下達,當然是測試,工作在透傳模式,而且程序均很簡潔,有待完善,數據完整性和連接可靠性,均未處理。數據完整主要是Mbus上傳數據進行的校驗,數據連接性主要是GPRS的可靠性
我們的流程是這樣的:

TCP 服務器------》》》》------SIM900A(CLINTE)------>>>TX0---MBUS設備 -----》》mcu 解碼------》tx1---sim900a(CLINTE)-----》》--TCP服務器---THE END

數據完整性處理:

數據流設備---》---采集---》TO buff  ------>>take data ----->一定的算法計算差錯----》完全正確上傳平臺
                                                                                                                 |》》》丟棄,報告錯誤。


鏈接可靠性

重練機制,自身檢測診斷,(參照SIM900AAT集),心跳, 其他的還希望大家提供線索,力求可靠。

gprs部分測試:

對于串口流我采用了分時分批處理的方法,算法是環形隊列。只要BUF足夠大,就不大會發生丟數據的情況。(環形隊列慎用之)


IP :119.184.123.84
PORT:1000


  void initsim900a(void)
{
   
uint8_t m;
POWER_ON;
DrvSYS_Delay(300000);
POWER_OFF;
DrvSYS_Delay(300000); //開機
for(m=5;m;m--)
{
DrvSYS_Delay(100000);
}

if(GET_START)
{
DrvUART_Write(UART_PORT1,"AT\r\n",4);//發送AT命令
DrvUART_Write(UART_PORT0,"AT\r\n",4);//發送AT命令
}

}
void timeout(uint32_t time)
{
     uint32_t n;
  for(n=0;n<time;n++)
{

   DrvSYS_Delay(1000);//1ms
}

}

extern uint8_t *Gprs_Pong(void);
uint8_t  Wait_Gprs_Sure(char *p)
{
   p=p;
   
   
   Gprs_Pong();
   
   
   
   
   
   
    /*
        if(memcmp(SIM900A_DATA,sk,strlen(sk))==0)
     {
     
      send_data();
     
     }

      if(memcmp(SIM900A_DATA,sendok,strlen(sendok))==0)
      {
        //  pa->AT_REC_SEND_OK=1;
      
      }

       if(memcmp(SIM900A_DATA,connect_ok,strlen(connect_ok))==0)
    {

   // pa->AT_REC_CONNECT=1;
     
   
    }
      if(memcmp(SIM900A_DATA,err,strlen(err))==0)
    {

   // pa->AT_REC_ERR=1; //err
     
   
    }
    if(memcmp(SIM900A_DATA,atd,strlen(atd))==0)
    {

   // pa->AT_REC_ATD=1; //撥電話
     
   
    }


    if(memcmp(SIM900A_DATA,power_down,strlen(power_down))==0)
    {
   // pa->AT_REC_POWERDOWN=1;
     // printf_usart0 ("模塊掉電請重新上電\r\n");
   
    }


   
       if(memcmp(SIM900A_DATA,ati,strlen(ati))==0)
    {
   
   // pa->AT_REC_ATI=1;
    //  printf_usart0 ("收到設備號\r\n");
   
    }
   
       if(memcmp(SIM900A_DATA,ok,strlen(ok))==0)
    {
  //  pa->AT_REC_OK=1;
    //  printf_usart0 ("收到OK\r\n");
   
    }


      */
   return 0;
}



uint8_t  Connect_Sever(char *Url)
{
   

     Url = Url;
  timeout(1000);//1s
  Gprs_Send_String(at_cmd);//支持包交換和數據交換
  timeout(8000);//1s
  Wait_Gprs_Sure("ok!!");

     Gprs_Send_String(" AT+CGCLASS=\"B\"\r\n\r\n");//支持包交換和數據交換

   timeout(8000);//1s
   Wait_Gprs_Sure("AT+CGCLASS=\"B\"\r\n\r\n");
       // {pa->AT_REC_OK=0;printf_usart0 ("支持包交換和數據交換配置成功\r\n");}

  Gprs_Send_String ("AT+CGDCONT=1,\"IP\",\"CMNET\"\r\n\r\n");
      timeout(8000);//1s
   Wait_Gprs_Sure("AT+CGDCONT=1,\"IP\",\"CMNET\"\r\n\r\n");
// CoTickDelay(60);
  //  {pa->AT_REC_OK=0;printf_usart0 ("配置GPRS和接入點設置成功\r\n");}

    Gprs_Send_String ("AT+CGATT=1\r\n\r\n"); //附著GPRS業務
     
     timeout(8000);//1s
   Wait_Gprs_Sure("AT+CGATT=1\r\n\r\n");
  //CoTickDelay(60);
     //{pa->AT_REC_OK=0;printf_usart0 ("附著GPRS業務成功\r\n");}
    Gprs_Send_String ("AT+CIPCSGP=1,\"CMNET\"\r\n\r\n"); //選擇GPRS連接
      
     timeout(8000);//1s
   Wait_Gprs_Sure("AT+CIPCSGP=1,\"CMNET\"\r\n\r\n");

    // {pa->AT_REC_OK=0;printf_usart0 ("選擇GPRS連接成功\r\n");}
      Gprs_Send_String("AT+CIPSTART=\"TCP\",");
   timeout(10);//1s
    Gprs_Send_String ("\"119.184.123.84\","); //ip地址
   timeout(10);//1s
      Gprs_Send_String("1000\r\n");   //端口
   timeout(10);//1s
            timeout(8000);//1s
   Wait_Gprs_Sure("AT+CIPSTART=\"TCP\",\"119.184.123.84\",""1000\r\n");


     return 0;
}


void Send_Data_Gprs(uint8_t *data,uint8_t len)
{
  
    static uint8_t g=0x1A;
    timeout(8000);//1s
   Gprs_Send_String ("AT+CIPSEND\r\n");
  timeout(1000);//1s
  Gprs_Send_Data(data,len);
     // Gprs_Send_String (">嘿!伙計,我是單片機!\r\n");
   DrvUART_Write(UART_PORT1,&g,1);  
           timeout(8000);//1s

  
}


回復

使用道具 舉報

地板
ID:82781 發表于 2015-6-13 15:45 | 只看該作者
霧靄湝湝,云露淇淇,日月不得其光,賊星在位,不知朝夕,恍惚逝去!
沉吟:夫士不可以弘毅,任重而道遠!
昨夜食,不得寐,晨其舍飯,余碗粟米也,食罷而去。
吾等繼至,建華早至,說如此!

上午本來大打算繼續搞GPRS的穩定性滴,沒想到打開電腦,看到某大神在討論修飾符volatile,這個符號可不是一般的符號啊,就我個人而言這個東東很常見于只向寄存的指針上用,因為他要求編譯器對他不進行優化,長用的方式如下:
#defien  REG_SRC (*(volatile const unsigned char*)0x2f00345e)
我們在C語言中常常有這樣的語句:

unsigned int a;

a=1;
a=2;
a=4;
a=7;
編譯器最后得出的結果是a=7,其他的都會編譯掉,但是如果A是寄存器呢?他的每一次賦值都是一個變化,又怎么解釋呢?就有

#defien  REG_SRC (*(volatile const unsigned*)0x0000345e)

REG_SRC = 0x 0000000;

REG_SRC = 0xff00ff00;

REG_SRC = 0x00ff00ff;

這是決然不同的!后者高速編譯器這個地址可能被改變,你要保留不要優化掉,當然,現在的編譯器尤其是嵌入式專用的那些對這些絕對地址的尋址上都是有保護滴,當然這也不可以步履啊。

還有就是在ISR服務中使用,其實差不多啦,

噯氣,懂得太少了!

上午應王建華的需求改了路燈終端的AT93C56的CS引腳,下午才知道,本來是對的上午他媽的改錯了!暈死,建華不該亂說。我懶得看手冊,沒拆穿建華!

下午王建華說他找到了問題所在,原因在于93c6\56和7053之間公用的SPI接口的Dout被拉長高電平,導致7053無法拉低,所以讀出來的是一個巨大的數據,FFFFff,

下午對GPRS的回復信號做了處理,加上了比較和返回值,

uint8_t  Wait_Gprs_Sure( char *pstr,int len,char *s)
{
   char *rep;
   char *index;
      
       rep = Gprs_Get_Respond();  //save respond data and pointer to it

    index = strstr(rep,pstr);   //find string in dst add
   if(index==((char*)0))
   {
     Mbus_Send_String ("no string !!\r\n");
    return ;
   }
if(0== memcmp (index ,pstr,len-1))
  {
  
   // Mbus_Send_String ("ok \r\n");
    Mbus_Send_String (s);
   //Mbus_Send_Data(char*p,uint8_t len)
  }
  else
     {
  
     Mbus_Send_String ("err!\r\n");
      }


   
   return 0;
}

值得注意的是內存池里面的數據直接用STRSTR查找的時候他碰到‘\0’就返回,所以要加以處理,不然你是查不到的,我的辦法是:
uint8_t  *Gprs_Get_Respond(void)
{  
         uint8_t l,k;
   memset(Gprs_app,1,80);
   len=QueueLength(&Gprs_ctrl_Queue);//updata the "lne"
  for(k=0;k<len;k++)
  {
    DeQueue(&Gprs_ctrl_Queue,&l);
   if(l==0)l=0x0d;
   Gprs_app[k]=l; //save into buff of app

  
  }   k++;
     Gprs_app[k]='\0';
    return Gprs_app;
}
這樣一來就可以順利的比對了,哈哈,辦法是笨,但是。。。。。!

晚上劉總說有幾個開關不好用,我跟蹤了下,兩鍵的開關老是進第三個IS人,所以我屏蔽掉第三個之后,安裝上了,上電實驗還行,不必要的通道要及時的屏蔽掉,以免干擾正常的工作,其實開關沒有死,他一直在進中斷,沒時間干別的,所以看起來就像死了一樣,也許還有其他的原因吧,有待時間去慢慢驗證啊,有時候真是倒霉催的,莫名其妙!盡力。。。。


回復

使用道具 舉報

5#
ID:82781 發表于 2015-6-13 15:45 | 只看該作者
今天主要是對GPRS的鏈接做了點處理和測試,雙向心跳包,一個是客戶端主動發,一個是服務器主動發,但是呢我碰到一個問題,那就是 在客戶端檢測到沒有心跳包之后,要主動發送一個類似socket的close命令,但是呢,發完這個命令,在想要綁定到CMNET就幫不上了,導致鏈接失敗,后來查閱手冊GPRS說是要提前進入init狀態,后來加了條初始化IP狀態,就好了,暈暈的。。這才是萬里長征第一步,早來!在等待返回數據和解析上我做的不是很好,有待改進啊。。。。
  char *rep;
   char *index;
      
       rep =(char*) Gprs_Get_Respond();  //save respond data and pointer to it

    index = strstr(rep,pstr);   //find string in dst add
   if(index==((char*)0))
   {
         //Exception Handling

           index = strstr(rep,"CLOSE");   //find string in dst add
      if(index==((char*)0))
     {

         index = strstr(rep,"ERROR");   //find string in dst add  
          if(index==((char*)0))
         {
      
        Mbus_Send_String ("no string !\r\n");
        Exception_Handling_Evet=1;
      
         }
         else
         {
           Mbus_Send_String ("This is a Error!!\r\n");
             Exception_Handling_Evet=1;
         }

   
     }
     else
     {
              Mbus_Send_String ("SEVER IS CLOSED !!\r\n");
     Exception_Handling_Evet=1;
     }
   


    return 0;
   }

if(0== memcmp (index ,pstr,len-1))
  {
  

    Mbus_Send_String (s); //successfully

  }
  else
     {
  
     Mbus_Send_String ("err!!\r\n");
      }


回復

使用道具 舉報

6#
ID:82781 發表于 2015-6-13 15:46 | 只看該作者
下午主要是在搞基于dhcp客戶端上的無線協議的移植的透傳設備程序,由于之前和上位機軟件調試了DHCP,所以只要移植上無線驅動和協議就好啦,碰到一個苦逼問題,就是沒開時種啊,暈死,以前的程序忘了做聲明,導致了漏掉了始終那一檔子事, 讀取來的ID是錯誤的,搞了一下午,噯氣八八!不行不行!低落ing,

GPRS仍然再測,一切良好,可以用一個低成本的處理起來實現,夠用,gprs抄表的項目似乎領導們不太中意,我卻看的很重,這個東西還是可以的,以后來說,用處還是大點的,雖然慢點,但是小數據量,無線傳輸的場合可以了,總不能每個都托根電線吧。所以我投入了大量的時間來處理鏈接的可靠性,告一段落了,剩下的時間就是永無休止的測測測測。。。。。。。。

還偶有一屁股的事情要做,路燈的通道板要做,完善,好幾個小的整套測試程序都沒做,還哦有好幾個開關的程序要完善那,
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人精品综合 | 国产99免费 | 久久男人| 欧美日韩一区精品 | 亚洲一区二区三区四区五区中文 | 国产精品久久久久久久久久妞妞 | 欧美一级在线观看 | 日韩成人免费在线视频 | 三级免费网 | 久久国内精品 | 国产精品我不卡 | 日本在线网址 | 久久久久中文字幕 | 狠狠干天天干 | 奇米av| 一区在线播放 | 一区二区三区成人 | 蜜桃av人人夜夜澡人人爽 | 91原创视频在线观看 | a天堂在线 | 欧美精品片 | 午夜影院在线观看 | 亚洲免费在线 | 狠狠操婷婷 | 婷婷免费视频 | av三级| 日韩欧美一区二区三区在线播放 | 蜜桃在线播放 | 韩国欧洲一级毛片 | 国产精品日韩欧美一区二区三区 | 91视频在线 | 9久久| 国产极品粉嫩美女呻吟在线看人 | 91久久精品一区二区二区 | 成人一区二区三区在线观看 | 日韩一级二级片 | 欧美一区二区三区在线免费观看 | 欧美成人免费在线视频 | 波多野吉衣在线播放 | 日韩一区中文字幕 | 久久精品国产a三级三级三级 |