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 库函数学习笔记(三)认识任务的创建及图形化配置相关推荐
- MSP432P401R TI Drivers 库函数学习笔记(八)ADC
目录 API (机翻) 上机实战 引脚配置 ADC引脚配置 串口引脚配置 指示工作状态的LED1引脚配置 代码部分 ADC初始化和读取函数 myADC.c myADC.h 获取数据并通过串口发送 ma ...
- MSP432P401R TI Drivers 库函数学习笔记(七)I2C驱动OLED屏幕
目录 API (机翻) 上机实战 引脚配置 I2C引脚配置 工作指示灯LED1引脚配置 文件结构 I2C 初始化.读写函数 myI2C.c myI2C.h OLED初始化和测试代码 main.c ma ...
- MSP432P401R TI Drivers 库函数学习笔记(六)UART 串口
目录 API (机翻) 上机实战 配置 初始化和实验 实验结果 整体代码 myUart.c myUart.h myTask.c myTask.h main.c main.h 平台:Code Compo ...
- MSP432P401R TI Drivers 库函数学习笔记(五)PWM
目录 API (机翻) 函数 上机实战 配置引脚 PWM初始化,实现简易呼吸灯的效果 实验结果 完整代码 myPWM.c myPWM.h myTask.c myTask.h main.c main.h ...
- MSP432P401R TI Drivers 库函数学习笔记(四)GPIO
目录 API 头文件 函数 (机翻) 宏 GPIO驱动程序api返回的通用状态代码 GPIO_PinConfig输出引脚配置宏 GPIO_PinConfig输入引脚配置宏 GPIO_PinConfig ...
- MSP432P401R TI Drivers 库函数学习笔记(二)认识TI-RTOS (TI-POSIX)
目录 简介 TI-RTOS FreeRTOS POSIX 运行时对象查看器 (Runtime Object Viewer) TI-POSIX 介绍 在源代码中使用 POSIX TI-POSIX支持的函 ...
- MSP432P401R TI Drivers 库函数学习笔记(一)导入工程模板
目录 从Resource Explorer中导入 从SDK导入 测试 平台:Code Composer Studio 10.4.0 MSP432P401R SimpleLink™ 微控制器 Launc ...
- 【AVR ASF4库函数学习笔记】一、使用Microchip Studio图形化配置工程
目录 新建工程 配置 点灯 效果 平台:Microchip Studio (原Atmel Studio 7) 欣世纪 DMAVR-L Atmega 128A - AU 新建工程 选择所用的芯片后点击C ...
- TIVA_C学习笔记三
TIVA_C学习笔记三 关于解决keil下不了的问题 通过摸索我有发现了另一种下载方式,使用Ti官方的软件LM Flash Programmer软件.但这个软件需要的是.bin文件,keil默认生成的 ...
最新文章
- (30)导入时如何定制spring-boot依赖项的版本【转载】【从零开始学Spring Boot】...
- 关卡 动画 蓝图 运行_上车喂,建模大神带你学UE4在编辑器启动时是如何运行蓝图的...
- 账簿登记重要十条规则
- 39行代码AC_HDU-6740 2019CCPC秦皇岛 J MUV LUV EXTRA(KMP变形)
- Linux 系统服务管理(启动服务/停止服务/重启服务)的命令 - chkconfig/service/systemctl
- 如何将风险应用加入白名单_理财要如何将资金分散呢?可以参考风险分散和分享经济红利的思路...
- GOF设计模式之桥接模式
- IE 7 Standard 模式问题总结
- I2C总线学习—查缺补漏—S3C2440的I2C控制器
- [转帖] 启动多个Tomcat 需要修改的端口
- H3C交换机修改时间
- 抖音快手无水印去水印方法19年11月最新
- mybatis中获取当前时间_mybatis 在xml文件中获取当前时间的sql
- linux添加变色龙引导,变色龙引导工具下载
- 国际结算三大方式之一——托收
- iOS 字体转换
- python中return0与return1_return 0 和return 1的区别
- H5实现win10日历效果
- 微信小程序 富文本 换行问题 文本溢出使用省略号
- React组件通信-非父子组件间的通信
热门文章
- 两个重要而又容易被忽视的角色
- 在应用程序级别以外使用注册为 allowDefinition='MachineToApplication' 的节是错误
- 设计师的10种范式转变
- 请不要更多的基本情节
- web数据交互_通过体育运动使用定制的交互式Web应用程序数据科学探索任何数据...
- 传智播客软件测试第一期_播客:冒险如何推动一位软件工程师的职业发展
- chrome前端开发工具_精通Chrome开发人员工具:更高级别的前端开发技术
- 随机加密_随机艺术和加密圣诞树
- 机器学习图像源代码_使用带有代码的机器学习进行快速房地产图像分类
- 深入分析Spring 与 Spring MVC容器