[ZLG-ARM] 向hotpower求助(开始发到MCU版了)

[复制链接]
2523|5
 楼主| cmanning 发表于 2007-3-2 22:08 | 显示全部楼层 |阅读模式
hotpower&nbsp;前辈:<br /><br />&nbsp;&nbsp;看了你的分析&quot;非典架构&quot;,我也遇到了类似的情况,<br />&nbsp;&nbsp;各种条件正常时丢失中断。<br />&nbsp;&nbsp;尤其是硬件I2C的中断,稳定性较差。FIQ的外部中断2,丢失较严重。<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;我用的是LPC2138&nbsp;+&nbsp;ads1.2&nbsp;+&nbsp;ucos2&nbsp;+&nbsp;中断嵌套(几乎所有的外设中断IRQ)<br />&nbsp;&nbsp;由于没用过kail,不能直接应用你的文件。<br />&nbsp;&nbsp;不知如何使用你的&quot;非典架构&quot;,修改我目前的文件,来解决问题。<br /><br />我的<br />Startup.s文件<br />&nbsp;&nbsp;<br />;define&nbsp;the&nbsp;stack&nbsp;size<br />;定义堆栈的大小<br />FIQ_STACK_LEGTH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />IRQ_STACK_LEGTH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9*10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;every&nbsp;layer&nbsp;need&nbsp;9&nbsp;bytes&nbsp;stack&nbsp;,&nbsp;permit&nbsp;8&nbsp;layer&nbsp;.每层嵌套需要9个字堆栈,允许8层嵌套<br />ABT_STACK_LEGTH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />UND_STACK_LEGTH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br /><br />NoInt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;0x80<br /><br />USR32Mode&nbsp;&nbsp;&nbsp;EQU&nbsp;0x10<br />SVC32Mode&nbsp;&nbsp;&nbsp;EQU&nbsp;0x13<br />SYS32Mode&nbsp;&nbsp;&nbsp;EQU&nbsp;0x1f<br />IRQ32Mode&nbsp;&nbsp;&nbsp;EQU&nbsp;0x12<br />FIQ32Mode&nbsp;&nbsp;&nbsp;EQU&nbsp;0x11<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;__use_no_semihosting_swi<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />;The&nbsp;imported&nbsp;labels&nbsp;&nbsp;&nbsp;&nbsp;<br />;引入的外部标号在这声明<br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;FIQ_Exception&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;Fast&nbsp;interrupt&nbsp;exceptions&nbsp;handler&nbsp;快速中断异常处理程序<br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;__main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;The&nbsp;entry&nbsp;point&nbsp;to&nbsp;the&nbsp;main&nbsp;function&nbsp;C语言主程序入口&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;TargetResetInit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;initialize&nbsp;the&nbsp;target&nbsp;board&nbsp;目标板基本初始化<br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;SoftwareInterrupt<br /><br />;The&nbsp;emported&nbsp;labels&nbsp;&nbsp;&nbsp;&nbsp;<br />;给外部使用的标号在这声明<br />&nbsp;&nbsp;&nbsp;&nbsp;EXPORT&nbsp;&nbsp;bottom_of_heap<br />&nbsp;&nbsp;&nbsp;&nbsp;EXPORT&nbsp;&nbsp;StackUsr<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;EXPORT&nbsp;&nbsp;Reset<br />&nbsp;&nbsp;&nbsp;&nbsp;EXPORT&nbsp;&nbsp;__user_initial_stackheap<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;CODE32<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;AREA&nbsp;&nbsp;&nbsp;&nbsp;vectors,CODE,READONLY<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENTRY<br /><br />;interrupt&nbsp;vectors<br />;中断向量表<br />Reset<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;ResetAddr<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;UndefinedAddr<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;SWI_Addr<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;PrefetchAddr<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;DataAbortAddr<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xb9205f80<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;[PC,&nbsp;#-0xff0]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;FIQ_Addr<br /><br />ResetAddr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResetInit<br />UndefinedAddr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Undefined<br />SWI_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SoftwareInterrupt<br />PrefetchAddr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrefetchAbort<br />DataAbortAddr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataAbort<br />Nouse&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />IRQ_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />FIQ_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FIQ_Handler<br /><br />;未定义指令<br />Undefined<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Undefined<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />;取指令中止<br />PrefetchAbort<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrefetchAbort<br /><br />;取数据中止<br />DataAbort<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataAbort<br /><br />;快速中断<br />FIQ_Handler<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STMFD&nbsp;&nbsp;&nbsp;SP!,&nbsp;{R0-R3,&nbsp;LR}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FIQ_Exception<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDMFD&nbsp;&nbsp;&nbsp;SP!,&nbsp;{R0-R3,&nbsp;LR}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUBS&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;&nbsp;LR,&nbsp;&nbsp;#4<br /><br /><br />InitStack&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;LR<br /><br />;Build&nbsp;the&nbsp;SVC&nbsp;stack<br />;设置中断模式堆栈<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,&nbsp;#0xd2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;StackIrq<br />;Build&nbsp;the&nbsp;FIQ&nbsp;stack&nbsp;&nbsp;&nbsp;&nbsp;<br />;设置快速中断模式堆栈<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,&nbsp;#0xd1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;StackFiq<br />;Build&nbsp;the&nbsp;DATAABORT&nbsp;stack<br />;设置中止模式堆栈<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,&nbsp;#0xd7<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;StackAbt<br />;Build&nbsp;the&nbsp;UDF&nbsp;stack<br />;设置未定义模式堆栈<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,&nbsp;#0xdb<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;StackUnd<br />;Build&nbsp;the&nbsp;SYS&nbsp;stack<br />;设置系统模式堆栈<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,&nbsp;#0xdf<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;=StackUsr<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;R0<br /><br /><br />ResetInit<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitStack&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Initialize&nbsp;the&nbsp;stack&nbsp;初始化堆栈<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TargetResetInit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Initialize&nbsp;the&nbsp;target&nbsp;board&nbsp;目标板基本初始化<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Jump&nbsp;to&nbsp;the&nbsp;entry&nbsp;point&nbsp;of&nbsp;C&nbsp;program&nbsp;跳转到c语言入口<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__main<br /><br /><br />__user_initial_stackheap&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;r0,=bottom_of_heap&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;r1,=StackUsr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;pc,lr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />StackIrq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IrqStackSpace&nbsp;+&nbsp;(IRQ_STACK_LEGTH&nbsp;-&nbsp;1)*&nbsp;4<br />StackFiq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FiqStackSpace&nbsp;+&nbsp;(FIQ_STACK_LEGTH&nbsp;-&nbsp;1)*&nbsp;4<br />StackAbt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AbtStackSpace&nbsp;+&nbsp;(ABT_STACK_LEGTH&nbsp;-&nbsp;1)*&nbsp;4<br />StackUnd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UndtStackSpace&nbsp;+&nbsp;(UND_STACK_LEGTH&nbsp;-&nbsp;1)*&nbsp;4<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;:DEF:&nbsp;EN_CRP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&nbsp;.&nbsp;&gt=&nbsp;0x1fc<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INFO&nbsp;&nbsp;&nbsp;&nbsp;1,&quot;
The&nbsp;data&nbsp;at&nbsp;0x000001fc&nbsp;must&nbsp;be&nbsp;0x87654321.
Please&nbsp;delete&nbsp;some&nbsp;source&nbsp;before&nbsp;this&nbsp;line.&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF<br />CrpData<br />&nbsp;&nbsp;&nbsp;&nbsp;WHILE&nbsp;.&nbsp;&lt&nbsp;0x1fc<br />&nbsp;&nbsp;&nbsp;&nbsp;NOP<br />&nbsp;&nbsp;&nbsp;&nbsp;WEND<br />CrpData1<br />&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x87654321&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;/*When&nbsp;the&nbsp;Data&nbsp;is&nbsp;为0x87654321,user&nbsp;code&nbsp;be&nbsp;protected.&nbsp;当此数为0x87654321时,用户程序被保护&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;ENDIF<br /><br />;/*&nbsp;分配堆栈空间&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AREA&nbsp;&nbsp;&nbsp;&nbsp;MyStacks,&nbsp;DATA,&nbsp;NOINIT,&nbsp;ALIGN=2<br /><br />IrqStackSpace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;IRQ_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;&nbsp;;Stack&nbsp;spaces&nbsp;for&nbsp;Interrupt&nbsp;ReQuest&nbsp;Mode&nbsp;中断模式堆栈空间<br />FiqStackSpace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;FIQ_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;&nbsp;;Stack&nbsp;spaces&nbsp;for&nbsp;Fast&nbsp;Interrupt&nbsp;reQuest&nbsp;Mode&nbsp;快速中断模式堆栈空间<br />AbtStackSpace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;ABT_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;&nbsp;;Stack&nbsp;spaces&nbsp;for&nbsp;Suspend&nbsp;Mode&nbsp;中止义模式堆栈空间<br />UndtStackSpace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;UND_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;&nbsp;;Stack&nbsp;spaces&nbsp;for&nbsp;Undefined&nbsp;Mode&nbsp;未定义模式堆栈<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AREA&nbsp;&nbsp;&nbsp;&nbsp;Heap,&nbsp;DATA,&nbsp;NOINIT<br />bottom_of_heap&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;1<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AREA&nbsp;&nbsp;&nbsp;&nbsp;Stacks,&nbsp;DATA,&nbsp;NOINIT<br />StackUsr<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;END<br /><br />我的<br />初始化函数<br /><br />void&nbsp;TargetResetInit(void)<br />{<br />#ifdef&nbsp;__DEBUG_RAM&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MEMMAP&nbsp;=&nbsp;0x2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//remap<br />#endif<br /><br />#ifdef&nbsp;__DEBUG_FLASH&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MEMMAP&nbsp;=&nbsp;0x1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//remap<br />#endif<br /><br />#ifdef&nbsp;__IN_CHIP&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MEMMAP&nbsp;=&nbsp;0x1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//remap<br />#endif<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL0&nbsp;=&nbsp;(PINSEL0&nbsp;&&nbsp;0xFFFF0000)&nbsp;|&nbsp;0x05&nbsp;|&nbsp;0x50;<br /><br />/*&nbsp;设置系统各部分时钟&nbsp;*/<br />/*&nbsp;Set&nbsp;system&nbsp;timers&nbsp;for&nbsp;each&nbsp;component&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;PLLCON&nbsp;=&nbsp;1;<br />#if&nbsp;(Fpclk&nbsp;/&nbsp;(Fcclk&nbsp;/&nbsp;4))&nbsp;==&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;VPBDIV&nbsp;=&nbsp;0;<br />#endif<br />#if&nbsp;(Fpclk&nbsp;/&nbsp;(Fcclk&nbsp;/&nbsp;4))&nbsp;==&nbsp;2<br />&nbsp;&nbsp;&nbsp;&nbsp;VPBDIV&nbsp;=&nbsp;2;<br />#endif<br />#if&nbsp;(Fpclk&nbsp;/&nbsp;(Fcclk&nbsp;/&nbsp;4))&nbsp;==&nbsp;4<br />&nbsp;&nbsp;&nbsp;&nbsp;VPBDIV&nbsp;=&nbsp;1;<br />#endif<br /><br />#if&nbsp;(Fcco&nbsp;/&nbsp;Fcclk)&nbsp;==&nbsp;2<br />&nbsp;&nbsp;&nbsp;&nbsp;PLLCFG&nbsp;=&nbsp;((Fcclk&nbsp;/&nbsp;Fosc)&nbsp;-&nbsp;1)&nbsp;|&nbsp;(0&nbsp;&lt&lt&nbsp;5);<br />#endif<br />#if&nbsp;(Fcco&nbsp;/&nbsp;Fcclk)&nbsp;==&nbsp;4<br />&nbsp;&nbsp;&nbsp;&nbsp;PLLCFG&nbsp;=&nbsp;((Fcclk&nbsp;/&nbsp;Fosc)&nbsp;-&nbsp;1)&nbsp;|&nbsp;(1&nbsp;&lt&lt&nbsp;5);<br />#endif<br />#if&nbsp;(Fcco&nbsp;/&nbsp;Fcclk)&nbsp;==&nbsp;8<br />&nbsp;&nbsp;&nbsp;&nbsp;PLLCFG&nbsp;=&nbsp;((Fcclk&nbsp;/&nbsp;Fosc)&nbsp;-&nbsp;1)&nbsp;|&nbsp;(2&nbsp;&lt&lt&nbsp;5);<br />#endif<br />#if&nbsp;(Fcco&nbsp;/&nbsp;Fcclk)&nbsp;==&nbsp;16<br />&nbsp;&nbsp;&nbsp;&nbsp;PLLCFG&nbsp;=&nbsp;((Fcclk&nbsp;/&nbsp;Fosc)&nbsp;-&nbsp;1)&nbsp;|&nbsp;(3&nbsp;&lt&lt&nbsp;5);<br />#endif<br />&nbsp;&nbsp;&nbsp;&nbsp;PLLFEED&nbsp;=&nbsp;0xaa;<br />&nbsp;&nbsp;&nbsp;&nbsp;PLLFEED&nbsp;=&nbsp;0x55;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((PLLSTAT&nbsp;&&nbsp;(1&nbsp;&lt&lt&nbsp;10))&nbsp;==&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;PLLCON&nbsp;=&nbsp;3;<br />&nbsp;&nbsp;&nbsp;&nbsp;PLLFEED&nbsp;=&nbsp;0xaa;<br />&nbsp;&nbsp;&nbsp;&nbsp;PLLFEED&nbsp;=&nbsp;0x55;<br /><br />/*&nbsp;设置存储器加速模块&nbsp;*/<br />/*&nbsp;Set&nbsp;memory&nbsp;accelerater&nbsp;module*/<br />&nbsp;&nbsp;&nbsp;&nbsp;MAMCR&nbsp;=&nbsp;0;<br />#if&nbsp;Fcclk&nbsp;&lt&nbsp;20000000<br />&nbsp;&nbsp;&nbsp;&nbsp;MAMTIM&nbsp;=&nbsp;1;<br />#else<br />#if&nbsp;Fcclk&nbsp;&lt&nbsp;40000000<br />&nbsp;&nbsp;&nbsp;&nbsp;MAMTIM&nbsp;=&nbsp;2;<br />#else<br />&nbsp;&nbsp;&nbsp;&nbsp;MAMTIM&nbsp;=&nbsp;3;<br />#endif<br />#endif<br />&nbsp;&nbsp;&nbsp;&nbsp;MAMCR&nbsp;=&nbsp;2;<br /><br />/*&nbsp;设置串行口&nbsp;*/<br />/*&nbsp;initialize&nbsp;UART*/<br />&nbsp;&nbsp;&nbsp;&nbsp;//InitialiseUART0(115200);<br /><br />/*&nbsp;设置实时时钟&nbsp;*/<br />/*&nbsp;initialize&nbsp;RTC*/<br />&nbsp;&nbsp;&nbsp;&nbsp;CCR&nbsp;=&nbsp;0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ILR&nbsp;=&nbsp;0x03;<br />&nbsp;&nbsp;&nbsp;&nbsp;//PREINT&nbsp;=&nbsp;Fpclk&nbsp;/&nbsp;32768&nbsp;-&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;//PREFRAC&nbsp;=&nbsp;Fpclk&nbsp;-&nbsp;(Fpclk&nbsp;/&nbsp;32768)&nbsp;*&nbsp;32768;<br />&nbsp;&nbsp;&nbsp;&nbsp;YEAR=YEAR%100+2000;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CCR&nbsp;=&nbsp;0x12;<br />&nbsp;&nbsp;&nbsp;&nbsp;//CIIR&nbsp;=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置秒值的增量产生1次中断<br />&nbsp;&nbsp;&nbsp;&nbsp;ILR&nbsp;=&nbsp;0x03;<br />&nbsp;&nbsp;&nbsp;&nbsp;CCR&nbsp;&nbsp;=&nbsp;0x11;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;启动RTC<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />/*&nbsp;initialize&nbsp;VIC*/<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnClr&nbsp;=&nbsp;0xffffffff;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntSelect&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;//T0IR&nbsp;=&nbsp;0xffffffff;<br />&nbsp;&nbsp;&nbsp;&nbsp;//T0TCR&nbsp;=&nbsp;0X02;<br />&nbsp;&nbsp;&nbsp;&nbsp;//T1IR&nbsp;=&nbsp;0xffffffff;<br />&nbsp;&nbsp;&nbsp;&nbsp;//T1TCR&nbsp;=&nbsp;0X02;<br />}<br />
hotpower 发表于 2007-3-3 01:05 | 显示全部楼层

关于丢失中断的问题

首先我不喜欢ucos2,因为我认为它是8位机的产物.<br />再者也更不喜欢ads1.2,因为它不如Keil好用.<br />当然也反对ARM的中断嵌套,我认为没什么必要而且给自己挖坑~~~<br /><br />ucos2节拍中断默认最高级,这个我认为不合理,keil就定为最低级.<br />我认为OS的任务都应该比硬件中断的级别低,这样就降级了中断嵌套<br />的必要性.<br /><br />丢失中断肯定是中断内处理时间过长或级别不合理造成的.<br />也可能和主频过低有关,这要看最快的中断周期了.<br />这些和中断的多少关系不太大.<br /><br />中断嵌套不是什么好玩意,本来很简单的处理可能变得更复杂.<br />中断嵌套的关键是禁止当前中断或低级别中断,还要进行保护现场<br />开关中断等操作可能比本来中断任务处理时间还要长...<br /><br />我认为玩OS中断,应该在中断中处理最关键的事情,然后发送消息给任务<br />管理器,使之退出中断后以优先任务的姿态继续执行剩余的任务.<br /><br />再者OS的任务级别的设置也是很重要的,否则也不能很好地完成任务.
 楼主| cmanning 发表于 2007-3-5 09:26 | 显示全部楼层

不知如何使用你的"非典架构"?

<br />1.<br />我也不喜欢ads1.2,可是老板认为Keil要花钱.......<br />2.<br />的确担心ARM的中断嵌套,一直想舍弃中断嵌套,<br />但又担心不中断嵌套,效率是否会受到影响?<br />3.<br />你的&quot;非典架构&quot;是不用中断嵌套的吧?<br />4.<br />我目前ucos2节拍&nbsp;5ms&nbsp;中断默认最高级(ads1.2),<br />hotpower是指&nbsp;keil中ucos2节拍是定为最低级别的?<br />5.<br />非常赞同“应该在中断中处理最关键的事情,然后发送消息给任务<br />管理器,使之退出中断后以优先任务的姿态继续执行剩余的任务.”<br />这句话,我应该是这样用的。<br />6.<br />由于没用过kail,不能直接应用你的文件。<br />不知如何使用你的&quot;非典架构&quot;,修改我目前的文件?<br /><br />
pheavecn 发表于 2007-3-5 12:11 | 显示全部楼层

晕,自己找本操作系统原理学下先。

hotpower老兄运行的进程很多的。
hotpower 发表于 2007-3-5 12:23 | 显示全部楼层

关键我们对"实时"的理解不同

所以我的任务分配的很合理,中断50KBPS也没事,何况我几乎用了所有的中断源.
 楼主| cmanning 发表于 2007-3-6 20:03 | 显示全部楼层

能不能来个"非典架构"的扫盲啊

我也用了所有的外设,中断源也很多。<br />就是要向hotpower学习&quot;非典架构&quot;,用到ucos2中。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

1

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