硬汉嵌入式论坛

 找回密码
 立即注册
查看: 10634|回复: 9
收起左侧

[ThreadX全家桶] ThreadX任务堆栈问题

[复制链接]

48

主题

375

回帖

519

积分

金牌会员

积分
519
发表于 2020-8-4 16:44:29 | 显示全部楼层 |阅读模式
最近在把之前项目的工程从ucos-III 移植到ThreadX,基本可正常工作了。


分析任务堆栈使用发现,ThreadX用户堆栈使用要比ucos-III要高(同样的优化等级)


初步分析,可能与ThreadX支持中断嵌套,在被中断的任务中运行ISR,导致栈使用压力大。

有没有独立的中断栈配置呢?

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115811
QQ
发表于 2020-8-4 16:47:06 | 显示全部楼层
中断栈就是xxx.S启动文件里面的那个Stack大小。
回复

使用道具 举报

48

主题

375

回帖

519

积分

金牌会员

积分
519
 楼主| 发表于 2020-8-4 17:07:34 | 显示全部楼层
您说的是中断向量表吧 2020-08-04_17-04-51.png

我的意思是指,当某个中断发生了,执行对应的中断处理函数,该函数所使用的栈与被中断的Task的栈是同一个

我的理解对吗?请多指教哈。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115811
QQ
发表于 2020-8-4 17:49:39 | 显示全部楼层
wanglehui_12 发表于 2020-8-4 17:07
您说的是中断向量表吧

我的意思是指,当某个中断发生了,执行对应的中断处理函数,该函数所使用的栈与被 ...

在RTOS里面主要分任务栈和系统栈(也就是你说的中断栈)

任务栈:主要是局部变量,任务里面调用函数的嵌套调用,函数形参,发生中断时自动入栈的寄存器等。

系统栈:进入中断后,手动入栈的寄存器,中断里面局部变量,以及后面的中断嵌套等都是用的系统栈。
回复

使用道具 举报

48

主题

375

回帖

519

积分

金牌会员

积分
519
 楼主| 发表于 2020-8-4 18:53:20 | 显示全部楼层
eric2013 发表于 2020-8-4 17:49
在RTOS里面主要分任务栈和系统栈(也就是你说的中断栈)

任务栈:主要是局部变量,任务里面调用函数的 ...

系统栈在什么地方定义呢?如何指定大小? 还是硬件结构已经处理了,不需要软件操心?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115811
QQ
发表于 2020-8-4 19:34:21 | 显示全部楼层
wanglehui_12 发表于 2020-8-4 18:53
系统栈在什么地方定义呢?如何指定大小? 还是硬件结构已经处理了,不需要软件操心?

1、系统栈是在xxxx.s的启动文件里面定义的,即里面的stack大小,以mdk为例就是

Stack_Size      EQU     0x00001000

2、一般开个4KB左右就差不多了,主要是手动入栈的寄存器,中断里面局部变量,以及后面的中断嵌套等,这些地方在调用。
回复

使用道具 举报

48

主题

375

回帖

519

积分

金牌会员

积分
519
 楼主| 发表于 2020-8-4 19:55:48 | 显示全部楼层
eric2013 发表于 2020-8-4 19:34
1、系统栈是在xxxx.s的启动文件里面定义的,即里面的stack大小,以mdk为例就是

Stack_Size      EQU   ...

我明白你的意思了,对应IAR的版本就在LINK文件中的__ICFEDIT_size_cstack__

这个栈在没有启动RTOS时,会被使用
回复

使用道具 举报

48

主题

375

回帖

519

积分

金牌会员

积分
519
 楼主| 发表于 2020-8-4 20:10:24 | 显示全部楼层
eric2013 发表于 2020-8-4 19:34
1、系统栈是在xxxx.s的启动文件里面定义的,即里面的stack大小,以mdk为例就是

Stack_Size      EQU   ...

这个帖子删了吧,容易误导大家对CortexM核的理解,实际上是双堆栈指针的机制(MSP&PSP)保障系统如何切换Task的用户堆栈和系统堆栈的使用。

复位启动后第一件事就是从中断向量表0x00000000处获得MSP的指针,此时MSP=sfe(CSTACK)
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115811
QQ
发表于 2020-8-4 20:19:20 | 显示全部楼层
wanglehui_12 发表于 2020-8-4 20:10
这个帖子删了吧,容易误导大家对CortexM核的理解,实际上是双堆栈指针的机制(MSP&PSP)保障系统如何切换 ...

没事的,我做下沉处理。就是把帖子置位到后面几页了。
回复

使用道具 举报

0

主题

21

回帖

21

积分

新手上路

积分
21
发表于 2021-5-5 21:43:21 | 显示全部楼层
太深了,没看懂大佬们在讨论什么,汗!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-20 10:22 , Processed in 0.351644 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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