打印

uCos II在Arduino IDE上的移植

[复制链接]
7014|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wookongbun|  楼主 | 2012-8-24 16:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wookongbun 于 2012-8-24 16:54 编辑

在11年的时候完成的,过了差不多一年里。当时仅为消磨时间,所以不见得这样的工作有什么很大的意义。
如果有谁发现了bug,无论是文档的还是代码的,希望告诉一声。欢迎交流!

Arduino+ucos.rar

113.59 KB

相关帖子

沙发
andery88| | 2012-11-24 00:14 | 只看该作者
好东西,谢谢了!正好能用到!

使用特权

评论回复
板凳
phoenixcyan| | 2012-12-24 19:21 | 只看该作者
正在学习arduino,想找找有没有rtos可以运行在上面

使用特权

评论回复
地板
lab4z| | 2012-12-26 16:11 | 只看该作者
很用用的东西

使用特权

评论回复
5
wsj89| | 2013-2-16 12:22 | 只看该作者
好东西啊,mark!

使用特权

评论回复
6
winxos| | 2013-3-3 12:05 | 只看该作者
路过看看。

使用特权

评论回复
7
iofree| | 2013-3-3 13:32 | 只看该作者
感谢楼主无私奉献……

使用特权

评论回复
8
张许立强| | 2013-5-21 15:36 | 只看该作者
谢谢楼主无私奉献

使用特权

评论回复
9
From_the_UESTC| | 2013-5-21 17:46 | 只看该作者
工程师们还真有玩Arduino的?见人玩过,自己没有搞过,听说挺好玩的。

使用特权

评论回复
10
yong61| | 2013-5-21 17:50 | 只看该作者
arduino都不会用

使用特权

评论回复
11
张许立强| | 2013-5-23 11:00 | 只看该作者
楼主ardino用的是什么版本

使用特权

评论回复
12
doniexun| | 2013-9-21 17:47 | 只看该作者
楼主威武!感谢分享!

使用特权

评论回复
13
PTW2009| | 2013-11-26 09:42 | 只看该作者
LZWV...... 赞一个!

使用特权

评论回复
14
779068092| | 2015-11-16 20:52 | 只看该作者
帖子很久了,不知道还有没有用,按照楼主的文档,发现,移植后编译后,ucos 不能正常的运行。会不停地重启。

用的是 arduino IDE 1.5.5 和 1.6.6  和

修改的地方
\hardware\arduino\cores\arduino\main.cpp,注释init()和loop();
int main(void)
{
        //init();

#if defined(USBCON)
        USBDevice.attach();
#endif
       
        setup();
   
        for (;;) {
                //loop();
                if (serialEventRun) serialEventRun();
        }
        
        return 0;
}


\hardware\arduino\cores\arduino\wiring.c,注释SIGNAL(TIMER0_OVF_vect)

#if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
ISR(TIM0_OVF_vect)
#else
// ISR(TIMER0_OVF_vect)
void ddddd(void)
#endif
{
        // copy these to local variables so they can be stored in registers
        // (volatile variables must be read from memory on every access)
        unsigned long m = timer0_millis;
        unsigned char f = timer0_fract;

        m += MILLIS_INC;
        f += FRACT_INC;
        if (f >= FRACT_MAX) {
                f -= FRACT_MAX;
                m += 1;
        }

        timer0_fract = f;
        timer0_millis = m;
        timer0_overflow_count++;
}


③\hardware\arduino\cores\arduino\wiring.c,修改init()关于定时器0的初始化,由64分频改为1024分频;
#elif defined(TCCR0B) && defined(CS01) && defined(CS00)
        // this combination is for the standard 168/328/1280/2560
//        sbi(TCCR0B, CS01);
//        sbi(TCCR0B, CS00);
       
        sbi(TCCR0B, CS02);
        cbi(TCCR0B, CS01);
        sbi(TCCR0B, CS00);


如此修改后编译代码,下载,发现13号脚上的led 会闪烁,原因是重启了

按照  楼主在豆瓣上 《arduino嵌入ucos系统的设想》 的帖子提示,还是没整理出来结果

奇怪的一点是,在每个任务开始的入口,都要调用功能和原来setup()一致的函数一次。就是说,我在任务一调用Serial.begin(9600);;如果在任务二不调用Serial.begin(9600);,则整个代码的运行都会出现问题。
很高兴,停了一天之,捋了一下思路,今天终于找到了问题所在。
1。得到编译后的elf链接文件,用AVRStudio打开后,按照提示进入软件仿真环境,这时候就可以查看反汇编代码了。应该感谢GCC和AVRStudio的作者。
2。通过跟踪代码的运行(就是狂按F5、F9、F10、F11),在一个简单的逻辑判0上出错了。C代码if(base == 0)(此语句源于Arduino)在前一个任务运行时判断是正确。到第二个任务运行之初就发生了错误了跳转。
3。发现了第二点之后,反汇编之。哈哈,果然,用于存储base的R1寄存器和形参的值居然不一致。
4。之所以会不一样,是在该任务初始化的时候R1寄存器装入了错误的值。此时,只需要在任务初始化的时候,将R1赋值1就解决了。


请求指点一下,现在想arduino上运行ucos ii 并且把整个 3D打印用的 marlin 固件 移植过来  毕业设计就靠它了

使用特权

评论回复
15
dake1478| | 2015-12-13 16:46 | 只看该作者
好东西就要顶一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:蒙茶茶,患得患失中

1

主题

72

帖子

1

粉丝