你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

B-U585I-IOT02A--8.ThreadX点灯

[复制链接]
奇迹 发布时间:2021-10-22 22:05
只从ThreadX开源之后,凭借降维打击的优势吸引了一票开发者,也吸引越来越多的厂家加入其中。
ST也在U5的时候,第一次完全摒弃了以前大杂烩的模式(FreeRTOS+lwip+FatFS+自家USB),完全投入ThreadX怀抱。当然为了保护自己TouchGFX的尊严,ThreadX GUIX是没有引入滴。看这形式,老一套大杂烩在新的芯片是不会在被支持了,兄弟们,ThreadX搞起来。当然也可以研究一下CMSIS RTOS适配层,一招吃遍天。
今天就简单拿ThreadX跑个LED,小小一颗LED,让我水了多少文章啊,哈哈哈。

打开STM32CubeMX,创建一个工程,具体可以看我之前的文章。

简单配个时钟
QQ截图20211010205358.png
开一下ThreadX
QQ截图20211010174559.png

配置一下,加大一下内存池,10ms的节拍实在不习惯,改成1ms
QQ截图20211010205449.png


配置一下俩小灯
QQ截图20211010205546.png

Icache老是弹窗,太烦人了,给它打开。
QQ截图20211010205603.png

更改一下库ms延时的定时器,滴答让给ThreadX。
QQ截图20211010205650.png

配置一下别的,然后生成代码。

任务配置
  1. #define APP_LED1_TASK_SIZE 512
  2. #define APP_LED1_TASK_PRIO 4
  3. TX_THREAD MsgSenderThreadLED1;

  4. #define APP_LED2_TASK_SIZE 512
  5. #define APP_LED2_TASK_PRIO 4
  6. TX_THREAD MsgSenderThreadLED2;
复制代码

任务初始化代码
  1. UINT App_ThreadX_Init(VOID *memory_ptr)
  2. {
  3.   UINT ret = TX_SUCCESS;
  4.   TX_BYTE_POOL *byte_pool = (TX_BYTE_POOL*)memory_ptr;

  5.    /* USER CODE BEGIN App_ThreadX_MEM_POOL */
  6.   (void)byte_pool;
  7.   /* USER CODE END App_ThreadX_MEM_POOL */

  8.   /* USER CODE BEGIN App_ThreadX_Init */
  9.     CHAR *pointer;
  10.     if (tx_byte_allocate(byte_pool, (VOID **) &pointer,
  11.                          APP_LED1_TASK_SIZE, TX_NO_WAIT) != TX_SUCCESS)
  12.     {
  13.         ret = TX_POOL_ERROR;
  14.     }
  15.   
  16.     if(tx_thread_create(&MsgSenderThreadLED1, "LED1 Task",
  17.                         MsgSenderThreadLED1_Entry, 0, pointer, APP_LED1_TASK_SIZE,
  18.                         APP_LED1_TASK_PRIO, APP_LED1_TASK_PRIO,
  19.                         TX_NO_TIME_SLICE, TX_AUTO_START) != TX_SUCCESS)
  20.     {
  21.         ret = TX_THREAD_ERROR;
  22.     }
  23.    
  24.     if (tx_byte_allocate(byte_pool, (VOID **) &pointer,
  25.                          APP_LED2_TASK_SIZE, TX_NO_WAIT) != TX_SUCCESS)
  26.     {
  27.         ret = TX_POOL_ERROR;
  28.     }
  29.   
  30.     if(tx_thread_create(&MsgSenderThreadLED2, "LED2 Task",
  31.                         MsgSenderThreadLED2_Entry, 0, pointer, APP_LED2_TASK_SIZE,
  32.                         APP_LED2_TASK_PRIO, APP_LED2_TASK_PRIO,
  33.                         TX_NO_TIME_SLICE, TX_AUTO_START) != TX_SUCCESS)
  34.     {
  35.         ret = TX_THREAD_ERROR;
  36.     }
  37.   /* USER CODE END App_ThreadX_Init */

  38.   return ret;
  39. }
复制代码

俩任务函数,绿灯1S翻转一次。红灯0.5S翻转一次。
  1. void MsgSenderThreadLED1_Entry(ULONG thread_input)
  2. {
  3.   (void) thread_input;
  4.   while(1)
  5.   {
  6.     HAL_GPIO_TogglePin(LED_G_GPIO_Port, LED_G_Pin);
  7.     tx_thread_sleep(1000);
  8.   }
  9. }

  10. void MsgSenderThreadLED2_Entry(ULONG thread_input)
  11. {
  12.   (void) thread_input;
  13.   while(1)
  14.   {
  15.     HAL_GPIO_TogglePin(LED_R_GPIO_Port, LED_R_Pin);
  16.     tx_thread_sleep(500);
  17.   }
  18. }
复制代码

下载验证,完事。



收藏 1 评论12 发布时间:2021-10-22 22:05

举报

12个回答
子曰好人2号 回答时间:2021-10-27 10:16:13
捧场~
昱枫 回答时间:2021-10-27 10:22:14
学习了
joshua天宇 回答时间:2021-10-27 10:27:19
学习
wudianjun2001 回答时间:2021-10-27 10:29:32
学习学习
zhangt0713 回答时间:2021-10-27 10:47:56
行云流水般的操作
QIANYING79 回答时间:2021-10-27 14:33:07
这算是独占了?
moluxiyan 回答时间:2021-10-27 16:28:55
ThreadX过了很多认证
orima 回答时间:2021-10-27 21:58:31
学习了,很详细。感谢!
qiangtech 回答时间:2021-10-28 09:58:04
会者不难,难者不会。
orima 回答时间:2021-10-28 20:59:11
学习学习
VegardCheng 回答时间:2021-10-28 22:36:19
ThreadX有什么优点?
BEEE 回答时间:2021-10-28 23:40:40
想赶快使用ST新推出这款STM32U5系列产品,学习学习

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版