標題: 哈哈問題解決 [打印本頁]

作者: xuwei    時間: 2015-6-13 01:51
標題: 哈哈問題解決
昨天搞了一下午的程序,一頭霧水,沒點思路,今天在軟件孫大神的幫助下終于解決這個問題,
是這樣的嵌入式設(shè)備要和手機做鏈接,但是為了方便所以把固定IP改成DHCP方式,然后流程是這樣的,第一步嵌入式設(shè)備上點想DHCP服務(wù)器獲取IP地址,然后得到IP地址后啟動UDP廣播,向這個號段內(nèi)的指定端口廣播一幀數(shù)據(jù),手機也在這個網(wǎng)段內(nèi),所以收到回復(fù),我獨立開辟一個UDP接受線程接受來自手機端的數(shù)據(jù),一旦受到數(shù)據(jù)立馬開始向這個IP的指定端口做TCP鏈接,完事之后線程掛起開始運行TCP客戶端線程,如果在此時手機主動關(guān)閉TCP鏈接,那么嵌入式設(shè)備要可以重新發(fā)起這個過程,昨天的現(xiàn)象是,A,第一次可以聯(lián)機成功,一旦TCP釋放之后無法聯(lián)接,UDP所有的廣播都是正常的,然后用網(wǎng)絡(luò)調(diào)試助手流程都通,沒有一點問題,手機軟件方面也是所有問題都通,一旦和嵌入式設(shè)備鏈接就不行,原來是這樣的:

只說主要的,其他線程不予考慮。。
系統(tǒng)初始化的時候創(chuàng)建了2個主線程,一個用來初始化網(wǎng)口和上層棧,一個用來接收UDP數(shù)據(jù),即A線程B線程,A線程優(yōu)先級最搞,B線程次之, 然后A線程初始化完畢之后啟動DHCP,得到IP地址就開始向此號段盡享廣播,就是在這個廣播中出錯了,在廣播完畢之后我進行了線程睡眠,正事這個線程睡眠使得系統(tǒng)掛起這個線程,但是此時這個UDP端口沒有注銷,然后轉(zhuǎn)而執(zhí)行B線程,創(chuàng)建好了UDP另一個端口,就在此時A線程睡眠完畢,毫不猶豫的搶了B線程的CPU時間片,導(dǎo)致B線程還沒有完全的執(zhí)行完畢,就被搶走了,如果此時來一個UDP包從手機發(fā)來就會導(dǎo)致UDP線程收不到,因為此時CPU正在A線程處執(zhí)行關(guān)閉端口程序呢,UDP收不到就導(dǎo)致TCP無法啟動,那么為什么用網(wǎng)絡(luò)調(diào)試助手可以呢?因為網(wǎng)絡(luò)調(diào)試助手是手動的,非常慢,等你發(fā)的時候A線程早已經(jīng)結(jié)束了關(guān)閉端口命令,而且B線程也得到了足夠的時間執(zhí)行也堵塞在一個郵箱上,所以再來UDP數(shù)據(jù)是可以收到的,反之,手機回復(fù)速度小于線程睡眠時間,導(dǎo)致A線程搶占B線程,以至于有此事,去掉這個縣城睡眠,等待A線程老老實實執(zhí)行完畢,就好了!哈哈!

sendto(sock, send_data, strlen(send_data), 0,
(struct sockaddr *)&server_addr, sizeof(struct
sockaddr));
thread_delay(50);
close(sock);

此乃罪魁禍首!  實在是忽略了呀!實時系統(tǒng)!一點想不到就不行啊!坑爹!


作者: xuwei    時間: 2015-6-13 01:52
    今天是最后一個工作日了。對ADC進行調(diào)整,采樣率始終達不到300KHZ,所有的流程都對,輸入時鐘是22MHZ2分頻也就是11MHZ,那么采樣率就是11M/27=400KHZ/秒足夠了,但是通過示波器觀察到的IO翻轉(zhuǎn)沒達到預(yù)定的要求,芯片不咋地,手冊含糊其辭,莫明奇妙的。有待研究。。
突然有些感懷, 職業(yè)生涯很短暫只有短短的一年多時間的嵌入式開發(fā),整理了從工作到目前的所有的程序代碼,寫了每段程序的簡介,歸檔整理交接給同事,一年半前我還是一名電工,電工過度到嵌入式程序開發(fā)我花了整整4年業(yè)余時間去準備,終于如愿以償?shù)淖呱狭碎_發(fā)崗位,在這一年半中幾乎比我這4年學(xué)習(xí)的東西的總和還要多,我第一次的真正意義上搞明白了多處理機的機制和實現(xiàn),真正意義的把軟件和硬件聯(lián)系起來,更加熟悉了TCP/IP協(xié)議,搞懂了神馬叫做軟核和硬核,使用了至少3款操作系統(tǒng)編程,后來才發(fā)現(xiàn)原來以前覺得那么難,其實也不過如此,天下大同,搞了一年的433通訊距離的問題原來不是我程序?qū)懙膯栴}而是硬件的天線不匹配造成了,所有的指責(zé)都是沒有道理的,我沒錯,程序是正確的,更加深刻的明白了算法和數(shù)據(jù)結(jié)構(gòu)是多么多么的重要,至于驅(qū)動程序什么的還是停留在一年前的水平,也就是這些年加深了自己的軟件層面的東西,真真意義的做了幾片PCB,知道了流程和原理,雖然做的不好,但是總是有東西出來了,不虛此行,硬件遠遠比想象的要廣博。好多好多.....
過些日子就要離開了,離開了一起合作的同事,一起傻逼的日子,有點小傷感,也許真的愛好不能當成職業(yè),也許。。。。
不過認識了一大堆的朋友,還是很慶幸的,一個終結(jié)就是另一個的開始,就是這樣,好還是壞誰也不知道。
其實我早已做好準備,收入銳減,地位不保,環(huán)境不優(yōu)越,規(guī)范嚴苛,可是老王你難道忘記你曾經(jīng)談過的棉花了嗎?
未來的日子,嵌入式軟件學(xué)習(xí)還不能放,即使不干也要繼續(xù)走下去,那是我的夢,還有好多未搞明白的知識。。。加油吧!
下午和小弟們開玩笑說:以前我總是號令你們,明天終于我成了別人的小弟哈哈!
加油吧!沒什么可說的,




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1