zhaihw520

    1. 关于看门狗触发函数的优先级 5/4583 嵌入式系统 2010-06-28
      昨晚看到这个问题,觉得很有意思,当时没有想清楚,看似很奇怪,今天到公司试了一下,我想我已经搞清楚原因了,哈哈。具体如下: 1、代码略作改动,主要是printf换成logMsg(printf不能在中断中调,当然这个跟本例没关系),另外加了一条打印信息logMsg("tID is 0x%x\n",tID)。 WDOG_ID dogID; void feedDog() {   int tID=0,tPri,flag;   tID=taskIdSelf();      logMsg("tID is 0x%x\n",tID);   flag = taskPriorityGet(tID,&tPri);   logMsg("feed dog task priority is %d, flag=%d\n",tPri,flag);   /*   other codes...   */   wdStart(dogID,250,(FUNCPTR)feedDog,0); } void dogTest() {   dogID=wdCreate();   wdStart(dogID,250,(FUNCPTR)feedDog,0); } 2、运行dogTest结果如下: -> interrupt: tID is 0x83a0dd20 interrupt: feed dog task priority is 70, flag=0 interrupt: tID is 0x83a0dd20 interrupt: feed dog task priority is 70, flag=0 interrupt: tID is 0x83f342a0 interrupt: feed dog task priority is 50, flag=0 interrupt: tID is 0x83f342a0 interrupt: feed dog task priority is 50, flag=0 interrupt: tID is 0x83a0dd20 interrupt: feed dog task priority is 70, flag=0 interrupt: tID is 0x83aecd90 interrupt: feed dog task priority is 100, flag=0 interrupt: tID is 0x83aecd90 interrupt: feed dog task priority is 100, flag=0 interrupt: tID is 0x83f342a0 interrupt: feed dog task priority is 50, flag=0 interrupt: tID is 0x83a0dd20 interrupt: feed dog task priority is 70, flag=0 interrupt: tID is 0x83a0dd20 interrupt: feed dog task priority is 70, flag=0 3、我的任务列表摘要: ->i   NAME        ENTRY       TID    PRI   STATUS      PC       SP     ERRNO  DELAY ---------- ------------ -------- --- ---------- -------- -------- ------- ----- …… XXXX          XXXX      83f342a0  50 PEND       803dfb6c 83f34210       0     0 …… XXXX          XXXX      83a0dd20  70 PEND+T     803dfb6c 83a0dc78  3d0004     2 …… XXXX          XXXX      83aecd90 100 DELAY      804b67a8 83aecb28   30065     3 …… 4、原因解释         问题出在tID=taskIdSelf()这一步,调用后得到的只是相应任务的tID,而不是楼主想象中的中断tID,所以再用taskPriorityGet(tID,&tPri)取优先级时取到的也只是对应tID任务的优先级,而这个tID对应的任务是中断来时打断的那个任务,因为此任务经常是变化的,所以最后打出的优先级也是不同的,这一点可以解释楼主和楼上所有的现象,打出为0的朋友也不是打出的中断优先级,而是优先级为0的任务的优先级,可以像我那样将tID打出看一下就行了。         手册中明确指出taskIdSelf()在中断中调用将返回无效ID,如下: taskIdSelf( ) NAME taskIdSelf( ) - get the task ID of a running task SYNOPSIS int taskIdSelf (void) DESCRIPTION This routine gets the task ID of the calling task. The task ID will be invalid if called at interrupt level. RETURNS The task ID of the calling task. 相信看到这里大家应该明白了上述想象的原因了。 5、深入分析 为证实上面的想法,我又看了一下vxworks的源码,大致摘要是这样的: WIND_TCB *        taskIdCurrent;                                /* current task ID */ void kernelInit { …… taskIdCurrent = (WIND_TCB *) NULL;        /* initialize taskIdCurrent */ …… taskIdCurrent = &tcbAligned.initTcb;        /* update taskIdCurrent */ …… } /******************************************************************************* * * taskIdSelf - get the task ID of a running task * * This routine gets the task ID of the calling task.  The task ID will be * invalid if called at interrupt level. * * RETURNS: The task ID of the calling task. */ int taskIdSelf (void)     {     return ((int)taskIdCurrent);     } 即taskIdCurrent总是指向当前任务的指针,当当前任务被中断打断时,该值并没有变化,除非切到新任务时该值才会再指向新任务。在中断中调taskIdSelf(),返回的是中断来之前的任务的指针地址,即任务tID,然后如果再用taskPriorityGet(tID,&tPri)去取优先级的话,那当然就是被中断打断的那个任务的优先级喽。 吼吼,想清楚一个问题不容易呀,庆祝一下喽……
    2. 学ARM9好还是ARM11好? 7/5355 ARM技术 2010-06-18
      学习都一样。要是我就买资料全的,还便宜的。
    3. 为什么在初始化MSP430的最后程序会跑飞 8/3365 嵌入式系统 2010-06-11
      感觉你的初始化有些乱, 配置io 要在 配置最后进行, 应该先关闭中断 配置之后 再打开中断, 你看一下ti的 demo ,人家怎么写的,找找规律, 程序跑飞了,你写的问题,跟踪看看
    4. 我用alsa的arecord录音问题 5/11778 嵌入式系统 2010-06-08
      放在PC上播放是正常的吗?如果也快了,尝试把播放速度调到一半试试,看是不是好的,我曾经遇到变慢的问题,在Android系统中。
    5. AXD 调试的问题 8/3583 嵌入式系统 2010-06-08
      没看过这本书....单看那一句话的话,我觉得它说的是错的....ARM的地址0通常是异常向量表.....
    6. KITLOutputDebugString 问题 4/2923 嵌入式系统 2010-06-07
      没人顶,算了,全改成RETAILMSG。。。
    7. 6410 spi的始终怎么设置 1/3552 嵌入式系统 2010-05-26
      不明白,你的AD转换速率和你的SPI时钟有什么联系?是AD转换后的数据通过SPI传给你的6410吗? 要是那样的话,SPI的时钟速率也同你AD没关联,spi只是代表传输的速率,而你ad还没有转换完之前,你可以不读你的AD值就可以啦。等到转换完了,你才去读,理论上,这时候,SPI速度越快越好,省时间啊。
    8. 关于.bin和.NB0 4/3522 嵌入式系统 2010-04-14
      EBOOT.BIN长度为0的话没有EBOOT.NB0也就正常了。应该是先生成BIN,再根据BIN生成NB0。 估计是你EBOOT的BIB文件写得不对。
    9. 请教WinCE下加载位图的文件路径问题 3/3966 嵌入式系统 2010-03-03
      WINCE是没有相对路径概念的,所以如果AP中想要加载某个位图一定要知道位图的完整路径,如果图是和AP同路径的可以采取先获取AP执行的路径再补全位图路径的方法。
    10. jiqiang01234 您好, 谢谢您给我的回复, 我想知道如何试用封装好的库。 由于我想把串口发信写在我的另一个opencv里面, 这些封装是否能以其他程序调用:例如c/c++
    11. 运算放大器的应用电路分析探讨 6/3115 嵌入式系统 2010-01-16
      去一些大公司的网站下,什么ADI, TI的很多,很全
    12.                                  等待回答!!
    13.                                  各位不要以偏概全好不好,我见过万用表测电阻输出有9V多的,如果您见过像FLUKE这样输出限制为1.5V或DT8系列0.65V的就认为全部是这样,那就错了。 还不信?援引外国人的话:Signamertrics 公司 CEO Tee.Sheffer 先生说过:“我在展览会上见到过某些 数字万用表, 在表演时加在被测电阻上的电压大于 10V, 这个电压成为一种源, 能激起振荡, 造成很大的测量误差。” 可能他说的也是错的吧
    14. 如何跳转到绝对地址 8/3392 嵌入式系统 2009-11-23
      引用 4 楼 amorous 的回复: 看看lz的实验代码在哪添加~ 引用 2 楼 guopeixin 的回复: 应该是MMU引起的 1.由bootloader跳到nk的时候用物理地址跳,不要用虚拟地址跳 2.明确你的物理地址和虚拟地址的映射关系
      只用汇编,暂时不管NK,9263的板子 ;Put the CPU in Supervisor mode (SVC) and disable IRQ and FIQ interrupts.                 ldr     r0, =0xD3 ;         11010011b                 msr     cpsr_c, r0 ;Disable the MMU, caches, and write-buffer and flush.                 ldr     r0, =0x00000078                 mcr     p15, 0, r0, c1, c0, 0 .....(灯) ldr  pc, =0x0 然后我就点灯,延时后熄灯(这一步已经点亮),再跳转到 0x00000000,也就是再来一遍,可是就飞了(如果没有飞,那么肯定是循环点灯) thank u
    15. 重启cdma的AT指令是什么啊 5/5090 嵌入式系统 2009-11-20
      ATZ吧!
    16. 单片机通信反掉了 15/4444 嵌入式系统 2009-11-11
      2、3接线错了?
    17. 自己加点调试消息追踪一下,知道了整个驱动的工作流程就不怕了.
    18. 低功耗的人机界面 3/2657 嵌入式系统 2009-10-03
      你的问题没说太清楚。如果就是键盘和显示屏的话,那主要是选择低功耗的显示屏,看规格书上的功耗参数即可,然后就是软件设计控制好背光的开关条件了。
    19.                                  可以的!但速度至少比内部FLASH慢5倍!
    20. 个人心得:wince的学习路线 146/28127 嵌入式系统 2009-09-21
      很清晰

最近访客

< 1/1 >

统计信息

已有84人来访过

  • 芯积分:--
  • 好友:--
  • 主题:10
  • 回复:56

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言