栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

stm32H747 开发板-m7 threadX初探

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

stm32H747 开发板-m7 threadX初探

本月在st看到H7系列居然有了双核单片机(M7+M4),单片机开始成双成对了,哎呀呀,这让万年单身狗的我情何以堪那,啧啧啧。。。。

在掏了几百个大洋后,买了一块Stm32H747-Disco的开发板,听说最近threadX很火,主要这个rtos的安全认证比较齐全,而且全家桶比较完善。双核配threadX,对于开发团队的话,完全可以一个人负责一个核,最后合一下就可以跑起来了,或者一个核跑业务逻辑,一个核跑安全的逻辑,可塑造性更强了。

下面就用板子第一次入门ThreadX了。

开发工具是Stm32CubeIDE,

勾选一下threadX,然后基本不用移植了 

对于threadX来说,启动流程也很简单,这边贴一张官方的图

这边tx_kernel_enter()函数调用后,threadX就真正开始运行了,tx_application_define是tx_kernel_enter的回调函数,这个函数主要作用是 我们可以在里面创建任务,信号量,队列这些东东,(ps:这个和freertos还是有点区别的)

这边创建2个任务,使用时间片轮询

  UINT ret = TX_SUCCESS;
  TX_BYTE_POOL *byte_pool = (TX_BYTE_POOL*)memory_ptr;

  
  CHAR *pointer;
  
  tx_byte_allocate(byte_pool, &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);

  
  tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
          pointer, DEMO_STACK_SIZE,
         1, 1, 1, TX_AUTO_START);
  
  tx_byte_allocate(byte_pool, &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);

  
  tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
            pointer, DEMO_STACK_SIZE,
            1, 1, 1, TX_AUTO_START);
  

  return ret;

线程函数比较简单,轮流点亮灯,tx_thread_sleep函数的形参是多少个时钟节拍,因为这边的系统时钟配置成了10ms,所以100ms和500ms灯亮灭一次 

void thread_0_entry(ULONG thread_input)
{
    
    while(1)
    {
    	HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
        
        tx_thread_sleep(10);


    }
}

void thread_1_entry(ULONG thread_input)
{
    
    while(1)
    {
    	HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
    	 
    	 tx_thread_sleep(50);

    }
}

另外的话,stm32CubeIDE已经做的比较好,调出thread list就可以看到栈的使用情况 

 

 灯成功按我们逻辑亮灭,这里说明基本threadX已经跑起来啦

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290426.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号