搜索
bottom↓
楼主: armok

教程: 建立一个属于自己的AVR的RTOS (作者:hjc800323)

  [复制链接]

出0入0汤圆

发表于 2010-4-13 13:23:05 | 显示全部楼层
谢谢阿莫了!!!

出0入0汤圆

发表于 2010-4-12 23:21:36 | 显示全部楼层
Mark

出0入0汤圆

发表于 2010-4-5 15:04:52 | 显示全部楼层
顶!

出0入0汤圆

发表于 2010-4-5 03:49:34 | 显示全部楼层

出0入0汤圆

发表于 2010-4-5 02:09:28 | 显示全部楼层
hao

出0入0汤圆

发表于 2010-4-3 11:16:54 | 显示全部楼层
回复【181楼】da_xl
和178楼说的一样,不知道怎么回事,感觉是堆栈指针初始化出错了,超出了ram的空间了, 在调用函数的时候,压栈就不能保存返回地址了,这样在非代码区运行,最后又回到了开始位置! 我在程序开始的时候将堆栈指针初始化为ram空间的地址后,就可以运行,不过在仿真的时候还是有警告出现,提示超出了ram空间似的!
-----------------------------------------------------------------------

但是人家说用M8就跑起来了,M128为什么又跑不起来呢。。。

出0入9汤圆

发表于 2010-3-29 10:31:34 | 显示全部楼层
留个记号

出0入59汤圆

发表于 2010-3-29 04:33:37 | 显示全部楼层
记号,谢谢

出0入0汤圆

发表于 2010-3-28 23:35:47 | 显示全部楼层
mark,谢谢阿莫了!

出0入0汤圆

