-
切换CPU的工作模式,有时也称特权等级主要的目的是为了保护系统的资源不被用户程序非法使用。所以。你说的进入SYS模式不是为了中断嵌套。只是为了系统要调用系统函数了,所以进入系统模式,防止在系统函数执行过程中用户模式下的硬实时中断破坏系统数据
-
这要先理解函数调用和软中断的概念
函数调用:一个函数执行过程中需要另外一个函数的功能时执行调用,函数调用时将返回地址和CPU状态寄存器内容压栈,当函数执行完毕后弹出上述压栈的内容并回到原函数继续执行
软中断:类似于中断,只是触发条件不是由硬件触发而是由用户调用的软中断指令触发。软中断产生时压栈的内容与函数调用相同,但是不是直接进入另外一个函数的入口,而是进入中断向量表中查询应该执行的程序PC指向。同时根据需要修改CPU的特权级别。目的是为了保护系统资源被用户程序非法使用。
所以函数调用和软中断调用的区别是,软中断多了修改特权级和查找中断向量表的功能,其他部分完全一样。
一般软中断的使用主要是为了使用户程序进入系统级的函数,如果不是这样就没有必要使用软中断
-
有时候编译器在编译时如果以前编译过(也就是说有各个文件的.o文件存在),编译器会偷懒不再进行编译。所以会出现你上面的说的问题。建议你更改头文件后进行全编译。问题就不会发生了。祝你成功!
-
看来大家学习UCOS的热情很高涨。看来我一定的做点什么了。呵呵
-
建议使用邮箱
-
我使用IAR+stm32+ucos调试过。不过对于某些与硬件寄存器相关的,尤其是设计汇编语言书写的部分。建议不要设置断点。都则会出现你问题中所提到的现象
-
我"wstrom"又回来了。哈哈哈
-
呵呵,由于受楼上的启示,我决定以后的教程我们尽量生活化,实例化,这样我们可以很快的记住。同时我在等我的板子同步出炉,呵呵。希望大家耐心等待
-
等我的硬件完成后同步讲解吧。希望大家支持
-
1、不需要设置优先级,系统的时钟节拍是所有任务的前提。他跟优先级没有关系。但是没有它再高优先级的任务也无法运行
2、程序和裸奔是相同的。只是进硬件中断后有些寄存器的值是自动压栈的,所以进行任务切换是采用的是OSIntCtxSw()函数,而普通任务切换时是调用的OSCtxSw()函数
3、任务的堆栈大小取决于你这个任务的局部变量有多少?全局变量在任务中尽量少用。如果非要用请在使用前禁止任务切换。否则会出现错误。全局变量与堆栈没有关系
-
这个我没有实际测试过,如果不可以建议你在网络上搜索UCOS在VC++上面调试的相关资料。然后在VC上运行的我想没问题
-
不需要外部NAND FLASH, SDRAM,片内资源足够。
-
呵呵每年的春节前后的几个月是公司的旺季。忙的很。抽不出时间来。让大家久等了。以后我会每周都会对帖子进行更新。同时会在今年推出与硬件同步的UCOS移植方法和UCGUI的移植方法。由于在做这块板子的时候同时考虑后续的UCFS和UCTCPIP,所以耗时较长。业余时间又有限。还希望大家耐心等待。在此再次向大家对我的支持表示感谢
-
我正在调试我自己绘制的UCOS与UCGUI的一块板子,到时候同步推出吧。
-
仿真与实际运行在某些方面是存在区别的。我从你贴出的代码上看不出存在问题,同时对你的描述也做了分析。无法判定你的问题点。因为任务在第一次Delay可以正常切换任务,那么在第二次不能正常切换任务的可能性存在以下情况:1、任务在你切换后的任务中给调度器枷锁了。2、你的这个任务堆栈不够,第一次切换造成溢出死机了。3、其它的中断异常,可能越权访问了寄存器的值
-
请适当加大其它任务的堆栈。再试一下!
-
说的有道理,我会在以后的更新过程中尽量采用你说的方法。让我们在快乐中学习OS
-
谢谢flypaul的无私奉献。
-
建议对程序修改后如果出现莫名奇妙的问题时采用完全编译后再试一下,可能问题会解决
-
已在链接的帖子中回答,不再重复