|
日志内容
| 看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作系统 |
|
电脑圈圈 发表于 2006-5-16 4:24:00 |
最近在ADuC7027上写了一个ARM_00_OS,头都写晕了,发上来给大家一起来看看。
任务按优先级调度,如果处于就绪态且优先级最高的任务有两个或更多,则按时间片轮循调度。
支持任务创建、任务删除、内存分配、简单的消息、简单的设备管理、CPU及内存等使用统计等功能。
从这里下载整个文件包: ARM_00_OS.rar
keil自带的头文件有点问题,在KEIL自带的DAC.H头文件有点问题,在DAC.H文件中找到
typedef struct s_DAC { s_DAC_Channel Channel[DAC_COUNT]; /* @0 */ } s_DAC;
并将其改成下面的样子:
#if DAC_COUNT > 0 typedef struct s_DAC { s_DAC_Channel Channel[DAC_COUNT]; /* @0 */ } s_DAC; #endif





|
| 阅读全文 | 回复(45) | 引用通告 | 编辑
|
| Re:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作系统 |
|
keil初学者(游客)发表评论于2008-8-14 16:18:00 |
有谁能帮忙说说,keil中使用外部rom下载程序,需要怎么配置?
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作系统 |
|
computer00发表评论于2008-6-17 18:45:00 |
keil for arm我都是直接看的软件再带的帮助文档的。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作系统 |
|
duo2182发表评论于2008-6-10 22:37:00 |
如果有ADS1.2的版本就好了!
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作系统 |
|
duo2182发表评论于2008-6-10 22:27:00 |
很想学习下。但是我对KEIL FOR ARM 不熟,00能提供下KEIL ARM或者介绍下我应该看那些资料呢?我在网上找,但都是KEIL C51的。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作系统 |
|
computer00发表评论于2007-10-9 13:21:00 |
不会吧...... ARM_00_OS_TASKSWITCH.C文件要设置为ARM模式的,THUMB模式不行.
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作系统 |
|
helloworld(游客)发表评论于2007-10-9 11:14:00 |
我就是用的您的那个链接下的KEIL VU3 2.50A,然后也破解注册了。。。 也在那个“品”字处设置好是CARM编译了。。。 为什么会报这个错误呢??? Build target 'Target 1' assembling startup.s... assembling SWI_VEC.S... compiling ARM_00_OS_main.c... compiling ARM_00_OS_Core.c... compiling ARM_00_OS_TaskSwitch.c... ARM_00_OS_TASKSWITCH.C(39): error C197: inline-asm: 'LO' register expected ARM_00_OS_TASKSWITCH.C(39): error C197: inline-asm: Invalid register list ARM_00_OS_TASKSWITCH.C(40): error C197: inline-asm: 'LO' register expected ARM_00_OS_TASKSWITCH.C(40): error C197: inline-asm: 'LO' register expected ARM_00_OS_TASKSWITCH.C(40): error C197: inline-asm: Dest/Source1: different registers ARM_00_OS_TASKSWITCH.C(41): error C197: inline-asm: undefined identifier ARM_00_OS_TASKSWITCH.C(41): error C197: inline-asm: Syntax error compiling ARM_00_OSSystemIdle.c... compiling ARM_00_OSTaskManager.c... compiling UART.c... compiling Task.c... compiling KEYS.C... compiling ADC.c... Target not created
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作系统 |
|
computer00发表评论于2007-10-9 1:47:00 |
也许是你选择的编译器不对吧...我使用的是CARM编译器,你应该选择它,并且不要覆盖我的启动文件。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作系统 |
|
kakashilw(游客)发表评论于2007-10-8 22:41:00 |
你好。。。首先感谢您的OS◎◎!! 我下载了您的元代码,然后用MDK3.12编译,为什么有如下错误呢??? Build target 'Target 1' assembling startup.s... startup.s(1): error: A1167E: Invalid line start startup.s(2): error: A1163E: Unknown opcode This , expecting opcode or Macro startup.s(3): error: A1163E: Unknown opcode Copyright , expecting opcode or Macro startup.s(4): error: A1167E: Invalid line start startup.s(5): error: A1167E: Invalid line start startup.s(6): error: A1163E: Unknown opcode STARTUP.S: , expecting opcode or Macro startup.s(7): error: A1167E: Invalid line start startup.s(8): error: A1167E: Invalid line start startup.s(11): error: A1167E: Invalid line start startup.s(12): error: A1167E: Invalid line start startup.s(16): error: A1167E: Invalid line start startup.s(17): error: A1159E: Label missing from line start startup.s(18): error: A1159E: Label missing from line start startup.s(19): error: A1159E: Label missing from line start startup.s(20): error: A1159E: Label missing from line start startup.s(21): error: A1159E: Label missing from line start Task.c(196): warning: #167-D: argument of type "volatile unsigned char *" is incompatible with parameter of type "unsigned char *" Task.c(231): warning: #167-D: argument of type "volatile unsigned char *" is incompatible with parameter of type "unsigned char *" compiling KEYS.C... compiling ADC.c... Target not created
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作系统 |
|
free(游客)发表评论于2007-2-2 9:40:00 |
太好了,我现在在学习44B0,我想移到44B0上去,有问题就得来这里请教你哦!
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作系统 |
|
computer00发表评论于2007-1-26 14:55:00 |
你可以看看<ARM体系结构与编程>这本书. ARM上不一定要使用操作系统的,尤其是像那些ARM7,都是像51 MCU那样玩的。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作系统 |
|
godspeed(游客)发表评论于2007-1-26 13:36:00 |
太感谢00了! 我刚刚开始学习ARM.请问什么书入门比较好!我现在都是在网上下的资料,不系统,也不太好懂!请问学ARM是不是需要先预装一个操作系统到ARM板上,才能开始学习呀?
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作系统 |
|
oio发表评论于2006-11-19 17:02:00 |
实在是大牛啊!!! 我在搞ADUC7022,有些问题可以请教吗?
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
computer00发表评论于2006-10-20 9:20:00 |
 首先感谢您的支持和肯定。
