硬汉嵌入式论坛

 找回密码
 立即注册
楼主: eric2013
收起左侧

【安富莱】ThreadX内核教程更新记录帖,共计23章节,已经完结(2021-08-30)

  [复制链接]

1

主题

7

回帖

10

积分

新手上路

积分
10
发表于 2023-1-27 09:07:24 | 显示全部楼层
学习一下 收藏一下
回复

使用道具 举报

2

主题

14

回帖

20

积分

新手上路

积分
20
发表于 2023-3-17 08:53:38 | 显示全部楼层
“首先准备好一个简单的 ThreadX 工程模板,工程模板的制作在 ThreadX 内核教程里面有详细说明”,这个简单的threadx工程模板在哪里讲的啊,没找到啊
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
 楼主| 发表于 2023-3-18 10:04:16 | 显示全部楼层
masure 发表于 2023-3-17 08:53
“首先准备好一个简单的 ThreadX 工程模板,工程模板的制作在 ThreadX 内核教程里面有详细说明”,这个简单 ...

QQ截图20230318100326.png
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
发表于 2023-5-19 10:37:30 | 显示全部楼层
本帖最后由 Hunter 于 2023-5-19 14:53 编辑

请教,ThreadX RTOS 有没有自动化测试的工具?
回复

使用道具 举报

17

主题

42

回帖

93

积分

初级会员

积分
93
发表于 2023-5-22 15:32:31 | 显示全部楼层
只看到配套V6,V7,没有看到V5的板子
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
 楼主| 发表于 2023-5-22 15:49:09 | 显示全部楼层
厉飞雨 发表于 2023-5-22 15:32
只看到配套V6,V7,没有看到V5的板子

看V6的教程就行,V5不再单独弄了。
V6是F429,V5是F407,他们是一样的。
回复

使用道具 举报

7

主题

23

回帖

44

积分

新手上路

积分
44
发表于 2023-8-17 13:33:38 | 显示全部楼层
汉哥,请问一下关于arm内核,Cortex-M的知识在哪里看呀,您有没有出相关的教程呀
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
 楼主| 发表于 2023-9-2 12:01:41 | 显示全部楼层
参数错误

下载.png
回复

使用道具 举报

1

主题

10

回帖

13

积分

新手上路

积分
13
发表于 2023-9-21 09:34:31 | 显示全部楼层
优秀的硬汉啊
回复

使用道具 举报

0

主题

16

回帖

16

积分

新手上路

666

