• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            2010年8月8日

            SVN客戶端腳本(LUA)

             1 --打開日志文件
             2 svnlogPath = assert(arg[3], "路徑為空");
             3 svnlog = assert(io.open(svnlogPath, "r"), "打開日志文件失敗!");
             4 
             5 --日志是否為空
             6 if svnlog:read(0== nil then
             7     --日志為空
             8     svnlog:close();
             9     io.stderr:write("請填寫日志!");
            10     os.exit(1);
            11 else
            12     --檢查日志內容
            13     local count = 1;
            14     while true do
            15         local line = svnlog:read();
            16 
            17         if line == nil then
            18             break;
            19         end
            20 
            21         --查找是否匹配
            22         if string.len(line) > 0 then
            23             if not string.find(line, ".:%s*%S") then
            24                if not string.find(line, ".\239\188\154%s*%S") then
            25                  svnlog:close();
            26                  io.stderr:write("日志沒有填寫完整");
            27                  os.exit(1);
            28                 end
            29             end
            30         end
            31 
            32         count = count + 1;
            33     end
            34 
            35     --檢查行數是否>6行
            36     if count < 6 then
            37          svnlog:close();
            38          io.stderr:write("請填寫完整日志! ");
            39          os.exit(1);
            40     end
            41 
            42 end
            43 
            44 svnlog:close();
            45 

            posted @ 2010-08-08 21:22 gewala 閱讀(430) | 評論 (0)編輯 收藏

            2009年11月8日

            在EZ430開發板的串口類異常

              我發現串口類cnComm在串口轉USB的設備上有些能工作(USB430),但在EZ430上卻不能工作,很奇怪!我懷疑是硬件問題,畢竟串口轉USB硬件上有差別。我發現cnComm的線程一直收到一些不存在的事件,導致死循環。
              今天上網看了一篇資料,說是那個DCB配置了硬件握手協議導致了一些不支持這個功能的串口轉USB設備出錯。我覺得有點道理,有時間試驗一下。先看一下cnComm的DCB配置情況。

            摘抄

                使用API進行串口編程時設置串口屬性(SetCommState)是一條必經之路,其DCB結構幾乎涵蓋了所有和串口通訊相關的資源設置,由于有些設備需要使用RTS和CTS進行數據的收發控制,為了提高接收效率可以使用RTS握手選項dcb.fRtsControl=RTS_CONTROL_HANDSHAKE; 在標準串口下使用一切正常,但在一些沒有標準串口的筆記本上卻不能發送數據,后經過仔細排查發現就是RTS握手選項搞的鬼,關閉此選項后一切恢復正常。

                由于公司只有一種USB轉RS232的設備,所以也沒有測試其他品牌/類型的設備是否也存在這個問題。如果有朋友遇到串口通訊在USB轉RS232下不好用的時候,可以看看RTS握手選項的狀態。


                發現cnComm打開了發送和接收的流控制,fDtrControl=DTR_CONTROL_ENABLE,fRtrControl=RTR_CONTROL_ENABLE。有可能是這個原因。

            posted @ 2009-11-08 00:00 gewala 閱讀(426) | 評論 (0)編輯 收藏

            2009年11月3日

            內存溢出檢測學習

              最近發現CRT控制臺程序沒有TRACE和內存溢出檢查,很郁悶。無聊中翻看MSDN的Memory Management and the Debug Heap篇,發現C的Debug版本用_malloc_dbg代替malloc,而_malloc_dbg者給數據堆加上一個控制頭組成鏈表,方便記錄溢出。原話如下:
              When you request a memory block, the debug heap manager allocates from the base heap a slightly larger block of memory than requested and returns a pointer to your portion of that block. For example, suppose your application contains the call: malloc( 10 ). In a release build, malloc would call the base heap allocation routine requesting an allocation of 10 bytes. In a debug build, however, malloc would call _malloc_dbg, which would then call the base heap allocation routine requesting an allocation of 10 bytes plus approximately 36 bytes of additional memory. All the resulting memory blocks in the debug heap are connected in a single linked list, ordered according to when they were allocated:
              那個控制頭的數據結構如下:
            typedef struct _CrtMemBlockHeader
            {
            // Pointer to the block allocated just before this one:
               struct _CrtMemBlockHeader *pBlockHeaderNext; 
            // Pointer to the block allocated just after this one:
               struct _CrtMemBlockHeader *pBlockHeaderPrev; 
               
            char *szFileName;   // File name
               int nLine;          // Line number
               size_t nDataSize;   // Size of user block
               int nBlockUse;      // Type of block
               long lRequest;      // Allocation number
            // Buffer just before (lower than) the user's memory:
               unsigned char gap[nNoMansLandSize];  
            } _CrtMemBlockHeader;

              這個nBlockUse有6種內存塊,具體含義還沒有搞清楚,分別如下
            /* Memory block identification */
            #define _FREE_BLOCK      0
            #define _NORMAL_BLOCK    1
            #define _CRT_BLOCK       2
            #define _IGNORE_BLOCK    3
            #define _CLIENT_BLOCK    4
            #define _MAX_BLOCKS      5
              檢測內存溢出用_CrtDumpMemoryLeaks(),在crtdbg.h中定義。有時間研究一下crtdbg.h文件。
              參考http://www.cnblogs.com/phinecos/archive/2009/10/29/1592604.html


            posted @ 2009-11-03 22:53 gewala 閱讀(1067) | 評論 (0)編輯 收藏

            2009年10月21日

            一個時間軟件

              從NIST網站上下了個時間軟件,看起來很古老,但功能強大。我在NIST網站上一直找不到網絡時間服務器,但在這個軟件中發現可以下載更新服務器地址,很好很強大。
            下載
             

            posted @ 2009-10-21 22:18 gewala 閱讀(250) | 評論 (0)編輯 收藏

            2009年10月20日

            一些API函數--《windows程序設計》

               《window程序設計》果然是經典,相對于MFC來說SDK簡直是返璞歸真啊。繼續摘錄一些API函數和技巧:
              CheckRadioButton(hwnd,IDC_SERVER1,IDC_SERVER10, wServer);
              1、Selects (adds a check mark to) a given radio button in a group and clears (removes a check mark from) all other radio buttons in the group. 在IDC_SERVER1-IDC_SERVER10中選中wServer的ID,有點像分組。

              DialogBoxParam (hInst, TEXT ("Servers"), hwnd, ServerDlg, (LPARAM) szIPAddr);
              2、可以在WM_INITDIALOG的LPARAM傳參數,建立模態對話框。ServerDlg為消息處理函數,szIPAddr為參數,在WM_INITDIALOG消息響應中處理LPARAM的值。

            typedef char *  va_list;

            #define _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
            #define va_start(ap,v)  ( ap = (va_list)&v + _INTSIZEOF(v) )
            #define va_arg(ap,t)    ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
            #define va_end(ap)      ( ap = (va_list)0 )
              3、va_list可變參數的結構,有點復雜慢慢看。
              一般的用法是這樣(個人理解)
            va_list args; //聲明變量
            va_start(args, fmt); //開始解析。args指向fmt后面的參數
            TYPE var = va_arg(args, TYPE); //取下一個參數并返回。args指向下一個參數
            va_end(args); //結束解析
            http://hi.baidu.com/kang_liang/blog/item/168c9059a9a1ca2d2934f05f.html

              4、wsprintf和wvsprintf的區別,從它們的參數可以看出。
            int wsprintf(
              LPTSTR lpOut,    
            // output buffer
              LPCTSTR lpFmt,   // format-control string
                            // optional arguments
            );

            int wvsprintf( LPTSTR lpOutput, // buffer for output
                           LPCTSTR lpFormat, // format-control string
                           va_list
            // variable list of format-control arguments
                           );

              wsprintf純粹是格式化字符串,wvsprintf是以參數列表Va_list格式化字符串。

            posted @ 2009-10-20 22:36 gewala 閱讀(530) | 評論 (0)編輯 收藏

            2009年10月19日

            strtok用法--提取字符串

                最近看Petzold的《windows程序設計》,在Internet那章中看到如何在字符串中提取IP地址,特地標記一下:
            1 GetDlgItemTextA (hwnd, wServer, szLabel, sizeof (szLabel));
            2 strtok (szLabel, "(");
            3 strcpy (szServer, strtok (NULL, ")"));
                在Msdn上查了一下,有下面一段:

                On the first call to strtok , the function skips leading delimiters and returns a pointer to the first token in strToken , terminating the token with a null character. More tokens can be broken out of the remainder of strToken by a series of calls to strtok . Each call to strtok modifies strToken by inserting a null character after the token returned by that call. To read the next token from strToken , call strtok with a NULL value for the strToken argument. The NULL strToken argument causes strtok to search for the next token in the modified strToken . The strDelimit argument can take any value from one call to the next so that the set of delimiters may vary.

            Warning    Each of these functions uses a static variable for parsing the string into tokens. If multiple or simultaneous calls are made to the same function, a high potential for data corruption and inaccurate results exists. Therefore, do not attempt to call the same function simultaneously for different strings and be aware of calling one of these function from within a loop where another routine may be called that uses the same function.  However, calling this function simultaneously from multiple threads does not have undesirable effects.

                看來用了靜態變量,還好有多線程的C運行庫,否則在多線程在有麻煩了。

            posted @ 2009-10-19 23:05 gewala 閱讀(2343) | 評論 (0)編輯 收藏

            僅列出標題  
            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            導航

            統計

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            設計模式 網絡編程

            網絡

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            99久久精品国产综合一区| 久久精品一区二区三区中文字幕 | A狠狠久久蜜臀婷色中文网| 97久久久久人妻精品专区| 91精品久久久久久无码| 久久久精品久久久久特色影视| 一本一道久久a久久精品综合| 无码人妻久久一区二区三区免费| 99久久er这里只有精品18| 国产精品欧美久久久久无广告| 久久久精品人妻无码专区不卡| 亚洲伊人久久综合影院| 99久久免费国产特黄| 精品国产乱码久久久久久呢 | 亚洲欧美日韩精品久久| 久久婷婷国产剧情内射白浆| 狠狠色丁香婷综合久久| 亚洲精品午夜国产va久久| 久久久国产乱子伦精品作者| 国产精品成人无码久久久久久| 午夜精品久久久久久影视riav| 久久er热视频在这里精品| 久久国语露脸国产精品电影| 亚洲精品国产自在久久| 97久久精品人人澡人人爽| 久久影院综合精品| 狠狠综合久久综合88亚洲| 日日狠狠久久偷偷色综合免费 | 欧美精品乱码99久久蜜桃| 国内精品久久久久国产盗摄| 久久综合九色综合精品| 久久国产乱子伦免费精品| 久久发布国产伦子伦精品| 久久综合给久久狠狠97色| 97精品国产97久久久久久免费| 亚洲国产成人久久一区久久| 久久久久亚洲AV成人网人人网站| 精品国产乱码久久久久久郑州公司| 亚洲av日韩精品久久久久久a | 久久九九精品99国产精品| 日本强好片久久久久久AAA |