实际动手做的话,先选一款合适的处理器,然后看看它的datasheet,找出它有哪些资源,然后自己写最简单的代码,每个功能模块做一个工程(就像我那些例子那样),把每个功能都去实现一下,这样就对芯片熟悉了。以后要用时,可以直接复制这些模块里面的代码或者直接复制.h和.c文件。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
psyche(游客)发表评论于2006-10-19 15:27:00 |
 圈圈:
你好,看你的帖子很久了,忍不住给你写信说你真的很厉害,很高兴能在你的blog中学东西,每次看都有一些惊喜,谢谢你把那么好的资料公开给大家看。我想以后经常给你写信联系,你能同意么。我在几天前刚开始学arm,有点不知所措的感觉,现在把基本指令跟体系结构都看了一遍,可是对于实际作东西还是没有任何想法,你能对我指点一下么!
再次对你表示感谢!
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
ttneil(游客)发表评论于2006-8-24 11:15:00 |
 初学arm,而且我在用ads。以后懂了一定再来看看。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
computer00发表评论于2006-7-2 2:47:00 |
那些地方改动应该不会影响到压栈操作,主要还是定时器中断服务中的那部分代码,只有它才会影响到压栈操作。
如果要时间片轮转调度的话,只要将任务的优先级设置成相等就行了,并且可以有多层这样的任务同时实现按时间片轮转调度。例如优先级2的任务有5个,优先级3的任务有6个,假设它们都处于就绪态,那么优先级2的5个任务将按时间片轮转调度,而优先级为3的得不到调度。当优先级2的5个任务都被挂起,并且没有比它们更高级别的任务处于就绪态时,优先级3的6个任务将按时间片轮转调度。
不过每个任务是固定的时间片,即运行一个时钟节拍。如果要实现时间片数量多少可设置,还得自己修改代码。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
bdehj(游客)发表评论于2006-7-1 17:31:00 |
 我改的地方比较多。
首先把您的结构体给修改了一下
typedef struct xLIST { volatile uint32 uxNumberOfOSpcb; OSpcb * pxIndex; } xList;
extern xList OSReadyList[MAX_Prio]; //就绪态任务表表头 extern xList OSSuspendList; //挂起态任务表表头 extern xList OSDelayList; //延时态任务表表头 extern OSpcb * OSCurrentPcb; //当前运行的任务
(1)我添加了xList的结构体其中uxNumberOfOSpcb标记我这个队列(就绪、延时、挂起)中的任务的个数。pxIndex则指向这个队列中的第一个任务。
(2)我自己构建了一个就绪数组列表OSReadyList[MAX_Prio]; 这应我调度的时候先按下标从0开始到MAX_Prio挨个找,只要找到第一个uxNumberOfOSpcb不为0的就是优先级最高的任务,我就可以进行时间片轮转调度了。
我主要是仿照了FREERTOS的思想。
本来我是想把你的系统跟UCOS融合到一起的。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
computer00发表评论于2006-7-1 11:35:00 |
 你做了修改,压R4是很有可能的。能否说明你改动了哪里?看我的函数,一开始就有说明了,如果你改动了代码,刚好对堆栈操作有影响,那么就可能导致程序跑飞~~~~~
