IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【STM32F407-threadx】第03章 Threadx移植(中) -> 正文阅读

[嵌入式]【STM32F407-threadx】第03章 Threadx移植(中)

第一讲、移植准备

交流群:1092151263

1.1 threadx源码包

1.2 资料包

第二讲、开始移植

上一章,已经完成了基础模板搭建了。下面开始进行移植。

2.1 资源准备

  • 1、在项目中创建threadx文件夹,用于存放threadx源码
  • 2、拷贝github下载的源码中的common整个文件夹,以及prots文件里面的cortex_m4整个文件夹。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ydeSeDX3-1631849354344)(7B71E7342D6245D1BB9278882B29F1F8)]

2.1.1 mdk

  • 1、在mdk中创建文件目录:
  • 1.1、threadx/src:装入common/src/内的全部.c文件
  • 1.2、threadx/ports:装入ports/ac5/src内的所有.s文件
  • 1.3、threadx/ports:装入ports/ac5/tx_initialize_low_level.s (该文件在example_build里面,因为该文件,我们需要做修改,所以我们拷贝一份出来,即使后面修改出问题,再重新考本一份就OK了)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gvcfGkbu-1631849354347)(13E91A5AB77A49F5AF3FF612433DFC8D)]

  • 2、添加头文件路径
  • 2.1、\threadx\common\inc
  • 2.2、\threadx\cortex_m4\ac5\inc

在这里插入图片描述

2.2 修改ports

该部分的修改,需要具有:

  • 1、arm体系与架构
  • 2、基础的汇编能力

暂时比较复杂,可以直接拷贝别人做好的ac5文件夹,有空再补上这部分的移植吧。

我将完善的代码放在了群文件中。

第三讲、编写测试代码

3.1 main.c

/* USER CODE BEGIN Includes */
#include "tx_api.h"
/* USER CODE END Includes */
/* USER CODE BEGIN 0 */
#define THREAD1_PRIO 3
#define THREAD1_STACK_SIZE 1024
static TX_THREAD thread1;
uint8_t thread1_stack[THREAD1_STACK_SIZE];

#define THREAD2_PRIO 2
#define THREAD2_STACK_SIZE 1024
static TX_THREAD thread2;
uint8_t thread2_stack[THREAD2_STACK_SIZE];
void my_thread1_entry(ULONG thread_input)
{
  /* Enter into a forever loop. */
  while (1)
  {
    LED_TOGGLE();
    printf("threadx 1 application running...\r\n");
    /* Sleep for 1000 tick. */
    tx_thread_sleep(2000);
  }
}

void my_thread2_entry(ULONG thread_input)
{
  /* Enter into a forever loop. */
  while (1)
  {
    printf("threadx 2 application running...\r\n");
    /* Sleep for 1000 tick. */
    tx_thread_sleep(1000);
  }
}
void tx_application_define(void *first_unused_memory)
{
  /* Create thread */
  tx_thread_create(&thread1, "thread 1", my_thread1_entry, 0, &thread1_stack[0], THREAD1_STACK_SIZE, THREAD1_PRIO, THREAD1_PRIO, TX_NO_TIME_SLICE, TX_AUTO_START);
  tx_thread_create(&thread2, "thread 2", my_thread2_entry, 0, &thread2_stack[0], THREAD2_STACK_SIZE, THREAD2_PRIO, THREAD2_PRIO, TX_NO_TIME_SLICE, TX_AUTO_START);
}
/* USER CODE END 0 */
  /* USER CODE BEGIN 2 */
  HAL_UART_Receive_IT(&huart1, &arxbuffer, 1);
  printf("threadX RTOS on BearPi IoT Board\r\n");
  tx_kernel_enter();
  /* USER CODE END 2 */

然后就会看见不同时的打印两个任务。

效果如下:

在这里插入图片描述

第四讲、总结

至此,移植完毕。

2021年9月17日11:22:34:

  • 1、ports接口部分的移植没有讲,以后有空回来补上
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:20:30  更:2021-09-18 10:21:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:31:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码