日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MSP432P401R TI Drivers 库函数学习笔记(三)认识任务的创建及图形化配置

發布時間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MSP432P401R TI Drivers 库函数学习笔记(三)认识任务的创建及图形化配置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 任務的簡單創建
  • 圖形化配置上手
    • 簡簡單單點個燈
      • 配置引腳
      • 建立任務
      • 實驗結果
  • 整體代碼
    • main.c
    • myTask.c
    • myTask.h

平臺:Code Composer Studio 10.4.0
MSP432P401R SimpleLink? 微控制器 LaunchPad? 開發套件
(MSP-EXP432P401R)


任務的簡單創建

根據上篇機翻的函數作用,及觀察本例程模板,可總結出使用默認參數初始化線程任務的函數:
三個參數分別是線程任務名,優先級和堆棧大小

void My_Task_Init(void (*TaskName)(void *arg), int priority, size_t stacksize) {pthread_t thread;pthread_attr_t attrs;struct sched_param priParam;int retc;/* Initialize the attributes structure with default values */pthread_attr_init(&attrs);/* Set priority, detach state, and stack size attributes */priParam.sched_priority = priority;retc = pthread_attr_setschedparam(&attrs, &priParam);retc |= pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_DETACHED);retc |= pthread_attr_setstacksize(&attrs, stacksize);if (retc != 0){/* failed to set attributes */while (1){}}retc = pthread_create(&thread, &attrs, TaskName, NULL);if (retc != 0){/* pthread_create() failed */while (1){}} }

為方便管理
我在工程目錄下新建了src文件夾和inc文件夾
在其中建立了myTask.c 、myTask.h,同時還把工程的一些文件名改了,并刪掉了例程模板中的empty.c

myTask.c

/** myTask.c** Created on: 2021年8月2日* Author: Royic*/#include <stdint.h>/* POSIX Header files */ #include <pthread.h>/* RTOS header files */ #include <ti/sysbios/BIOS.h>/* Driver configuration */ #include "ti_drivers_config.h"/* For usleep() */ #include <unistd.h> #include <stdint.h> #include <stddef.h>#include "./inc/myTask.h"void My_Task_Init(void *(*startroutine)(void *), int priority, size_t stacksize) {pthread_t thread;pthread_attr_t attrs;struct sched_param priParam;int retc;/* Initialize the attributes structure with default values */pthread_attr_init(&attrs);/* Set priority, detach state, and stack size attributes */priParam.sched_priority = priority;retc = pthread_attr_setschedparam(&attrs, &priParam);retc |= pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_DETACHED);retc |= pthread_attr_setstacksize(&attrs, stacksize);if (retc != 0){/* failed to set attributes */while (1){}}retc = pthread_create(&thread, &attrs, startroutine, NULL);if (retc != 0){/* pthread_create() failed */while (1){}} }

myTask.h

/** myTask.h** Created on: 2021年8月2日* Author: Royic*/#ifndef INC_MYTASK_H_ #define INC_MYTASK_H_void My_Task_Init(void *(*startroutine)(void *), int priority, size_t stacksize);#endif /* INC_MYTASK_H_ */

圖形化配置上手

打開.syscfg格式的文件,此為CCS用于圖形化配置的文件

應該是之前TI出的圖形化配置工具TI PinMux的CCS內置版(下圖為TI PinMux)

簡簡單單點個燈

配置引腳


由原理圖可知,P1.0 控制LED1,LED2為RGB燈,其中P2.0控制其中的紅燈
仿造原工程修改其中的GPIO模塊,設LED1為輸出模式,正常(非開漏)模式,驅動能力中等,初始電平為低電平,不上拉下拉

Use Hardware選項是可選板子預設好的GPIO種類,選為None后可在下面的GPIO Pin改為自定義引腳。

同理,設置LED2的紅燈

建立任務

在myTask.c中建立兩個任務
其中一個1s反轉一次LED1,另一個2s反轉一次LED2的紅燈
sleep(n)用于秒級的掛起
usleep(n)用于微秒級的掛起

#include <ti/drivers/GPIO.h> void *LED1_Task(void *arg0) {while (1){sleep(1);GPIO_toggle(LED1);} }void *LED2_Task(void *arg0) {while (1){sleep(2);GPIO_toggle(LED2);} }

在myTask.h中聲明

extern void *LED1_Task(void *arg0); extern void *LED2_Task(void *arg0);

在main中初始化

int main(void) {/* Call driver init functions */Board_init();GPIO_init();My_Task_Init(LED1_Task, 1, 1024);My_Task_Init(LED2_Task, 1, 1024);BIOS_start();return (0); }

實驗結果

可以觀察到兩個任務近似并行同時執行,LED1 約1s翻轉一次,LED2 約2s翻轉一次。

整體代碼

main.c

/** ======== main_tirtos.c ========*/ #include <stdint.h>/* POSIX Header files */ #include <pthread.h>/* RTOS header files */ #include <ti/sysbios/BIOS.h>/* Driver configuration */ #include <ti/drivers/Board.h> #include <ti/drivers/GPIO.h>#include "./inc/myTask.h"/** ======== main ========*/ int main(void) {/* Call driver init functions */Board_init();GPIO_init();My_Task_Init(LED1_Task, 1, 1024);My_Task_Init(LED2_Task, 1, 1024);BIOS_start();return (0); }

myTask.c

/** myTask.c** Created on: 2021年8月2日* Author: Royic*/#include <stdint.h>/* POSIX Header files */ #include <pthread.h>/* RTOS header files */ #include <ti/sysbios/BIOS.h>/* Driver configuration */ #include "ti_drivers_config.h"/* For usleep() */ #include <unistd.h> #include <stdint.h> #include <stddef.h>#include "./inc/myTask.h"#include <ti/drivers/GPIO.h>void My_Task_Init(void *(*startroutine)(void *), int priority, size_t stacksize) {pthread_t thread;pthread_attr_t attrs;struct sched_param priParam;int retc;/* Initialize the attributes structure with default values */pthread_attr_init(&attrs);/* Set priority, detach state, and stack size attributes */priParam.sched_priority = priority;retc = pthread_attr_setschedparam(&attrs, &priParam);retc |= pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_DETACHED);retc |= pthread_attr_setstacksize(&attrs, stacksize);if (retc != 0){/* failed to set attributes */while (1){}}retc = pthread_create(&thread, &attrs, startroutine, NULL);if (retc != 0){/* pthread_create() failed */while (1){}} }void *LED1_Task(void *arg0) {while (1){sleep(1);GPIO_toggle(LED1);} }void *LED2_Task(void *arg0) {while (1){sleep(2);GPIO_toggle(LED2);} }

myTask.h

/** myTask.h** Created on: 2021年8月2日* Author: Royic*/#ifndef INC_MYTASK_H_ #define INC_MYTASK_H_void My_Task_Init(void *(*startroutine)(void *), int priority, size_t stacksize);extern void *LED1_Task(void *arg0); extern void *LED2_Task(void *arg0);#endif /* INC_MYTASK_H_ */

總結

以上是生活随笔為你收集整理的MSP432P401R TI Drivers 库函数学习笔记(三)认识任务的创建及图形化配置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。