uCos II在Arduino IDE上的移植

[复制链接]
 楼主| wookongbun 发表于 2012-8-24 16:47 | 显示全部楼层 |阅读模式
本帖最后由 wookongbun 于 2012-8-24 16:54 编辑

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

本帖子中包含更多资源

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

×
andery88 发表于 2012-11-24 00:14 | 显示全部楼层
好东西,谢谢了!正好能用到!
phoenixcyan 发表于 2012-12-24 19:21 | 显示全部楼层
正在学习arduino,想找找有没有rtos可以运行在上面
lab4z 发表于 2012-12-26 16:11 | 显示全部楼层
很用用的东西
wsj89 发表于 2013-2-16 12:22 | 显示全部楼层
好东西啊,mark!
winxos 发表于 2013-3-3 12:05 | 显示全部楼层
路过看看。
iofree 发表于 2013-3-3 13:32 | 显示全部楼层
感谢楼主无私奉献……
张许立强 发表于 2013-5-21 15:36 | 显示全部楼层
谢谢楼主无私奉献
From_the_UESTC 发表于 2013-5-21 17:46 | 显示全部楼层
工程师们还真有玩Arduino的?见人玩过,自己没有搞过,听说挺好玩的。
yong61 发表于 2013-5-21 17:50 | 显示全部楼层
arduino都不会用
张许立强 发表于 2013-5-23 11:00 | 显示全部楼层
楼主ardino用的是什么版本
doniexun 发表于 2013-9-21 17:47 | 显示全部楼层
楼主威武!感谢分享!
PTW2009 发表于 2013-11-26 09:42 | 显示全部楼层
LZWV...... 赞一个!
779068092 发表于 2015-11-16 20:52 | 显示全部楼层
帖子很久了,不知道还有没有用,按照楼主的文档,发现,移植后编译后,ucos 不能正常的运行。会不停地重启。

用的是 arduino IDE 1.5.5 和 1.6.6  和

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

  4. #if defined(USBCON)
  5.         USBDevice.attach();
  6. #endif
  7.        
  8.         setup();
  9.    
  10.         for (;;) {
  11.                 //loop();
  12.                 if (serialEventRun) serialEventRun();
  13.         }
  14.         
  15.         return 0;
  16. }


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

  1. #if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
  2. ISR(TIM0_OVF_vect)
  3. #else
  4. // ISR(TIMER0_OVF_vect)
  5. void ddddd(void)
  6. #endif
  7. {
  8.         // copy these to local variables so they can be stored in registers
  9.         // (volatile variables must be read from memory on every access)
  10.         unsigned long m = timer0_millis;
  11.         unsigned char f = timer0_fract;

  12.         m += MILLIS_INC;
  13.         f += FRACT_INC;
  14.         if (f >= FRACT_MAX) {
  15.                 f -= FRACT_MAX;
  16.                 m += 1;
  17.         }

  18.         timer0_fract = f;
  19.         timer0_millis = m;
  20.         timer0_overflow_count++;
  21. }


③\hardware\arduino\cores\arduino\wiring.c,修改init()关于定时器0的初始化,由64分频改为1024分频;
  1. #elif defined(TCCR0B) && defined(CS01) && defined(CS00)
  2.         // this combination is for the standard 168/328/1280/2560
  3. //        sbi(TCCR0B, CS01);
  4. //        sbi(TCCR0B, CS00);
  5.        
  6.         sbi(TCCR0B, CS02);
  7.         cbi(TCCR0B, CS01);
  8.         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 固件 移植过来  毕业设计就靠它了
dake1478 发表于 2015-12-13 16:46 | 显示全部楼层
好东西就要顶一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

1

主题

72

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部