/********************************************************************************************** 功能:FIQ中断服务程序。 入口参数:无。 返回:无。 备注:时钟节拍在此产生,修改这里的代码是要注意,可能会导致程序跑飞。 **********************************************************************************************/
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
bdehj(游客)发表评论于2006-7-1 9:52:00 |
我也感到很奇怪,我把你的反汇编过去就是指保存R0-R3,我的就保存R0-R4。
因为我在你的程序上面修改了些东西,不是因为我修改的那一部分要用到R4 就保存吧!
再说了ARM不是规定只能用R0-R3来作为穿参数的寄存器吗,怎么也要提前保存R4阿!
真是不懂,这个编译器怎么这么奇怪?因为我以前用的是ADS !
0x0008151C E12FFF1E BX R14 0x00081520 000102A8 DD 0x000102A8 311: void FIQ_Handler(void) __fiq //FIQ中断服务程序 312: { 313: //函数进来时,编译器会自动将R0-R3,R14压入堆栈 314: 0x00081524 E92D401F STMDB R13!,{R0-R4,R14} 315: if(FIQSTA & TIMER0) //读取FIQ中断状态,判断FIQ中断源。这里为定时器0中断。 316: { 317: OSpcb * TempDelayPcb; //临时用的进程控制块,查找延迟列表时使用。 318: // OSpcb * TempReadyPcb; //临时用的进程控制块,查找就绪列表时使用。 319: 320: OSpcb * TempDelayPcbNext;//zxp 321: uint32 DeleteFirstFlag; //是否删除表头的标志 322: uint32 prio; 0x00081528 E59F834C LDR R8,[PC,#0x034C] 0x0008152C E5988000 LDR R8,[R8] 0x00081530 E3180004 TST R8,#0x00000004 0x00081534 0A0000CE BEQ 0x00081874 323: T0CLRI=0; //清定时器0中断 324: 0x00081538 E3A09000 MOV R9,#0x00000000 0x0008153C E59F833C LDR R8,[PC,#0x033C] 0x00081540 E5889000 STR R9,[R8] 325: __asm MOV R0,SP //将FIQ模式下的SP移入R0{} 0x00081544 E1A0000D MOV R0,R13 326: __asm STMDB R0!,{SP}^ //将用户模式下的堆栈指针SP压入FIQ的堆栈 0x00081548 E9602000 STMDB R0!,{R13}^
................................................
0x00081864 E90D0001 STMDB R13,{R0} 483: __asm SUB R0,SP,#4 //将SP-4放入R0中,借用R0来压栈,因为访问用户模式下的寄存器时,不能访问备份寄存器{} 0x00081868 E24D0004 SUB R0,R13,#0x00000004 484: __asm LDMIA R0,{SP}^ //将堆栈指针弹出至用户模式下的堆栈指针中 0x0008186C E8D02000 LDMIA R0,{R13}^ 485: __asm NOP //{}加入一个空操作,在特权模式下访问用户模式下的SP后,后面不能紧跟访问备份寄存器的操作 486: return; 487: } 0x00081870 E1A00000 NOP 488: } 0x00081874 E8BD401F LDMIA R13!,{R0-R4,R14} 0x00081878 E25EF004 SUBS PC,R14,#0x00000004
圈圈大哥谢谢你的耐心解答!
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
computer00发表评论于2006-7-1 4:59:00 |
 但是我编译的结果是压R0-R3,R14。
297: void FIQ_Handler(void) __fiq //FIQ中断服务程序 298: { 299: //函数进来时,编译器会自动将R0-R3,R14压入堆栈 0x00081484 E92D400F STMDB R13!,{R0-R3,R14} 300: if(FIQSTA & TIMER0) //读取FIQ中断状态,判断FIQ中断源。这里为定时器0中断。 301: { 302: OSpcb * TempDelayPcb; //临时用的进程控制块,查找延迟列表时使用。 303: OSpcb * TempReadyPcb; //临时用的进程控制块,查找就绪列表时使用。 304: 305: uint32 DeleteFirstFlag; //是否删除表头的标志 306: 0x00081488 E59F8314 LDR R8,[PC,#0x0314] 0x0008148C E5988000 LDR R8,[R8] 0x00081490 E3180004 TST R8,#0x00000004 0x00081494 0A0000C0 BEQ 0x0008179C 307: T0CLRI=0; //清定时器0中断 308:
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
bdehj(游客)发表评论于2006-7-1 2:01:00 |
 圈圈在下面这个函数中
