鷹空獨(dú)舞
          邁著慵懶的步子,走在成長路上..... Dead
          posts - 4,comments - 1,trackbacks - 0
               摘要: 在STM32的固件庫和提供的例程中,到處都可以見到assert_param()的使用。如果打開任何一個(gè)例程中的stm32f10x_conf.h文件,就可以看到實(shí)際上assert_param是一個(gè)宏定義;  閱讀全文
          posted @ 2012-05-31 16:53 鷹空獨(dú)舞 閱讀(23930) | 評(píng)論 (1)編輯 收藏

          OSTaskCreate()
          函數(shù)原型:INT8U OSTaskCreate(void(*task)(void *pd),void *pdata,OS_STK *ptos,INT8U prio)
          調(diào)用者:任務(wù)或者是初始化代碼。
          作用:建立一個(gè)新任務(wù),任務(wù)的建立可以在多個(gè)任務(wù)環(huán)境啟動(dòng)之前,也可以在正在運(yùn)行的任務(wù)中建立,中斷處理程序中不能建立任務(wù),一個(gè)任務(wù)必須為無限循環(huán)結(jié)構(gòu),且不能有返回點(diǎn)。無論用戶程序中是否產(chǎn)生中斷,在初始化任務(wù)堆棧時(shí),堆棧的結(jié)構(gòu)必須與處理器中斷后寄存器入棧的順序結(jié)構(gòu)相同。

          該函數(shù)返回一個(gè)8位的整形數(shù),調(diào)用該函數(shù)需要四個(gè)參數(shù):
          a 第一個(gè)參數(shù):task是一個(gè)指向任務(wù)代碼的指針,也就是用戶代碼的首地址,平常使用中我們把自己創(chuàng)建的任務(wù)的名字作為這個(gè)參數(shù)即可。
          b 第二個(gè)參數(shù):pdata指向一個(gè)數(shù)據(jù)結(jié)構(gòu),該結(jié)構(gòu)用來在建立任務(wù)時(shí)向任務(wù)傳遞參數(shù)。
          c 第三個(gè)參數(shù):ptos是指向任務(wù)堆棧棧頂?shù)闹羔槪话惆褎?chuàng)建的任務(wù)的堆棧數(shù)組首地址賦給它。
          任務(wù)堆棧用來保存局部變量,函數(shù)參數(shù),返回地址以及任務(wù)被中斷時(shí)處理器寄存器的內(nèi)容,任務(wù)堆棧的大小決定于任務(wù)的需要以及預(yù)計(jì)的中斷嵌套層數(shù)。計(jì)算堆棧的大小需要知道任務(wù)的局部變量所占的空間,可能產(chǎn)生嵌套調(diào)用的函數(shù),及中斷嵌套所需的空間,如果初始化常量OS_STK_GROWTH設(shè)為1,堆棧被設(shè)為從內(nèi)存高地址向低地址增長,此時(shí)ptos應(yīng)該指向任務(wù)堆棧空間的最高地址,反之,如果OS_STK_GROWTH設(shè)為0,堆棧將從內(nèi)存的低地址向高地址增長。
          d 第四個(gè)參數(shù):prio是任務(wù)的優(yōu)先級(jí)。每個(gè)任務(wù)必須有一個(gè)唯一的優(yōu)先級(jí)作為標(biāo)識(shí),數(shù)字越小,優(yōu)先級(jí)越高。

          返回值:
          OSTaskCreate()的返回值為下述之一:
          # OS_NO_ERR: 函數(shù)調(diào)用成功。
          # OS_PRIO_EXIST:具有該優(yōu)先級(jí)的任務(wù)已經(jīng)存在。
          # OS_PRIO_INVALID: 參數(shù)指定的優(yōu)先級(jí)大于OS_LOWEST_PRIO
          # OS_NO_MORE_TCB: 系統(tǒng)中沒有OS_TCB可以分配給任務(wù)了。

          注意:
          1 任何堆棧必須聲明為OS_STK類型。
          2 在任務(wù)中必須調(diào)用uCOS提供的下述過程之一:延時(shí)等待,任務(wù)掛起,等待事件發(fā)生(等待信號(hào)量,消息郵箱,消息隊(duì)列),以便其他任務(wù)能得到cpu。
          3 程序中不能使用優(yōu)先級(jí)0,1,2,3,以及OS_LOWEST_PRIO-3,OS_LOWEST_PRIO-2,OS_LOWEST_PRIO-1,

          OS_LOWEST_PRIO,這些優(yōu)先級(jí)系統(tǒng)保留,其余的56個(gè)優(yōu)先級(jí)提供給應(yīng)用程序。

          范例:
          本例中,傳遞給任務(wù)Task1()的參數(shù)pdata不使用,所以指針pdata被設(shè)為NULLL,注意到程序中設(shè)定堆棧向低地址增長,傳遞的棧頂指針為高地址&Task1[1023],如果在你的程序中設(shè)定堆棧向高地址增長,則傳遞的棧頂指針應(yīng)該為&Task1Stk[0]。
          OS_STK Task1Stk[1024];
          void main(void)
          {
          NT8U err;
             ...
          OSInit();//初始化uCOS-II
          ....
          OSTaskCreate(Task1,(void *)0,&Task1Stk[1023],25);
          ...
          OSStart();//啟動(dòng)多任務(wù)環(huán)境
          }

          void Task1(void *pdata)
          {
          pdata=pdata;
          for(;;)
          {
          ......   //任務(wù)代碼
          }

          }

          posted @ 2012-05-31 16:23 鷹空獨(dú)舞 閱讀(504) | 評(píng)論 (0)編輯 收藏
          NAND FLASH  與NOR FLASH 的區(qū)別

          與Nand Flash對應(yīng)的是另一種Flash:Nor Flash,其對應(yīng)的特點(diǎn)是:
          “NorFlash的特點(diǎn)是芯片內(nèi)執(zhí)行(XIP,eXecute In Place),這樣應(yīng)用程序可以直接在flash閃存內(nèi)運(yùn)行,不必再把代碼讀到系統(tǒng)RAM中。如uboot中的ro段可以直接在NorFlash上運(yùn)行,只需要把rw和zi段拷貝到RAM中運(yùn)行即可。 ”

          而相應(yīng)地,Nand Flash比較特殊:
          “NandFlash器件使用復(fù)雜的I/O口來串行地存取數(shù)據(jù),8個(gè)引腳用來傳送控制、地址和數(shù)據(jù)信息。由于時(shí)序較為復(fù)雜,所以一般CPU最好集成NAND控制器。另外由于NandFlash沒有掛接在地址總線上,所以如果想用NandFlash作為系統(tǒng)的啟動(dòng)盤,就需要CPU具備特殊的功能,如s3c2410在被選擇為NandFlash啟動(dòng)方式時(shí)會(huì)在上電時(shí)自動(dòng)讀取NandFlash的4k數(shù)據(jù)到地址0的SRAM中。如果CPU不具備這種特殊功能,用戶不能直接運(yùn)行NandFlash上的代碼,那可以采取其他方式,比如好多使用NandFlash的開發(fā)板除了使用NandFlash以外,還用上了一塊小的NorFlash來運(yùn)行啟動(dòng)代碼。”

          至于,為什么Nand Flash不能進(jìn)行XIP的原因,主要是由于物理上的硬件限制,
          在讀取Flash時(shí)候,容易出現(xiàn)“位翻轉(zhuǎn)(bit convert)”:
          “在Flash的位翻轉(zhuǎn)(一個(gè)bit位發(fā)生翻轉(zhuǎn))現(xiàn)象上,NAND的出現(xiàn)幾率要比NorFlash大得多。這個(gè)問題在Flash存儲(chǔ)關(guān)鍵文件時(shí)是致命的,所以在使用NandFlash時(shí)建議同時(shí)使用EDC/ECC等校驗(yàn)算法。 ”

          但是,如果能保證不出錯(cuò),也還是可以進(jìn)行XIP,可以在其上執(zhí)行代碼的:
          “所謂XIP,就是CODE是在FLASH上直接運(yùn)行. NANDFLASH只是不適合做XIP,但并不是不能做XIP.
          要一段CODE能夠正確的運(yùn)行,要保證它的CODE是連續(xù)的,正確的.
          由于一些電氣特性的原因,NOR FLASH能夠做到這一點(diǎn),不存在壞道或壞塊,所以能夠做XIP.
          而對于NAND FLASH, 它只保證它的BLOCK 0是好的,其他的塊并不保證,雖然出錯(cuò)的幾率比較低,但還是有出錯(cuò)的可能,所以CODE可能無法連續(xù)正確地執(zhí)行.
          但只要你有額外的保障措施,比如說在執(zhí)行CODE之前去做一次ECC校驗(yàn),來確保CODE是連續(xù)正確的.那你也可以做XIP. 事實(shí)上我就正在這么做,而且也證明是成功的. ”

          posted @ 2012-05-29 16:46 鷹空獨(dú)舞 閱讀(396) | 評(píng)論 (0)編輯 收藏
          再做課程設(shè)計(jì)時(shí)遇到的問題,及相應(yīng)解決辦法
          1.添加背景音樂(設(shè)計(jì)的界面太單調(diào),以前只是知道一些基本語法,現(xiàn)想提升一下自己)
          主要代碼如下:
          import java.io.*; 
          import java.awt.*;
          import java.net.MalformedURLException; public static void main(String args[]) { 
          try {
          URL cb;
          File f = new File("C:\\Documents and Settings\\Administrator\\桌面\\刀出鞘.wav"); //引號(hào)里面的是音樂文件所在的絕對路徑
          cb = f.toURL();
          AudioClip aau;
          aau = Applet.newAudioClip(cb);
          //aau.play();
          aau.loop();
          //循環(huán)播放 aau.play() 單曲 aau.stop()停止播放
          }
           catch (MalformedURLException e){
              e.printStackTrace();
             } 
          }

          2.添加背景圖片
          主要代碼:
          import java.swing.*;
          final ImageIcon img=new ImageIcon("jiemian.jpg"); 
              JPanel jpnl =new JPanel(){  
                 public void paintComponent(Graphics g){  
                   g.drawImage(img.getImage(),0,0,580,500,null,null);  
                   super.paintComponent(g);} };
                 jpnl.setBounds(0,0,587,540);
                 jpnl.setOpaque(false);  
          3.鍵盤輸入識(shí)別
          識(shí)別'Enter'鍵,主要代碼:
           public void keyPressed(KeyEvent ke){
            if(ke.getKeyChar() == ke.VK_ENTER){  //以前不知道,原來有一個(gè)系統(tǒng)中有專門的常量對應(yīng)鍵盤特殊按鈕
             System.out.println ("ok................") ;
            }
           }
          4.按鈕數(shù)組及其響應(yīng) (剛開始時(shí)把它想復(fù)雜了)
          主要代碼:
          JButton btn[]=new JButton[5];
          .......
          void  define(){
              btn[0]=new JButton("btn1");
              btn[1]=new JButton("btn2");
              btn[2]=new JButton("btn3");
              btn[3]=new JButton("<html>按鈕四<br>和 按鈕五</html>");   //<html>......<br>可以實(shí)現(xiàn)按鈕上字符串換行顯示的功能
              btn[4]=new JButton("btn6");
              for(int i=0;i<5;i++)
              {
                btn[i].addActionListener(new ActListen());
              }
          }
           class ActListen implements ActionListener
           {
             public void actionPerformed(ActionEvent e)
           {
            JButton butn=(JButton)e.getSource();
            if(butn==btn[1]){            
              }        
            else if(butn==btn[2]){       
            }
            else if(butn==btn[0]){   
             }
             else if(butn==btn[3]){   
             }
            else if(butn==btn[4]){
             }
          }
          .........
          posted @ 2011-01-16 00:18 鷹空獨(dú)舞 閱讀(298) | 評(píng)論 (0)編輯 收藏
          僅列出標(biāo)題  
          主站蜘蛛池模板: 阳春市| 安仁县| 新津县| 太谷县| 岚皋县| 济宁市| 金平| 团风县| 同德县| 襄汾县| 巴彦淖尔市| 余干县| 睢宁县| 乌拉特后旗| 宝清县| 沾化县| 滁州市| 娄烦县| 澄城县| 綦江县| 吉安市| 连南| 六盘水市| 商河县| 天峻县| 汝阳县| 花莲县| 武平县| 玉门市| 义乌市| 荆门市| 外汇| 黑山县| 百色市| 郎溪县| 望城县| 黎平县| 富民县| 凤冈县| 卓尼县| 兴文县|