不知道有大神用过micrium官方的ucos移植没,给28335的。里面任务级切换和中断级切换使用同一个函数是几个意思?中断级切换并不需要陷阱啊!!!
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
如果是F28335的ucos程序的话,你看看OS_TASK_SW的定义
#define OS_TASK_SW() asm(" TRAP #16")
在这里用TRAP 指令来初始化中断,它跳转到PieVectTable 中断向量表中的第16个中断DATALOG的地址,你的代码中找到这句PieVectTable.DATALOG= &OSCtxSw;也就是OSCtxSw() 的入口地址,从而实现了任务切换。
OSIntCtxSw()的定义也是如此.
现在我的问题的是,一般都是使用Userx 的来实现任务切换的,为何选择DATALOG?
PINT USER1; // User Defined trap 1 第21个中断向量
PINT USER2; // User Defined trap 2
PINT USER3; // User Defined trap 3
PINT USER4; // User Defined trap 4
PINT USER5; // User Defined trap 5
PINT USER6; // User Defined trap 6
PINT USER7; // User Defined trap 7
PINT USER8; // User Defined trap 8
PINT USER9; // User Defined trap 9
PINT USER10; // User Defined trap 10
PINT USER11; // User Defined trap 11
PINT USER12; // User Defined trap 12 第32个中断向量
如果是F28335的ucos程序的话,你看看OS_TASK_SW的定义
#define OS_TASK_SW() asm(" TRAP #16")
在这里用TRAP 指令来初始化中断,它跳转到PieVectTable 中断向量表中的第16个中断DATALOG的地址,你的代码中找到这句PieVectTable.DATALOG= &OSCtxSw;也就是OSCtxSw() 的入口地址,从而实现了任务切换。
OSIntCtxSw()的定义也是如此.
现在我的问题的是,一般都是使用Userx 的来实现任务切换的,为何选择DATALOG?
PINT USER1; // User Defined trap 1 第21个中断向量
PINT USER2; // User Defined trap 2
PINT USER3; // User Defined trap 3
PINT USER4; // User Defined trap 4
PINT USER5; // User Defined trap 5
PINT USER6; // User Defined trap 6
PINT USER7; // User Defined trap 7
PINT USER8; // User Defined trap 8
PINT USER9; // User Defined trap 9
PINT USER10; // User Defined trap 10
PINT USER11; // User Defined trap 11
PINT USER12; // User Defined trap 12 第32个中断向量
那就是说中断中也不能发送信号量之类的了?因为发送信号量的话很可能会进行高优先级任务切换。
汗,中断本来就是实时的好吗。问题是这样,任务还是实时的吗?
我的说法有误,函数OSIntCtxSw()会在中断服务函数执行完成之后执行,实现任务的切换,中断都是实时的
我看到控制系统ucos的都是使用OSCtxSw(),