void FIQ_Handler(void) __fiq //FIQ中断服务程序 { //函数进来时,编译器会自动将R0-R3,R14压入堆栈
你注明是自动保存R0-R3,R14但是我在编译器中看见的是自动保存R0-R4,R14阿!
小弟不是很明白,请指点指点a !
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
computer00发表评论于2006-6-27 19:51:00 |
 这个应该要改很多地方。启动文件,中断服务等程序都要改动。
既然有keil的工程文件了,还是用keil玩吧,ADS不好玩。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
bdehj(游客)发表评论于2006-6-27 18:07:00 |
 圈圈大哥:
小弟真的很是佩服你!!!!
我想问我要是用ADS开发工具来编译您的程序的时候要注意哪些地方啊?
牛人阿
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
computer00发表评论于2006-6-23 2:59:00 |
 是通过串口发到超级终端的。
如果要移植到44B0上,应该要改进入临界段和退出临界段,定时器相关的寄存器,串口,此外ADC相关的部分应该要删除。总之跟硬件相关的都要修改。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
keyer(游客)发表评论于2006-6-22 14:35:00 |
 你的系统是如何在超级终端上显示出输出信息的? 这个环境是如何搭建的,另外我想把它移植到arm744b0的板子上需要更改哪些呢
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
kanprin发表评论于2006-6-16 9:13:00 |
 唉,实在是太失败了。只看到你写的在51中的OS ,原来还有一个更牛的大作在ARM中。这两天搞了个44B0的开发板,也想加入ARM菜鸟一族,这才发现这里有如此好料。 谢谢,偷偷下了,学习学习。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
computer00发表评论于2006-6-15 1:27:00 |
看过很多书了,我也记不清有哪些了~~~~我们图书馆有很多书的,只要我感兴趣的,我就跑去借来看看~~~~~~~
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
LXM(游客)发表评论于2006-6-14 19:53:00 |
好,请问你一下,你写出这样的操作系统,到底看过多少这方面的书,付出了多少努力,学过那些知识,我也想写一个^-^,可不可以介绍几本关于这方面的书给我QQ:471493963 谢谢,一定哦
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
柠檬(游客)发表评论于2006-6-6 20:24:00 |
 牛!!圈圈,想和你交个朋友
QQ:282864138
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
jinjianhui(游客)发表评论于2006-6-4 14:08:00 |
 圈圈,你好!请教你一个问题:
如何用超级终端软件显示调试过程,就像你做的那样。比如显示"ARMOO"以及其他字符语句?
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
computer00发表评论于2006-5-27 1:09:00 |
 to fzhiyu:ARM方面的也许可以讨论讨论,但CAN方面的我就不行了,一直没接触过这东东。
to 菜鸟求教:应该是使用 #i nclude <LPC22xx.H>,器件要选择LPC2294才行。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
菜鸟求教(游客)发表评论于2006-5-27 0:04:00 |
 你好,我是一个ARM初学者,我想问一下版主在我编程时系统会出现打不开INCLUDE LPC2294。INC
的情况,但往程序里添加INC 头文件时,系统会提示无法添加,麻烦版主给我一点提示吧!!谢谢,我的邮箱是shuixing-000@sohu.com
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
fzhiyu(游客)发表评论于2006-5-26 20:38:00 |
 我是在21IC上看到你的00系统的..真猛,羡慕啊..
现在我刚学ARM,想做下CAN总线的实验,遇到麻烦了.不知道你是否有这方面的经验,可以请教一下吗..能给下你的邮箱吗..我想发个程序让你帮我看下..然后给点意见..谢谢了..
如果愿意的话,我的邮箱cbq84@163.com
QQ123891640
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
hqgboy(游客)发表评论于2006-5-26 8:00:00 |
谢谢...
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
javie(游客)发表评论于2006-5-18 20:56:00 |
 我答应圈圈写读后感的,如下:
OK!很好很好...
应该加一个伪RT,另外程序整理一下,看起来很乱的感觉...
另外感谢圈圈不厌其烦的给俺介绍SWI
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
Jason(游客)发表评论于2006-5-17 16:40:00 |
还可以写得更精简和整洁一些。好像对于实时性没有怎么考虑。我对你做的操作系统很感兴趣。能留个联系方式吗?我们最近也要做一款操作系统。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
甲虫(游客)发表评论于2006-5-17 16:25:00 |
为什么我用一双击工程文件ARM_00_OS就报应用程序错误呢?其他工程文件打开就还好啊。怎么回事?我的keil707以前从没有报错过啊。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作 |
|
computer00发表评论于2006-5-17 13:57:00 |
 申请友情连接请给出连接地址。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
|
用户信息
载入中...
|