MSP432P401R TI Drivers 库函数学习笔记(三)认识任务的创建及图形化配置
目錄
- 任務的簡單創建
- 圖形化配置上手
- 簡簡單單點個燈
- 配置引腳
- 建立任務
- 實驗結果
- 整體代碼
- main.c
- myTask.c
- myTask.h
平臺:Code Composer Studio 10.4.0
MSP432P401R SimpleLink? 微控制器 LaunchPad? 開發套件
(MSP-EXP432P401R)
任務的簡單創建
根據上篇機翻的函數作用,及觀察本例程模板,可總結出使用默認參數初始化線程任務的函數:
三個參數分別是線程任務名,優先級和堆棧大小
為方便管理
我在工程目錄下新建了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)用于微秒級的掛起
在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 库函数学习笔记(三)认识任务的创建及图形化配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android Json 解析
- 下一篇: AB PLC 1769_L24ER_QB