积分
16
QQ
发表于 2023-11-23 10:16:58 | 显示全部楼层
Eric,您好!
我在用Embedded Studio(V7.32 64-bit版本)编译你提供的 Threadx例程 V7-3003_ThreadX Task Debug Info
编译显示 SEGGER_RTT_SES.c文件中的int __putchar(int x, __printf_tag_ptr ctx) {...                函数编译出错,
错误为:unknown type name '__printf_tag_ptr'
麻烦您有空的时候帮忙看一眼。

SEGGER_RTT_SES.c文件中代码如下(没有任何修改):
#include "SEGGER_RTT.h"
#include "__libc.h"
#include <stdarg.h>
#include <stdio.h>

int printf(const char *fmt,...) {
  char buffer[128];
  va_list args;
  va_start (args, fmt);
  int n = vsnprintf(buffer, sizeof(buffer), fmt, args);
  SEGGER_RTT_Write(0, buffer, n);
  va_end(args);
  return n;
}

int puts(const char *s) {
  return SEGGER_RTT_WriteString(0, s);
}

int __putchar(int x, __printf_tag_ptr ctx) {
  (void)ctx;
  SEGGER_RTT_Write(0, (char *)&x, 1);
  return x;
}

int __getchar() {
  return SEGGER_RTT_WaitKey();
}

/****** End Of File *************************************************/
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
 楼主| 发表于 2023-12-9 16:32:58 | 显示全部楼层
guohongguang 发表于 2023-11-23 10:16
Eric,您好!
我在用Embedded Studio(V7.32 64-bit版本)编译你提供的 Threadx例程 V7-3003_ThreadX Task ...

不好意思,刚注意到这里有个问题。

这个是是embedded studio版本兼容问题导致的,得使用5.5x才可以正常编译,如果是7.3得将工程里面的RTT相关文件删掉,然后这里选择这个即可

12.png
回复

使用道具 举报

0

主题

16

回帖

16

积分

新手上路

666

积分
16
QQ
发表于 2023-12-11 17:27:04 | 显示全部楼层
eric2013 发表于 2023-12-9 16:32
不好意思,刚注意到这里有个问题。

这个是是embedded studio版本兼容问题导致的,得使用5.5x才可以正 ...

好的,多谢Eric,已验证OK。
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2024-3-1 13:52:31 | 显示全部楼层
消息队列以后的代码链接都失效了吗?
回复

使用道具 举报

13

主题

65

回帖

104

积分

初级会员

积分
104
发表于 2024-4-23 10:39:54 | 显示全部楼层
请教一下,大佬们有尝试过先初始化threadx,在初始化MPU嘛(代码需求),在这种情况下我发现在调用tx_thread_sleep的时候,会导致systik卡死,所有任务将会一直处于阻塞状态
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
 楼主| 发表于 2024-4-23 10:49:59 | 显示全部楼层
zzyEmbed 发表于 2024-3-1 13:52
消息队列以后的代码链接都失效了吗?

测试了下,是正常的。也可以到我们论坛置顶帖相应开发板网盘里面下载。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
 楼主| 发表于 2024-4-23 10:51:40 | 显示全部楼层
嵌入式菜鸟^_^ 发表于 2024-4-23 10:39
请教一下,大佬们有尝试过先初始化threadx,在初始化MPU嘛(代码需求),在这种情况下我发现在调用tx_threa ...

MPU最好优先初始化好。

后面配置也是没问题的,因为有个这种玩法,这个就是动态配置使用MPU的。

第5期ThreadX视频教程:单片机动态APP加载MPU玩法,隔离应用和系统,APP死机了系统也不会挂(2022-05-15)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=112368
回复

使用道具 举报

13

主题

65

回帖

104

积分

初级会员

积分
104
发表于 2024-4-23 11:28:01 | 显示全部楼层
eric2013 发表于 2024-4-23 10:51
MPU最好优先初始化好。

后面配置也是没问题的,因为有个这种玩法,这个就是动态配置使用MPU的。

找到问题了,是后配置MPU同时,也配置了system_clock,在stm32h7xx_hal_conf.h中配置systick中断优先级为0x0F,覆盖了threadx里面_tx_initialize_low_level中systick优先级配置,导致systick和pendsv中断优先级一样,所以systick会出现无法正常触发。感谢大佬回复
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
 楼主| 发表于 2024-4-23 15:22:42 | 显示全部楼层
嵌入式菜鸟^_^ 发表于 2024-4-23 11:28
找到问题了,是后配置MPU同时,也配置了system_clock,在stm32h7xx_hal_conf.h中配置systick中断优先级为 ...

谢谢告知问题原因。
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2024-4-29 10:49:51 | 显示全部楼层
您好,我看ThreadX创建消息队列函数tx_queue_create,第三个形参 message_size,解释为:消息队列每个消息的大小,消息大小范围 1-16,每个消息 4 字节也就是(4Byte - 64Byte),如果传输一个结构体,大小超过64Byte是不能用了吗,                                       
但是看源代码内容,并没有对这个message_size大小做任何限制
消息队列1.png
消息队列2.png
消息队列3.png
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2024-5-6 10:24:59 | 显示全部楼层
硬汉哥,请问ThreadX的模块管理器与模块栈空间独立,如何使模块管理器调用模块中定义的回调函数呢?
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
发表于 2024-11-27 22:31:40 | 显示全部楼层
学习一下,谢谢硬汉!!
回复

使用道具 举报

1

主题

24

回帖

27

积分

新手上路

积分
27
发表于 2025-4-1 08:50:29 | 显示全部楼层
硬汉哥,在您的V7-3003_ThreadX Task Debug Info这个项目上我有个问题:
在您的工程以及我类似通过CubeMX生成的相同工程中,通过在STM32H750项目中通过在ThreadX中最终调用的printf()打印内容将无法输出(无论串口和Event Recorder功能)
但在ThreadX还没有引入前,我就确认EVT和UART输出printf()是可用的,一旦到了任务中就不可用,请问是什么原因呢?

我看您的上面项目中应该这三个功能都有,尤其是在下面这里应当是串口也发现没输出:
#if Enable_RTTViewer == 1  
int fputc(int ch, FILE *f)
{
        SEGGER_RTT_Write(0, &ch, 1);
        return (ch);       
}
#else
int fputc(int ch, FILE *f)
{
#if 1        /* 将需要printf的字符通过串口中断FIFO发送出去,printf函数会立即返回 */
        comSendChar(COM1, ch);
       
        return ch;
#else        /* 采用阻塞方式发送每个字符,等待数据发送完毕 */
        /* 写一个字节到USART1 */
        USART1->TDR = ch;
       
        /* 等待发送结束 */
        while((USART1->ISR & USART_ISR_TC) == 0)
        {}
       
        return ch;
#endif
}
#endif
但是我使用HAL_UART_Transmit却又有输出了,我把我的用CubeMX生成的项目给您看看(其中用了RTE的stdout的User模式,并在main.c设置输出,并使用您的fputc输出串口,结果都不行,但用串口原生API却可以):

ThreadX_H7-UART-OS.7z (13.71 MB, 下载次数: 1)
回复

使用道具 举报

1

主题

24

回帖

27

积分

新手上路

积分
27
发表于 2025-4-4 17:22:28 | 显示全部楼层
wsr2580 发表于 2025-4-1 08:50
硬汉哥,在您的V7-3003_ThreadX Task Debug Info这个项目上我有个问题:
在您的工程以及我类似通过CubeMX ...

这个是因为putc()要好好实现一下,不能用RTE的实现函数。但是Event Recorder还是不能用。
回复

使用道具 举报

1

主题

24

回帖

27

积分

新手上路

积分
27
发表于 2025-4-4 17:26:07 | 显示全部楼层
想请问一下硬汉哥,ThreadX实现的低功耗模式使用的是STOP模式还是SLEEP模式?因为单从下面的寄存器是不是看不出来工作模式?
#ifdef TX_ENABLE_WFI
    DSB                                             // Ensure no outstanding memory transactions
    WFI                                             // Wait for interrupt
    ISB                                             // Ensure pipeline is flushed
#endif
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-9 19:56 , Processed in 0.418365 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表