tcp_client+upp任务抢占问题 - TMS320C6748 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7969|回复: 17
打印 上一主题 下一主题

tcp_client+upp任务抢占问题

[复制链接]

26

主题

96

帖子

1380

积分

金牌会员

Rank: 6Rank: 6

积分
1380
跳转到指定楼层
楼主
发表于 2016-12-27 11:47:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在程序里设置了两个任务,一个就是系统本身的tcp_test()任务,另一个是我自己创建的upp传输任务,在程序开始时,tcp_test()函数里有一个task_sleep()函数可以使任务跳转到低优先级的upp任务,这里没有问题,但是当tcp链接后,该函数原代码执行完成后我加入了一条task_sleep()指令,但此时程序却不能跳转到upp任务,请问这种情况怎么解决?帮我分析分析,谢谢了。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2016-12-27 14:56:22 | 只看该作者
SYS/BIOS 是基于优先级调度的实时操作系统 在某一时刻一定执行的是当前准备就绪的最高优先级线程
至于为什么没有调到 uPP 函数 你要确认是否满足
1、准备就绪
2、当前时刻优先级最高
回复 支持 反对

使用道具 举报

26

主题

96

帖子

1380

积分

金牌会员

Rank: 6Rank: 6

积分
1380
板凳
 楼主| 发表于 2016-12-27 15:17:18 | 只看该作者
希望缄默 发表于 2016-12-27 14:56
SYS/BIOS 是基于优先级调度的实时操作系统 在某一时刻一定执行的是当前准备就绪的最高优先级线程
至于为什 ...

第一次Upp任务能够运行是task_sleep();函数的作用,之后被net.c文件里的hook函数抢占后就不能从tcp_test()任务跳转到upp任务了,我现在不知道它内部做了什么,也不好改动,我需要实现的是PC与DSP网口通讯,DSP与另一台设备并口通讯,这可能要改一些底层驱动的东西,希望您能给我一些思路。

点评

Hook 函数只会在 NDK 协议栈初始化时候执行一次 不需要改底层驱动 这是上层调度问题 与驱动无关  详情 回复 发表于 2016-12-27 16:27
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2016-12-27 16:27:12 | 只看该作者
70010x 发表于 2016-12-27 15:17
第一次Upp任务能够运行是task_sleep();函数的作用,之后被net.c文件里的hook函数抢占后就不能从tcp_test( ...

Hook 函数只会在 NDK 协议栈初始化时候执行一次
不需要改底层驱动 这是上层调度问题 与驱动无关
回复 支持 反对

使用道具 举报

26

主题

96

帖子

1380

积分

金牌会员

Rank: 6Rank: 6

积分
1380
5#
 楼主| 发表于 2016-12-27 16:58:31 | 只看该作者
希望缄默 发表于 2016-12-27 16:27
Hook 函数只会在 NDK 协议栈初始化时候执行一次
不需要改底层驱动 这是上层调度问题 与驱动无关 ...

现在的问题是运行后如果tcp_test()函数里没有用到for(;;)循环,程序就不知道跑到哪里去了,但是如果用了for(;;)循环,又无法在接收数据后跳转到我的upp任务里面,希望您能给我一个思路。

点评

在 for(;;) 里面添加 task_sleep 或者 task_yield  详情 回复 发表于 2016-12-28 08:48
回复 支持 反对

使用道具 举报

26

主题

96

帖子

1380

积分

金牌会员

Rank: 6Rank: 6

积分
1380
6#
 楼主| 发表于 2016-12-27 17:02:17 | 只看该作者
希望缄默 发表于 2016-12-27 16:27
Hook 函数只会在 NDK 协议栈初始化时候执行一次
不需要改底层驱动 这是上层调度问题 与驱动无关 ...

补充:如果没有for(;;)循环,程序执行完tcp_test()函数后到什么地方去了?请您给我指点,这个对我编写代码的思路影响很大。

点评

一般执行 IDLE 空闲线程调度 所有的操作系统都是这样的 没有进程/任务在工作就在空闲进程/线程 Windows 也是[attachimg]1759[/attachimg]  详情 回复 发表于 2016-12-28 08:51
回复 支持 反对

使用道具 举报

7

主题

104

帖子

705

积分

高级会员

Rank: 4

积分
705
7#
发表于 2016-12-27 22:05:50 | 只看该作者
静静的听课
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
8#
发表于 2016-12-28 08:48:31 | 只看该作者
70010x 发表于 2016-12-27 16:58
现在的问题是运行后如果tcp_test()函数里没有用到for(;;)循环,程序就不知道跑到哪里去了,但是如果用了f ...

在 for(;;) 里面添加 task_sleep 或者 task_yield
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
9#
发表于 2016-12-28 08:51:58 | 只看该作者
70010x 发表于 2016-12-27 17:02
补充:如果没有for(;;)循环,程序执行完tcp_test()函数后到什么地方去了?请您给我指点,这个对我编写代 ...

一般执行 IDLE 空闲线程调度
所有的操作系统都是这样的 没有进程/任务在工作就在空闲进程/线程 Windows 也是

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

26

主题

96

帖子

1380

积分

金牌会员

Rank: 6Rank: 6

积分
1380
10#
 楼主| 发表于 2016-12-28 14:16:14 | 只看该作者
希望缄默 发表于 2016-12-28 08:48
在 for(;;) 里面添加 task_sleep 或者 task_yield

这个我之前就试过了如果加在tcp_test()函数里的for(;;)内的末尾加休眠或抢占指令,会重新回到for循环的第一条指令,如图1和图2

如果tcp_test()函数内部不适用for(;;)循环,该函数末尾使用task_sleep()指令,一样不会跳转到低优先级的upp任务,如图3图4


补充:upp任务我在之前的使用也是正常的,在这里却不能跳转。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

Task_sleep 之前 post 一下 upp 任务的信号量  详情 回复 发表于 2017-1-3 11:45
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-16 01:39 , Processed in 0.048162 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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