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

发布者:masphia最新更新时间:2022-07-14 来源: csdn关键字:MSP432P401R  库函数  创建  图形化配置 手机看文章 扫描二维码
随时随地手机看文章

平台: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


/* POSIX Header files */

#include


/* RTOS header files */

#include BIOS.h>


/* Driver configuration */

#include "ti_drivers_config.h"


/* For usleep() */

#include

#include

#include


#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

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


/* POSIX Header files */

#include


/* RTOS header files */

#include


/* Driver configuration */

#include

#include


#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


/* POSIX Header files */

#include


/* RTOS header files */

#include


/* Driver configuration */

#include "ti_drivers_config.h"


/* For usleep() */

#include

#include

#include


#include "./inc/myTask.h"


#include


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  库函数  创建  图形化配置 引用地址:MSP432P401R TI Drivers 库函数学习笔记(三)认识任务的创建及图形化配置

上一篇:MSP432P401R TI Drivers 库函数学习笔记(四)GPIO
下一篇:MSP432P401R TI Drivers 库函数学习笔记(二)认识TI-RTOS (TI-POSIX)

推荐阅读最新更新时间:2024-11-19 17:53

STM32F103C8T6单片机通过I2C库函数来读写24C02存储器
电路连接:SCL和SDA分别接到PB6和PB7上,并都外接上10kΩ上拉电阻。 电路板如下图所示: 最左边的4个排针接的是电源和串口。 由于板上没有任何外部晶振,所以在Keil中建好工程后, 要将RTE/Device/STM32F103C8/system_stm32f10x.c中的SYSCLK_FREQ_72MHz的定义注释掉,防止SystemInit函数打开HSE晶振。 #if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL) /* #define SYSCLK_FREQ_HSE HSE_VALUE *
[单片机]
解析STM32的库函数
意法半导体在推出STM32微控制器之初,也同时提供了一套完整细致的固件开发包,里面包含了在STM32开发过程中所涉及到的所有底层操作。通过在程序开发中引入这样的固件开发包,可以使开发人员从复杂冗余的底层寄存器操作中解放出来,将精力专注应用程序的开发上,这便是ST推出这样一个开发包的初衷。 但这对于许多从51/AVR这类单片机的开发转到STM32平台的开发人员来说,势必有一个不适应的过程。因为程序开发不再是从寄存器层次起始,而要首先去熟悉STM32所提供的固件库。那是否一定要使用固件库呢?当然不是。但STM32微控制器的寄存器规模可不是常见的8位单片机可以比拟,若自己细细琢磨各个寄存器的意义,必然会消耗相当的时间,并且对于程序后续的
[单片机]
ABB机器人如何创建数组
1)什么是数组? 将相同数据类型的元素按一定顺序排列的集合 2)有什么用? 比如创建一个robtarget类型的数组p_array,p_array里有10个点位,走完10个位置就可以用如下代码,方便简洁 FOR i FROM 1 TO 10 DO MoveL p_array{i},v500,z1,tool0; ENDFOR 3)哪些数据类型能创建数组 所有数据类型都可以创建数组 4)数组最大几维? ABB机器人数组最大三维! 5)数组起始序号是0还是1? 是1 6)如何创建 1)程序数据 2)选中类型,比如Robtarget 3)新建,设置名称,维数(这里举例1
[机器人]
创建不凡 欧时电子全新中国官网正式上线
近日,全球领先的多渠道分销商Electrocomponents plc(LSE:ECM)集团旗下电子元器件及MRO工业品分销商 欧时电子 (RS Components,以下简称欧时),其在中国地区的 官网 ,全新正式上线。在 “万物互联” 渐行渐近的时代,欧时以“助力客户取得成功,共同创建不凡”为企业定位,旨在通过最新的网站及产品升级,为行业客户提供优质产品及解决方案。 全新官网 聆听客户需求 提升本地化体验 当前云计算、大数据、 物联网 、人工智能等技术集中爆发,各行各业积极寻求数字化变革。作为全球电子元器件及MRO工业品分销的领导企业,进入中国市场的近20年来, 欧时 一直致力于为中国客户提供优质的产品和服务,并通过倾
[模拟电子]
<font color='red'>创建</font>不凡 欧时电子全新中国官网正式上线
仙知机器人:独家揭秘 如何快速创建机器人模型
机器人模型是如何创建的? 需要工程师一行一行敲写代码吗? 每一次模型创建都需要重新开始吗? 创建过程总是艰难而又复杂的吗? 试看仙知机器人是如何操作的 你便会发现 创建机器人模型 原来还可以这样方便快捷 仙知机器人自主研发的可视化操作软件Roboshop,支持【机器人模型】编辑,那具体操作是怎样的呢?请看下面介绍: 创建机器人模型 第一步:打开可视化操作软件Roboshop,进入【机器人模型】编辑模块,如下图所示,大致分为【模块工具栏】和【模型编辑区域】两部分。 第二步:点击工具栏【新建】,如下图所示,出现机器人模型创建的三种方式,分别为:【使用引导创建】、【使用已有模型创建】、【使用默认方式创建】。 (1)使用引导创建:
[机器人]
STM32入门系列-创建寄存器模板
介绍如何使用 KEIL5 软件创建寄存器模板, 方便之后使用寄存器方式来操作STM32开发板上的LED,让大家创建属于自己的寄存器工程模板。 获取工程模板的基础文件 首先我们在电脑任意位置创建一个文件夹,命名为“寄存器模板创建”,然后在其下面新建 2 个文件夹,如下: Obj 文件夹: 用于存放编译产生的 c/汇编/链接的列表清单、 调试信息、hex文件、预览信息、封装库等文件。 User 文件夹: 用于存放用户编写的 main.c、 STM32F1 启动文件、stm32f10x.h头文件。 我们需要将寄存器工程模板所需的基础文件 main.c、STM32F1 启动文件及stm32f10x.h 头文件放入到
[单片机]
STM32入门系列-<font color='red'>创建</font>寄存器模板
苹果iOS 16将允许开发者创建“实时锁屏”通知
苹果发布了 iOS 16、iPadOS 16 系统,并且已经发布了首个开发者预览版 Beta。   今年晚些时候,苹果将允许开发人员能够创建称为“实时活动”的实时锁屏通知。   实时活动类似于 iPhone 主屏幕上的小组件,但它位于锁定屏幕的底部,可以显示动态和实时信息。在 WWDC22 期间,苹果展示了如何使用实时活动来跟踪 Uber 骑行的距离或当前体育比赛的得分。   实时活动将在今年晚些时候通过软件更新向用户提供,并且不会随 iOS 16 的初始版本一起提供。   iOS 16 、iPadOS 16 计划在 7 月发布公开测试版,目前开发者预览版 Beta 已可用。iOS 16、iPadOS 16、macOS Ven
[手机便携]
苹果iOS 16将允许开发者<font color='red'>创建</font>“实时锁屏”通知
stm32库函数学习篇----通用定时器(PWM功能)
上午花了半天时间熟悉了stm32的PWM模块。中午利用午饭时间把PWM功能调试成功。当然,很简单的东西,也许很多前辈估计都不屑一顾的东西。 今天最大的感叹就是网络资源实在是个巨大的宝库,真的很庆幸,在这个复杂的社会环境里,在一个到处充斥着私心、私利的时代,各个网站,各个论坛上的众多网友都时刻保持着开源的氛围。学习一定要和他人交流,而网络提供了这么一个极好的平台。 废话少说,言归正传。 实现功能:采用定时器2的通道2,使PA1输出频率1K,占空比40的PWM波形,用PA8随意延时取反led灯,指示程序运行。 首先熟悉一下定时器的PWM相关部分。看图最明白 其实PWM就是定时器的一个比较功能而已。 CNT里的值不断++
[单片机]
stm32<font color='red'>库函数</font>学习篇----通用定时器(PWM功能)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多开源项目推荐
换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved