搜索
bottom↓
回复: 7

求好心人帮助

[复制链接]

出0入0汤圆

发表于 2010-10-16 08:24:23 | 显示全部楼层 |阅读模式
退休在家十分无聊,便用退休金买了一块优龙的44B0X开发板,这种开发板便宜的只有280元,我刚刚接触44B0X,怕技术支持不好,有意买了块贵的,花了我半个多月的退休金.谁知道,拿到东西后才知道受骗了.我因为老年脑梗塞,行走不便,所以从北航博士店买的,它们可以送货上门,货到付款,但需要加38元运费,我问博士店,技术支持是优龙负责,但东西到手后,确没有人管我了.我的问题很简单,只要求在44B0X上跑UCOSII,但必须加用户中断.优龙提供的USCII可以跑,中断也能加,但只要我在中断中发送信号量,程序就出现数据异常,各位请帮我分析一下,我估计是系统移植的问题.我实在没有办法了,年纪太大难以修改底层软件,所以希望有哪位好心人,直接传送给我一份44B0X跑的UCOSII源码,解决一下我目前的困境.开发环境是ADS1.2.我的email:wfxslx@gmail.com,在这里我先谢谢了.济南

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2010-10-16 08:32:25 | 显示全部楼层
不会 帮顶,年纪很大的爱好者?

出0入0汤圆

发表于 2010-10-16 08:40:17 | 显示全部楼层
回复【楼主位】wfxslx
-----------------------------------------------------------------------

UCOS我用得还不太熟悉,但好像在中断中是不能发送信号量、不能有临界区等诸如此类的东西的。

出0入0汤圆

 楼主| 发表于 2010-10-16 10:18:17 | 显示全部楼层
回复【2楼】WithSword 倚剑
-----------------------------------------------------------------------

可以明确告诉你,中断必须能发送信号量,只有这样,才能把一些要做的服务移到主程序中做,提高系统的实时性.

出0入0汤圆

发表于 2010-10-16 10:38:19 | 显示全部楼层
回复【3楼】wfxslx
-----------------------------------------------------------------------

UCOS不支持这么做,你必须也没用。

出0入0汤圆

 楼主| 发表于 2010-10-16 10:53:58 | 显示全部楼层
回复【4楼】WithSword 倚剑
-----------------------------------------------------------------------
二楼老弟:是我错了,我检查了过去几年使用的程序,当时用了一个宏,对此我并没有吃透,是直接套用别人的,这个宏我列在下面,当时发信号是在IRQ_Exception_Function函数中发的,是不是它已经退出了中断?
当时使用的芯片是LPC系列,对44B0X应当在什么地方追加这段程序?或者您能否告诉我中断应当怎么加法?你就以RTC_TICK中断为例,告诉我具体应当怎么做法?您能否把您的EMAIL告诉我,以便请教,这件事已经困惑我很久了,我今天买了一个UCOS源码,我自己先试试看,所以今天我就下网了,您的帖子我会随时关注的,最好把EMAIL告诉我.
$IRQ_Label HANDLER $IRQ_Exception_Function

        EXPORT  $IRQ_Label                      ;// 输出的标号
        IMPORT  $IRQ_Exception_Function         ;// 引用的外部标号

$IRQ_Label
        SUB     LR, LR, #4                      ;// 计算返回地址
        STMFD   SP!, {R0-R3, R12, LR}           ;// 保存任务环境
        MRS     R3, SPSR                        ;// 保存状态
        STMFD   SP, {R3, SP, LR}^               ;// 保存用户状态的R3,SP,LR,注意不能回写
                                                ;// 如果回写的是用户的SP,所以后面要调整SP
        LDR     R2,  =OSIntNesting              ;// OSIntNesting++
        LDRB    R1, [R2]
        ADD     R1, R1, #1
        STRB    R1, [R2]

        SUB     SP, SP, #4*3
        
        MSR     CPSR_c, #(NoInt | SYS32Mode)    ;// 切换到系统模式
        CMP     R1, #1
        LDREQ   SP, =StackUsr
        
        BL      $IRQ_Exception_Function         ;// 调用c语言的中断处理程序

        LDR     R2, =OsEnterSum                 ;// OsEnterSum,使OSIntExit退出时中断关闭
        MOV     R1, #1
        STR     R1, [R2]

        BL      OSIntExit

        LDR     R2, =OsEnterSum                 ;// 因为中断服务程序要退出,所以OsEnterSum=0
        MOV     R1, #0
        STR     R1, [R2]

        MSR     CPSR_c, #(NoInt | IRQ32Mode)    ;// 切换回irq模式
        LDMFD   SP, {R3, SP, LR}^               ;// 恢复用户状态的R3,SP,LR,注意不能回写
                                                ;// 如果回写的是用户的SP,所以后面要调整SP
        LDR     R0, =OSTCBHighRdy
        LDR     R0, [R0]
        LDR     R1, =OSTCBCur
        LDR     R1, [R1]
        CMP     R0, R1

        ADD     SP, SP, #4*3                    
        MSR     SPSR_cxsf, R3
        LDMEQFD SP!, {R0-R3, R12, PC}^          ;// 不进行任务切换
        LDR     PC, =OSIntCtxSw                 ;// 进行任务切换
    MEND

;/* 以下添加中断句柄,用户根据实际情况改变 */

;/*IRQ中断*/
IRQ_Handler        HANDLER IRQ_Exception


;/*定时器0中断*/
Timer0_Handler  HANDLER Timer0_Exception
;/*UART0中断*/
UART0_Handler HANDLER UART0_Exception
;/*RTC中断*/
INT3_Handler HANDLER INT3_Exception
;/*I2C中断*/
I2C_Handler HANDLER I2c_Exception
;/*UART1中断*/
UART1_Handler HANDLER UART1_Exception
;/*SPI中断(使用EINT2)*/
SPI_Handler HANDLER SPI_Exception

对您的指点我十分感激,至少让我知道问题是出走我的程序而不是系统上,谢谢了.

出0入0汤圆

发表于 2010-10-16 11:08:28 | 显示全部楼层
自己玩都这么执着

看来工作中楼主是个牛人

何必呢何必呢

出0入0汤圆

发表于 2010-10-16 12:40:30 | 显示全部楼层
回复【5楼】wfxslx
-----------------------------------------------------------------------

既然你工作了50多年了,就应该知道自己不明白或者不确定的东西就不要乱用,靠摸着石头过河可不是个好方法。不明白不知道的东西情愿不去使用,这可不叫靠猜过日子。
就这么和你说吧,发送信号量成功之后,会调用一次任务级调度器,而UCOS中有任务级调度器和中断级调度器,分别在任务中和中断中调用。你在中断中发送了信号量,那么就意味着在中断中调用了任务级的任务切换函数。进中断时压的堆栈没弹出来,调用任务级切换时又压了一次,不出问题才怪。

但愿有高手出来指出我说的是错的!



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

本版积分规则

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

GMT+8, 2024-6-10 00:44

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

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