韩国美女高清爽快一级毛片-韩国美女毛片-韩国美女人成网站在线看看-韩国美女丝袜一区二区-韩国美女一级毛片-韩国美女一级片

24小時聯系電話:18217114652、13661815404

中文

您當前的位置:
首頁>
電子資訊>
行業資訊>
帶外部RAM的AVR上的Fr...

行業資訊

帶外部RAM的AVR上的FreeRTOS


由于片內RAM較低,因此AVR微控制器不是運行FreeRTOS調度程序的最佳選擇。Atmega128僅具有4K RAM,因此這將FreeRTOS功能限制為非常基本的功能。無論如何,可以通過添加可能連接到外部存儲器接口的額外RAM來解決此問題。以前我們已經構建了8K的外部存儲塊,所以現在我們可以使用FreeRTOS應用程序對其進行測試。



  讓我們繼續前面的代碼,該代碼運行一些簡單的任務(按鈕狀態讀取,LCD輸出和LED閃光燈),并且我們可以添加更多內容。我們將建立一個用于存儲堆的外部RAM。這將允許存儲大型數據緩沖區,而不必過多擔心堆和棧的重疊。


  首先,我們需要注意鏈接器選項。在AVRStudio5項目屬性中,AVR / GNU C鏈接器->其他輸入鏈接器選項:

 
  <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">-Wl,-defsym = __ heap_start = 0x801100,-defsym = __ heap_end = 0x8030ff</font></font>


  這將指示鏈接器僅將0x801100到0x8030ff(整個外部RAM)的內存區域用于堆。
  第二步是設置微控制器以使用外部存儲器。為了使內容整潔和模塊化,我們將創建單獨的驅動程序源文件xmem.c和xmem.h。并編寫簡單的XMEM_init()函數:

  <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">無效vXMEMInit(void)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  {</font></font><font></font>
    MCUCR |= (1<<SRE);   /* External memory interface enable */<font></font>
    XMCRA = 0;<font></font>
    XMCRB |= (1<<XMM1)|(1<<XMM0);//PC7..PC5 released pins<font></font>
  }
  在主例程的開頭,我們簡單地調用此函數以在使用外部RAM之前對其進行初始化。

  編寫USART驅動程序
  我們將需要USART功能,以方便的方式調試和顯示信息。因此,首先,我們需要可以在任務中使用的驅動程序。使用USART的最方便的方法可能是通過隊列發送消息。這樣,任何任務都可以通過使用消息傳遞服務而不是直接訪問外圍設備來與USART通信。因此,我們將實現兩個隊列–一個用于TX,另一個用于RX通道。

  //receive and transmit queues<font></font>
  <font></font>
  xQueueHandlexRxedChars=NULL;<font></font>
  <font></font>
  xQueueHandlexCharsForTx=NULL;
  然后在USART初始化期間,我們創建隊列。

  xRxedChars=xQueueCreate(uxQueueLength,(signedchar)sizeof(signedchar));<font></font>
  <font></font>
  xCharsForTx=xQueueCreate(uxQueueLength,(signedchar)sizeof(signedchar));
  隊列長度是在初始化USART時給出的(在我們的示例中為30)。現在,當隊列準備就緒時,就可以使用它們與USART通信。通過兩個自定義函數放置和讀取發送到隊列的消息,這使生活更輕松:
  portBASE_TYPE xUSART0PutChar(unsigned char cOutChar)<font></font>
  {<font></font>
  //Return false if after the block time there is no room on the Tx queue.<font></font>
    if( xQueueSend( xCharsForTx, &cOutChar, xBlockTime ) != pdPASS )<font></font>
    {<font></font>
        return pdFAIL;<font></font>
    }<font></font>
    //enable usart UDRE interrupt to transmit<font></font>
    prvUDRIE0InterruptOn();<font></font>
    return pdPASS;<font></font>
  }<font></font>
  portBASE_TYPE xUSART0GetChar(unsigned char *pcRxedChar)<font></font>
  {<font></font>
  /* Get the next character from the buffer.  Return false if no characters<font></font>
    are available, or arrive before xBlockTime expires. */<font></font>
    if( xQueueReceive( xRxedChars, pcRxedChar, xBlockTime ) )<font></font>
    {<font></font>
        return pdTRUE;<font></font>
    }<font></font>
    else<font></font>
    {<font></font>
        return pdFALSE;<font></font>
    }<font></font>
  }
  當接收器隊列中沒有字符且發送隊列已滿時,這些功能可提供額外的安全性。您可能會注意到,在xUSART0PutChar()中調用了一個私有函數prvUDRIE0InterruptOn()。一旦發送隊列中至少有一個字符,這將啟用USART數據就緒中斷。

  通過中斷例程執行USART發送和接收。

請輸入搜索關鍵字

確定
主站蜘蛛池模板: 亚洲精品影视 | 日韩精品中文字幕在线 | 91在线观 | 色鬼久久爱综合久久鬼色 | 亚洲综合99 | 特级毛片免费观看视频 | 99er这里只有精品 | 日韩亚洲欧美综合一区二区三区 | 亚洲精品久久中文字幕 | 亚洲精品一区二区三区不卡 | 亚洲欧美综合乱码精品成人网 | 欧美国产一区二区三区 | 亚洲欧美精品网站在线观看 | 中文一区在线 | 四虎影视成人永久在线观看 | 曰本女人一级毛片看一级毛 | 高清一级毛片免免费看 | 成人在线a | 成人www视频网站免费观看 | 欧美激情在线播放一区二区 | 奇米网狠狠干 | 在线国产一区 | 国产男女在线观看 | 在线第一福利视频观看 | 免费福利网站在线观看 | 久久综合给合久久97色美利坚 | 国产精品9999 | 免费视频网站在线观看黄 | 狠狠做狠狠做综合日日 | 奇米影视777色 | 亚洲性图第一页 | 中文字幕亚洲欧美日韩高清 | 精品一区二区视频在线观看 | 国产精品亚洲欧美日韩一区在线 | 亚洲精品色 | 中文日韩字幕一区在线观看 | 综合网五月 | 久操免费在线观看 | 国产精品久久久久桃色tv | 日韩精品欧美一区二区三区 | 亚洲精品久久久午夜伊人 |