walnutcy

STM32最小系统上运行的FreeRTOS源码 [可下载]

0
阅读(3015)

现在STM32越来越普及,快成入门首选了,

有不少网友问我要去年弄的那个最小系统上跑的FreeRTOS,

一直没有答复,东西不好找,换了城市,换了工作,更是换了个人电脑硬盘,很多东西都还是当时存了备份,新工作中不占使用这些,都忘掉放在哪了。

晚上没事,把旧硬盘找出来,最后翻出了这个最简单的版本。

目录结构如下图所示:

其只需要连接一个串口,内部使用freertos运行了三个任务,

主要是做做测试,其中有一个任务实现了简单的shell控制台功能。任务创建如下所示:

 // Walter 20080816
 xTaskCreate( vComTxTask1, ( signed portCHAR * ) "task 1", comSTACK_SIZE, NULL, 2, ( xTaskHandle * ) NULL );
 xTaskCreate( vComTxTask2, ( signed portCHAR * ) "task 2", comSTACK_SIZE, NULL, 1, ( xTaskHandle * ) NULL );
 xTaskCreate( vTaskComConsole, ( signed portCHAR * ) "COMConsole", 256, NULL,tskIDLE_PRIORITY , ( xTaskHandle * ) NULL );

另一点,当时为了个人使用方便,只留下了最简单的OS代码,目录结构与标准的有小变动,这点请大家见谅。

同时该系统演示了如何使用信号量来共享设备,如下

void consolePutString(char *str)
{
    if(uartMutexHandle!=NULL)
    {
        if(xQueueTakeMutexRecursive(uartMutexHandle,(portTickType)10)==pdTRUE)
        {
         while(*str)
          UartxPutCh(*str++);
         xQueueGiveMutexRecursive(uartMutexHandle);
        }     
   }
}

串口采用了队列缓存机制,初学都也可以学习了解一下。

if( USART_GetITStatus( USARTx, USART_IT_RXNE ) == SET )
 {
  tmp = USART_ReceiveData(USARTx) & 0xFF;
  uartx_rxBuffer[uartx_rxIndexIn++] = tmp;
  if (uartx_rxIndexIn>=_MAX_UART_BUFFER_LEN) uartx_rxIndexIn=0;
 }

对串口部分重新配置下,应该就可以在三合的那个小板上运行了。