发表于 2010-3-27 12:00:51 | 显示全部楼层
mark`~~~~~~~~~~````

出0入0汤圆

发表于 2010-3-24 22:36:28 | 显示全部楼层
和178楼说的一样,不知道怎么回事,感觉是堆栈指针初始化出错了,超出了ram的空间了, 在调用函数的时候,压栈就不能保存返回地址了,这样在非代码区运行,最后又回到了开始位置! 我在程序开始的时候将堆栈指针初始化为ram空间的地址后,就可以运行,不过在仿真的时候还是有警告出现,提示超出了ram空间似的!

出0入0汤圆

发表于 2010-3-24 22:34:47 | 显示全部楼层
和178楼说的一样,不知道怎么回事,感觉是堆栈指针初始化出错了,超出了ram的空间了, 在调用函数的时候,压栈就不能保存返回地址了,这样在非代码区运行,最后又回到了开始位置

出0入0汤圆

发表于 2010-3-19 12:42:02 | 显示全部楼层
标记

出0入0汤圆

发表于 2010-3-16 10:01:05 | 显示全部楼层
事实证明,不管哪一个,所有任务运行一次后,都会复位,从0000开始重新运行。想了很久没想明白哪的问题。所以放弃了。。

出0入0汤圆

发表于 2010-3-11 15:50:04 | 显示全部楼层
第一个,成功了。哈哈。

出0入0汤圆

发表于 2010-3-11 15:14:59 | 显示全部楼层
第四篇没成功。。。后面都没成功。。。唉

出0入0汤圆

发表于 2010-2-22 10:03:06 | 显示全部楼层
学习学习

出0入0汤圆

发表于 2010-2-11 14:55:10 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-2-9 15:14:58 | 显示全部楼层

出0入0汤圆

发表于 2010-2-9 13:30:35 | 显示全部楼层
收藏

出0入0汤圆

发表于 2010-2-5 09:03:05 | 显示全部楼层
经典,极品,收藏,学习.........

出0入0汤圆

发表于 2010-1-28 23:33:10 | 显示全部楼层
试过代码任务可以被挂起,但是任务恢复不了,不知怎么回事?

你们有试过,难道没有问题么??

出0入0汤圆

发表于 2010-1-25 13:14:48 | 显示全部楼层
很好,谢谢!

出0入0汤圆

发表于 2010-1-24 23:47:38 | 显示全部楼层
好东西,,简单易懂..

出0入0汤圆

发表于 2010-1-24 22:03:05 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-1-15 11:35:03 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-15 09:26:22 | 显示全部楼层
谢谢,有空再试。

出0入0汤圆

发表于 2010-1-7 22:51:15 | 显示全部楼层
试过代码任务可以被挂起,但是任务恢复不了,不知怎么回事?

出0入0汤圆

发表于 2010-1-7 22:29:11 | 显示全部楼层
极品收藏!

出0入0汤圆

发表于 2010-1-7 22:28:59 | 显示全部楼层
极品收藏!

出0入0汤圆

发表于 2009-12-29 19:44:30 | 显示全部楼层
领会中。。。

出0入0汤圆

发表于 2009-12-29 18:21:54 | 显示全部楼层
厉害

出0入0汤圆

发表于 2009-12-28 01:26:20 | 显示全部楼层
写的不错

出0入0汤圆

发表于 2009-12-28 01:20:49 | 显示全部楼层
mark  呵呵

出0入0汤圆

发表于 2009-12-27 21:55:42 | 显示全部楼层
mark

出10入95汤圆

发表于 2009-12-26 22:12:14 | 显示全部楼层
good

出0入0汤圆

发表于 2009-12-25 14:09:45 | 显示全部楼层
//开始任务调度,从最低优先级的任务的开始   
void OSStartTask(void)           
{   
  OSTaskRunningPrio=OS_TASKS;   
  SP=TCB[OS_TASKS].OSTaskStackTop+17;   
  __asm__ __volatile__(    "reti"       "  
\t"  );   
}   
1\

请问高手:

SP=TCB[OS_TASKS].OSTaskStackTop+17,为什么SP还要加17 呢

出0入0汤圆

发表于 2009-12-23 22:36:02 | 显示全部楼层
mark

出0入16汤圆

发表于 2009-12-23 16:10:01 | 显示全部楼层
mark!

出0入0汤圆

发表于 2009-12-18 14:50:25 | 显示全部楼层
相当不错的东西 不得不顶一下啊

出0入0汤圆

发表于 2009-12-17 20:48:52 | 显示全部楼层
mark

出0入85汤圆

发表于 2009-12-17 13:22:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-12-16 19:12:21 | 显示全部楼层
拿去学学

出0入0汤圆

发表于 2009-12-14 00:52:30 | 显示全部楼层
MARK avr

出0入0汤圆

发表于 2009-12-9 17:00:59 | 显示全部楼层

出0入0汤圆

发表于 2009-11-24 01:31:58 | 显示全部楼层
mark
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2009-11-24 00:39:22 | 显示全部楼层
楼上,留意标题 : 教程: 建立一个属于自己的AVR的RTOS (作者:hjc800323)

已经注明了作者不是我。

出0入0汤圆

发表于 2009-11-24 00:38:35 | 显示全部楼层
这是阿莫写的呀,太崇拜了哈

出0入0汤圆

发表于 2009-11-24 00:17:23 | 显示全部楼层
由浅到深,由简到繁 的介绍,的确很容易让人了解

只可惜用了太多INLINE , 不容易移植到别的开发环境

出0入46汤圆

发表于 2009-11-23 20:47:05 | 显示全部楼层
收藏

出0入0汤圆

发表于 2009-11-23 08:36:07 | 显示全部楼层
收藏。谢了。

出0入0汤圆

发表于 2009-11-15 22:56:15 | 显示全部楼层
Mark

出0入0汤圆

发表于 2009-11-15 22:25:55 | 显示全部楼层

出0入0汤圆

发表于 2009-11-15 17:39:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-11 17:23:19 | 显示全部楼层
不错

出0入0汤圆

发表于 2009-11-11 12:38:46 | 显示全部楼层
mark一下~

出0入0汤圆

发表于 2009-10-28 20:29:13 | 显示全部楼层
不错,学习OS中,先MARK了。

出0入0汤圆

发表于 2009-10-15 12:30:09 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-12 23:00:06 | 显示全部楼层
不错.内容很多,一下子看不完.
能否压缩成一个文件,供下下载下来仔细学习?

出0入0汤圆

发表于 2009-9-30 09:59:04 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2009-9-21 13:18:14 | 显示全部楼层
学习一下,谢谢!

出0入0汤圆

发表于 2009-9-21 11:55:33 | 显示全部楼层
收藏!啦

出0入0汤圆

发表于 2009-9-20 02:21:52 | 显示全部楼层
mark!

出0入0汤圆

发表于 2009-9-13 22:32:50 | 显示全部楼层
收藏,备用

出0入0汤圆

发表于 2009-9-13 22:18:15 | 显示全部楼层
看看,谢谢分享

出0入0汤圆

发表于 2009-9-13 09:26:09 | 显示全部楼层
下载学习一下

出0入0汤圆

发表于 2009-9-12 14:03:07 | 显示全部楼层
void RunFunInNewStack(void (*pfun)(),unsigned char *pStack)
{
  *pStack--=(unsigned int)pfun>>8;    //将函数的地址高位压入堆栈,
  *pStack--=(unsigned int)pfun;        //将函数的地址低位压入堆栈,
  SP=pStack;                            //将堆栈指针指向人工堆栈的栈顶
  __asm__ __volatile__("RET  
\t");    //返回并开中断,开始运行fun1()

}
上面的强制类型转换不是应该转换成char型的吗?
*pStack--=(unsigned char)pfun>>8;    //将函数的地址高位压入堆栈,
  *pStack--=(unsigned char)pfun;        //将函数的地址低位压入堆栈,
  SP=pStack;                            //将堆栈指针指向人工堆栈的栈顶

出0入0汤圆

发表于 2009-9-9 09:18:55 | 显示全部楼层
*pStack--=(unsigned int)pfun>>8;    //将函数的地址高位压入堆栈,
  *pStack--=(unsigned int)pfun;        //将函数的地址低位压入堆栈,
这里应该是低位先入栈吧,因为是倒着排的。
*pStack--=(unsigned int)pfun&0xFF;    //将函数的地址高位压入堆栈,
  *pStack--=(unsigned int)pfun>>8;        //将函数的地址低位压入堆栈,

出0入0汤圆

发表于 2009-8-26 20:26:28 | 显示全部楼层
这里的中断函数不是用的“裸中断”,故“中断法进行任务切换根本无法运行”~

出0入0汤圆

发表于 2009-8-24 17:43:59 | 显示全部楼层
WINAVR 20090313版编译出来的语句很有问题!!!
不知道是我的编译器问题还是其他的!

《第五篇: 完善的协作式的内核 》里面的寄存器变量OSTaskRunningPrio的运算很不对劲!!!
定义方式:register unsigned char OSTaskRunningPrio        asm("r3");//正在运行的任务
语    句:OSRdyTbl &= ~(1<<OSTaskRunningPrio);
编译后的汇编结果:
+00000121:   2DE3        MOV     R30,R3           Copy register
+00000122:   E0F0        LDI     R31,0x00         Load immediate
+00000123:   E081        LDI     R24,0x01         Load immediate
+00000124:   E090        LDI     R25,0x00         Load immediate
+00000125:   C002        RJMP    PC+0x0003        Relative jump
+00000126:   0F88        LSL     R24              Logical Shift Left
+00000127:   1F99        ROL     R25              Rotate Left Through Carry
+00000128:   943A        DEC     R3               Decrement
+00000129:   F7E2        BRPL    PC-0x03          Branch if plus
+0000012A:   9580        COM     R24              One's complement
+0000012B:   2228        AND     R2,R24           Logical AND

“r3”寄存器的值竟然被改的面目全非了!!!后续也没有还原!!!
很恶心的地方!是编译器的问题么?花费了偶2天的时间(汇编菜鸟哈)!

哪位大虾说说这是怎么回事?

出0入0汤圆

发表于 2009-7-9 23:56:46 | 显示全部楼层
刚开始学习,顶顶先!

出0入0汤圆

发表于 2009-7-9 17:52:40 | 显示全部楼层
三年后的今天我才看到这贴,不知道差距又是多少年,狂补!!!

出0入0汤圆

发表于 2009-7-8 13:38:52 | 显示全部楼层
可能winavr的版本不一样吧,我要修改就可以了。

出0入0汤圆

发表于 2009-7-3 14:31:12 | 显示全部楼层
看到第四篇,试了一下,跑不起来,有成功的吗?

出0入0汤圆

发表于 2009-7-2 16:58:02 | 显示全部楼层
好文,谢谢分享!

出0入4汤圆

发表于 2009-7-2 16:48:45 | 显示全部楼层
好文啊,记号先

出0入0汤圆

发表于 2009-7-2 16:43:12 | 显示全部楼层
标标标个记

出0入4汤圆

发表于 2009-6-19 11:55:36 | 显示全部楼层
ldi r24,lo8(pm(fun1))
pm是什么意思?

出0入0汤圆

发表于 2009-6-13 07:41:35 | 显示全部楼层
mark

出0入4汤圆

发表于 2009-6-11 00:20:24 | 显示全部楼层
记号

出0入0汤圆

发表于 2009-6-8 11:05:46 | 显示全部楼层
不错,学习一下,谢谢楼主分享。

出0入0汤圆

发表于 2009-5-30 16:02:57 | 显示全部楼层
mark 学习

出0入0汤圆

发表于 2009-5-24 03:15:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-5-20 12:35:50 | 显示全部楼层
学习

出0入0汤圆

发表于 2009-5-19 12:16:44 | 显示全部楼层
//开始任务调度,从最低优先级的任务的开始  
void OSStartTask(void)         
{  
  OSTaskRunningPrio=OS_TASKS;  
  SP=TCB[OS_TASKS].OSTaskStackTop+17;  
  __asm__ __volatile__(    "reti"       "
\t"  );   
}  
1\请问 SP=TCB[OS_TASKS].OSTaskStackTop+17,为什么SP还要加17 ???
还是没有人回答啊

出0入0汤圆

发表于 2009-5-12 04:51:17 | 显示全部楼层
以上代码阿莫用ISIS仿真通过了吗,如果只转贴就没意思了.
如果通过了,请不吝赐教!

出0入0汤圆

发表于 2009-5-11 15:52:45 | 显示全部楼层
留个档案,今后慢慢看

出0入0汤圆

发表于 2009-5-11 14:51:19 | 显示全部楼层
留个档案,今后慢慢看

出0入0汤圆

发表于 2009-4-24 00:17:37 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-3-17 22:41:47 | 显示全部楼层
真强,写那么多程序

出0入0汤圆

发表于 2009-3-9 16:10:34 | 显示全部楼层
mark 非常感谢

出0入0汤圆

发表于 2009-3-9 13:13:39 | 显示全部楼层
看了,非常好!

出0入0汤圆

发表于 2009-3-8 23:26:51 | 显示全部楼层
学习中~~~~~~~~~很有用~~~~~~~~

出0入0汤圆

发表于 2009-3-4 15:07:22 | 显示全部楼层
正想搞这个,收下先。

出0入0汤圆

发表于 2009-2-27 18:59:37 | 显示全部楼层
努力学习中

出0入0汤圆

发表于 2009-2-27 17:25:18 | 显示全部楼层
人工堆栈入栈,出栈请注意啦。
GCCAVR 发生中断后入栈过程
2008-04-16 20:44
PCL   //所以在内存中PCL在高地址
PCH

R1
R0
SEG

avr终端恢复时其实不能保存i,
reti只是将有相当于pop PCH; pop->PCL ;sei
中断时相当于push PCL;push PCH;CLi
pop seg只能恢复除i意外的位;


ICALL发生是将地地址放入r30,高地址放入r31
入栈时与中断一样

函数指针指向的是指向代码地址的低字节,也就是说函数指针存放的地址的方式为低位在前,高位在后
例如:函数指针的地址为(0x045a ,0x045b)={0x49,0x00}
函数入口地址为0x0049

出0入0汤圆

发表于 2009-2-24 17:25:23 | 显示全部楼层
三年后的今天我才看到这贴,不知道差距又是多少年,狂补!!!

出0入0汤圆

发表于 2009-2-2 16:11:47 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-1-29 21:51:15 | 显示全部楼层
cool

出0入0汤圆

发表于 2009-1-8 12:00:57 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 01:55

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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