2014年10月3日

2014/10/03 進階微控制器應用


  1. 至MY數位學習下載Posix_GCC_Simulator_6.0.4.zip
  2. cd micro,在~/micro 下解壓縮
  3. unzip ~/下載/Posix_GCC_Simulator_6.0.4.zip
  4. 在~/micro 下 cd Posix_GCC_Simulator/FreeRTOS_Posix/Release/
  5. 在~/micro/Posix_GCC_Simulator/FreeRTOS_Posix/Release/  執行make




這是我筆電Debian底下的指令
clementyan@Lenovo-B480:~/Document$ cd micro/
clementyan@Lenovo-B480:~/Document/micro$ mv ../../Downloads/Posix_GCC_Simulator_6.0.4.zip ./
clementyan@Lenovo-B480:~/Document/micro$ ls
edsim51di  edsim51di.zip  Posix_GCC_Simulator_6.0.4.zip
clementyan@Lenovo-B480:~/Document/micro$ unzip Posix_GCC_Simulator_6.0.4.zip 
Archive:  Posix_GCC_Simulator_6.0.4.zip
   creating: Posix_GCC_Simulator/
.
.
  inflating: Posix_GCC_Simulator/FreeRTOS_Posix/Debug/FreeRTOS_Kernel/portable/GCC/Posix/subdir.mk  
clementyan@Lenovo-B480:~/Document/micro$ cd Posix_GCC_Simulator/FreeRTOS_Posix/
AsyncIO/         Debug/           FreeRTOS_Kernel/ Release/
Common_Demo/     FileIO/          ParTest/         
clementyan@Lenovo-B480:~/Document/micro$ cd Posix_GCC_Simulator/FreeRTOS_Posix/Release/
clementyan@Lenovo-B480:~/Document/micro/Posix_GCC_Simulator/FreeRTOS_Posix/Release$ make
clementyan@Lenovo-B480:~/Document/micro/Posix_GCC_Simulator/FreeRTOS_Posix/Release$ ls
AsyncIO      FileIO           FreeRTOS_Posix  main.o    objects.mk  sources.mk
Common_Demo  FreeRTOS_Kernel  main.d          makefile  ParTest     subdir.mk

------------------------------------------------------------------------------------------------------------

若不是Debian是用學校電腦Ubuntu可能會有錯誤則其解決步驟為下列
  1. 先確定/usr/lib/i386-linux-gnu/librt.so是否存在,若不存在需安裝 sudo apt-get install libc6-dev 
  2. 編輯/Posix_GCC_Simulator/FreeRTOS_Posix/Release內之makefile,第39行 gcc -pthread -lrt -o"FreeRTOS_Posix".......改為gcc -L/usr/lib/i386-linux-gnu -o"FreeRTOS_Posix".....-pthread -lrt
  3. 儲存關閉
  4. ~$ make clean
  5. ~$ make
------------------------------------------------------------------------------------------------------------
在~/micro/Posix_GCC_Simulator/FreeRTOS_Posix/Release建立task資料夾
mkdir task

寫main.c
gedit(vim) main.c &
至MY數位學習教教材三 主程式模板(main.c)之內容複製到main.c

建立工作之函式
xTaskCreate(工作函式,工作描述字串,堆疊深度,參數,優先順序,工作指標)
工作函式宣告
void 工作函式名(void * pvParams);
說明:void表示任何型態接可以用
例:
void vTask1(void *pvParams) {
  .
  .
}
int main() {
  xTaskCreate(vTask1,"Task1",100~1000,NULL,1,NULL);//說明:1表示最低優先
  vTaskStartScheduler();//開始工作排程
  while(1);
  return 0;
}

void vTask1(void *pvParams)
{
    char *str="Task 1\n";
    int dlyCnt;
    while(1) {
      printf(str);
      for(dlyCnt=0;dlyCnt<10000;dlyCnt++);
    }
}

int main() {
  xTaskCreate(vTask1,"Task1",100,NULL,1,NULL);
  xTaskCreate(vTask2,"Task2",100,NULL,1,NULL);
  xTaskCreate(vTask2,"Task3",100,NULL,1,NULL);
  vTaskStartScheduler();
  while(1);
  return 0;
}

在task目錄下更換目錄到Release
cd ..
cp task/main.c ../.
make clean
make
執行 ./FreeRTOS_Posix

目前執行僅在ready與running方塊跑


當把task 3之優先順序改為2時,task1,task2將不被執行,此稱為starvation(飢餓)
要解決飢餓需使工作可以進入阻斷狀態
呼叫vTaskDelay           被喚醒時才開始計數滴答,時間不固定
        vTaskDelayUnt:1  固定延遲時間,可作週期
呼叫delay使其可以進入blocked阻斷狀態

vTaskDelay(延遲之滴答數)
當工作呼叫vTaskDelay時工作會進入阻斷狀態,從此滴答數起算到延遲之滴答次數時,工作進入就緒狀態
通常一秒鐘滴答一百次
一滴答多久要看系統設定

上ㄧ篇     下一篇

沒有留言:

張貼留言

文章有誤或有問題麻煩您留言告知! 謝謝您~~