ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:28.44KB ,
资源ID:7922686      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7922686.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ARM经典300问131180 免费下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ARM经典300问131180 免费下载.docx

1、ARM经典300问131180 免费下载第131 问:Q:利用lpc2104 开发应用程序时,在Os_call_arm.s,Os_call.c 两个文件中,那几个函数需要在汇编中实现,哪几个需要在.c 文件中实现,为什么 谢谢各位大虾 !A:4 个以上参数用c 实现.因为通过寄存器只能传递4 个参数.31第132 问:Q:如果禁止SmallRTOS51 进行中断嵌套管理(#define EN_OS_INT_ENTER 0),是否还需要设置中断优先级寄存器IP,使得所有中断的优先级都相同(全高或全低)A:受SmallRTOS51 管理的设置为最低优先级,不受SmallRTOS51 管理的设置其它

2、优先级较好.第133 问:Q:在OS_CPU_S.s 文件中有如下一段代码,其中有两句代码的作用不是很明白,请解说一下.OSIntCtxSw_1LDR R4, R6 ;获取新任务堆栈指针;这两行代码有何作用呢ADD SP, R4, #68 ;17 寄存器CPSR,OsEnterSum,R0-R12,LR,SPLDR LR, SP, #-8;MSR CPSR_c, #(NoInt | SVC32Mode) ;进入管理模式MOV SP, R4 ;设置堆栈指针LDMFD SP!,R4, R5 ;CPSR,OsEnterSum;恢复新任务的OsEnterSumLDR R3, =OsEnterSumST

3、R R4, R3MSR SPSR_cxsf, R5 ;恢复CPSRLDMFD SP!, R0-R12, LR, PC ;运行新任务A:这两条指令是在系统模式下恢复用户模式下的LR;可以参考配套ARM 微控制器基础与实战6.4.9 节.第134 问:Q:我将ARM 微控制器基础与实战上uC/OS-II 的第一章例2 移植例在ARM2104 开发版上实现例2 中的TEST.C 中的#define TASK_STK_SIZE 512改为.256,程序编译后,数据量低于16K,能正常运行,但运行时Total Stack不是256 全是1024.另UC/OS-II 书上,第一章例2 每一个任务的堆栈都是

4、512,为什么书上11 页Total Stack是624,1024,1024,1024,1024,1024,1024,请老师指点,万分感谢!A:显示的是字节而定义的是字.第135 问:Q:可不可以把所有的任务和相关信号量(二值)在一个任务里面一起创建呢 我现在是这样做的, 不知是不是这方面的原因 而且全部信号量是这样创建的:XX1 = OSSemCreate(0);32XX2 = OSSemCreate(0);XX3 = OSSemCreate(0);一共创建了十个信号量,以前程序代码版本是分开写的执行起来没有问题,不知现在为什么这样写就会出现小问题呢 这样的问题和我的任务和信号里书写位置有关

5、系吗A:必须在使用信号量前创建信号量.第136 问:Q:UCOS 在中断处理完后调用 OSIntExit(),该函数将判断是不是要进行任务切换,如果是则调用 OSIntCtxSw()切换任务, 然后才恢复寄存器,中断返回.这样说来,在中断返回前,已经切换到别的任务去了,在再次回到被中断的任务前,是不是一直没有中断返回A:如果进行任务调度,则不会执行OSIntCtxSw()后的语句,相当于中断已退出.第137 问:Q:最近我在学习使用SMALL RTOS 时发现一个 BUG.任务在调用系统等待函数 OSWait(K_TMO | K_SIG,x) 后,不能在延时 x 个 ticks 后被唤醒.我分

6、析了一下原因如下:在 OS_CORE.C uint8 OSWait(uint8 typ, uint8 ticks) small 中,case (K_TMO | K_SIG): 中执行了函数 OSTaskSuspend(OSTaskID);( OS_CORE.C 第549 行)而此函数将延时值改为了 0!解决办法:将此函数改用另一个函数 OS_TaskSuspend(TaskID);并在其后加入任务切换函数 OSSched();便能工作正常.A:对,这是疏忽,谢谢.您的更改是对的.第138 问:Q:在文件Os_cpu_a.s 中的函数OSIntCtxSw 中有如下语句:(1) LDR R4, R

7、6(2) ADD SP, R4, #68;17 寄存器 CPSR,OsEnterSum,R0-R12,LR,SP(3) LDR LR, SP, # -8(4) MSR CPSR_c, #(NoInt | SVC32Mode) ;进入管理模式(5) MOV SP, R4(6) LDMFD SP!, R0-R12, LR, PC ;运行新任务ARM 微控制器基础与实战404 页中解释:只所以要(1)(2)是因为OSTCBHighRdyOSTCBStkPtr 保存的是任务栈位置,而寄存器恢复后堆栈指针并不指向这,所以要调33整新任务堆栈指针. 可是将堆栈指针调整到 新任务入栈的其它数据(见ARM 微

8、控制器基础与实战图6.3)处后,除了取出了LR 以外并没有做 什么,而当执行了(4)后又重新将堆栈指针指向了栈顶(即第(5)句).我认为可以将(2)省去,直接将(3)改为LDR LR, SP, # 60,而当执行完(6)后,堆栈指针就自动指向了新任务入栈的其它数据处.这样修改后我运行了EX1_arm 例子,正常.请问这利用(3)进行堆栈指针调整的原因是什么 不调整可以吗 谢谢.A:注意不同模式有不同的SP 指针.您这样做会造成内存泄漏,长时间运行会耗尽堆栈而使程序崩溃.第139 问:Q:不明白在光盘上ROMCODE/SRC/下的os_call.c 做什么用.A:是应用程序与事先固化到flash

9、 中的ucosii 接口的一些代码.在本例中为应用程序如何调用事先 固化到flash 中的ucosii 的OSFlagPend 等函数的接口代码.请看配套ARM微控制器基础与实战的7.4.3 节的第10 点.第140 问:Q:请问在OS_CORE.C 中的常数数组OSUnMapTbl是做什么用的A:用来计算优先级的,查表计算比较快.第141 问:Q:ucos 的中断嵌套层数是否受到初始化时分配的IRQ 堆栈大小的限制 我的理解是每一次中断需入栈的寄存器有R0-R3,R12,LR,SPSR,共7 个,如果想达到8 层嵌套的话,堆栈长度IRQ_STACK_LEGTH 应设为56,不知这样理解对不对

10、.A:是,但中断至少占用8 个字,因为c 语言的中断处理函数会将一些数据压入堆栈.要达到8 级嵌套需要的堆栈长度与具体的代码有关.(编者注:新移植代码已有改变)第142 问:Q:请问:核心定时器中断不进入可能因为我的程序在运行一段时间以后,核心定时器中断即操作系统用的Timer0 不能进入,查发现CPSR 的I 位为1,请教这可能是哪个原因A:估计为开关中断次数不匹配造成.第143 问:Q:请问:GetOSPprioCur()函数应怎样调用 它是一个内核函数吗为什么我在内核和任务分别编译时正常,而合到一起编译时它告警为未定义呢同时我已给您发了一个邮件,请教如何将分别编译的程序合在一起编译的方法

11、,请指教!A:这是我自己编写的函数,其实就是返回OSPrioCur 的值,请参考MyFunction.c.34第144 问:Q:关于不受uc/os 控制的中断:在ARM 板中,非屏蔽中断可以挂起正在执行的uc/os 任务,除了不能使用uc/os 中的函数外,它的执行工序是不是和受管理的中断一样,先挂起当前任务,再保存CPU 寄存,然后再执行中断ISR,完成后,内核脱离,寄存器恢复,最后任务调度.另外,ARM 微控制器基础与实战中提到不受管理的中断,它的工作是否和非屏蔽中断一样,也可以在uc/os 正执行时发生中断.如果不同,它们是怎样工作最好是象受管理中断一样说明一下它的工作时序!A:必须比受

12、管理的中断的优先级高,编写方法与没有OS 时中断的编写方法一样.第145 问:Q:不受uc/os-ii 管理的中断和受管理的中断是否具有相同的响应方式,即不受管理的中断在中断 uc/os 正执行的任务后,是不是也是先挂起当前的任务,保存CPU 寄存器,再执行中断子程序,恢复CPU 寄存器,进行最优先级任务的调度.A:不受uc/os-ii 管理,uc/os-ii 都不知道,还有什么任务调度Q:我知道不受管理的中断不能调用uc/os 的函数,但ARM 微控制器基础与实战上说:FIQ 不受uc/os 管理,但可以用来执行紧急任务,就是说在uc/os 运行时,不受uc/os管理的中断还是可以发生的,它

13、是把整个uc/os 操作系统中止,还是只是中止uc/os 正在执行的任务.不受管理的中断完成后,接着执行什么A:可以发生,中断整个RTOS.Q:我看了您在lpc210x 上的移植代码,你在说明中说:如果您想通过软件仿真,请将target.c 中的第 51 行屏蔽, 这样就可以看到任务逐个切换,最后将进入空闲任务.我照这做了,但是在单步或者设断点执行时会产生异常,原因是未定义指令OS_ENTER_CRITICAL()引起的,经过编译的函数都会变成蓝色,但这个函数还是黑色,因为它实际上是一个软中断,请教您如何调试才能看到任务逐个切换 谢谢!A:1.屏蔽的那一行是死等锁相环锁定,软件仿真时是没有锁相

14、环的.2.黑色是正常的,因为没有定义成函数.3.因为你的 AXD - OPTION - 配置处理器中的 VECTOR CATCH 中的 S 选中了,所以 AXD将你的软件中断当成了异常给捕捉了,取消即可.第146 问:Q:请教ucos2 的源代码中经常碰到:return(void*)0)是什么意思A:返回空指针.第147 问:Q:这是个什么错误,怎么改啊OsMemPut 是个函数名称Error : L6200E: Symbol OSMemPut multiply defined (by uCOS_II.o andOs_mem.o).A:这是重复定义错误.请不要把uCOS_II.C 添加到你的工

15、程中.35第148 问:Q:我想请教一下在配套光盘中有没有ucosII.h 文件,怎么我总是找不到的如没有能否提供下载地方 谢谢!A:北航出版的第2 版就带有uC/OS 2.52 源代码,还可以到其它网站上找找.第149 问:Q:我想问一下一个任务中的子函数的局部变量算不算进堆栈的容量.我发现我在用邮箱传递一个较大的值时,是在一个任务的函数中声明了uint8byte500,可在传递时值发送了变化,只好用的外部变量了,最后搞得邮箱只起了信号量的作用,所以我觉得局部变量虽然是从堆栈中取得数据,最后在任务切换时,把局部变量也保存到堆栈中,不知道我这种理解是否正确A:算.局部变量在函数退出后(不管任务

16、是否却换过)被释放.第150 问:Q:我用UCOS 在EASYARM 上的一个程序内编写了5 个任务,前4 个任务调试后工作正常,在编译第5 个任务时,提示为:Execution region ER_RO overlaps with Execution region ER_ZI.编译还提示:TOTAL ROM SIZE (CODE +RO DATA +RW DATA ) 8624我曾经试图修改#define TASK_STK_SIZE 64 也不管用,请问,如何解决A:问题已找到,代码超过16K.上面的信息会在zi 段或者rw 段与ro 段(代码段)发生重叠时发生.第151 问:Q:请教uc/

17、os 移植问题在2104 上面能进行移植吗 如果不行的话,需要买2106A:你要在os_cfg.h 中把不用的内部调用都裁减掉,就可以做一个很小的内核,就是不裁减你就是14k 左右,写在FLASH 里一样也能运行.第152 问:Q:请教信号量的概念问题.我准备用信号量来编写一个ARM 程序,但我没有完全理解信号量的概念.例如:现在有4 个任务:TASK1,TASK2,TASK3 和TASK4,任务的要求是:TASK1 和TASK2之间需有信号量传递信息;TASK3 和TASK4 之间需也有信号量传递信息.假定TASK1 和TASK2 之中已建立了一个信号量为RandomSem = OSSemC

18、reate(1);我要问的问题是:TASK3 和TASK4 之中的信号量是否需重新建立一个 例如,加一条36RandomSem1 = OSSemCreate(1);换一个问法:即若TASK1 和TASK2 之间需有信号量传递信息;TASK3 和TASK4 之间需也有信号量传递信息,我只需在运行这4 个任务之前的初始化程序中有一条指令即可:RandomSem = OSSemCreate(1);A:用两个信号量,你第一个说法对了.第153 问:Q:各位:在UCOS 多任务中有一个任务结构如下:void TASK(*pdata)uint8 i;任务循环前的一些指令集A;while(1)任务循环;我要

19、问的是:与该任务有关的初始化,如串口初始化,是否不用放在整个程序的开始处,而作为指令集A 的一部分,也可达到同样效果A:启动和初始化代码放在一个文件里主要是为了程序的模块化,不过代码少的话倒是可以放在一个函数里完成.A:ucos 的事件标志使用注意点:请在事件标志结构定义前加_packed,否则由于字节对齐的问题会产生没有反应的bug!第154 问:Q:移植中碰到的问题!我把周工ARM 微控制器基础与实战上的范例1 移植到ARM 上,但任务没有跑起来,请做过移植的朋友帮帮我吧!我是把代码生成HEX 文件全部下到FLASH 中,不知道这样对不对啊 软件需要怎么设置呢A:先检查ARM Linker

20、 的设置是否正确 参照ARM 微控制器基础与实战P42O 设置release的参数.A:感觉运行ex1 还是比较容易的,毕竟斑竹都已经把代码写好调试好了,你可以不必完全把它拷贝下来,可以自己建一个project,然后一个个文件添加,这样比较容易弄懂哪些文件都是来干嘛的,哪些还需要自己改写.推荐在建立project 时可以把相应文件分组,我就是把uC/OS2.52 文件放在一个组下,需要自己改写的(如OS_CPU_A.S)放在一个组内,启动代码放在一个组内,自己的代码(如main,自己的任务)放在一个组内,这样比较分明些,个人建议.第155 问:Q:看过操作系统固化之后,有点疑问:37把操作系统

21、和用户代码分开真的能节约RAM 空间吗 只是在用户代码定义的起始地址在0x40000000 的情况下(即调试时)才会节约吧 一般情况下我觉得如果要真正使用的话都应该是把程序起始地址定义到00000000 上的,这样的话才有,不然一掉电程序就没了.这样理解对吗A:是的,参考合并在一起的例程 ID=861.第156 问:Q:任务间的数据传输除邮箱等外是否可以建立一个全局变量在任务间传递数据!A:可以,但要注意重入问题和代码优化问题,最好使用volatile 修饰变量,如果不能一次读写完毕则需要加上开关中断的代码.第157 问:Q:请问:uc/os 任务堆栈问题.在ucos 移植的程序EX1_arm

22、 中:#define TASK_STK_SIZE 128#define N_TASKS 10请问,任务堆栈设为什么设这么大A:可以变小,但要在复杂任务中应保证够用.第158 问:Q:在看uc/os-II 的书时,关于ucos-II 中任务切换的几种情况的问题.1.在一个时钟周期内,至少所有的任务都要运行一遍,对吗2.任务切换发生的三种情况:a.任务A 主动放弃CPU 的主动权,利用 OSTimeDly() 延时,进行任务切换;b.中断时钟周期发生时,在任务就绪表中寻找最高优先权的任务,如果当前任务不是最高优先级,发生任务切换,否则仍执行原任务;c.发生irq,fiq,软中断,取指错误和取数据错

23、误五种异常模式时,直接发生任务切换, 中断处理结束后,在任务就绪表中寻找最高优先权的任务,如果当前任务不是最高优先级,发生任务切换,否则仍执行原任务.A:1.不一定,如等信号时 OSPend(x, 0, &err)时.2.只有在IRQ,FIQ 和软中断受OS 管理时才能进行任务切换,同理取指,取数异常在启动阶段的 死循环根本谈不上任务切换.第159 问:Q:请问:在移植UC/OS 中的软件中断汇编接口程序中取功能号码.原程序为:如果是在THUMB 状态,则为LDR R0,LR,#-2如果是在ARM 状态, 则为LDR R0, LR, #-4,在清除R0 中的最高两位,R0 的值就为功能号.为什

24、么是从LR 中取值呢 LR 的值是进入中断时候保存的PC 值吗 迷惑!A:执行SWI 指令后,处理器进入管理模式,LR_svc 中保存返回地址,顺藤摸瓜,根据LR_svc38就可以取得SWI 语句,也就取得了中断号.第160 问:Q:请问及各位高手:OSIntCtxSw()函数分别在includes.h 和OS_CPU_A.s 中有定义,区别在哪程序OSIntExit 中调用该函数的时候是不是都是去调用了includes.h 中的宏定义的那个两者各自的应用范围在哪儿 我看过一个移植实例上只有一个OSIntCtxSw 函数.请指教!A:includes.h 中的宏 OSIntCtxSw 在C 中

25、被调用.第161 问:Q:问一个堆栈指针的问题在OSIntCtxSw_1,获取新任务堆栈指针.LDR R4, R6ADD SP, R4, #68 ;17 寄存器CPSR,OsEnterSum,R0-R12,LR,SPLDR LR, SP, #-8MSR CPSR_c, #(NoInt | SVC32Mode) ;进入管理模式MOV SP, R4 ;设置堆栈指针LDMFD SP!, R4,R5 ;CPSR,OsEnterSum;恢复新任务的OsEnterSum.我想问一下:LDR LR, SP, #-8,这一行程序中,为什么堆栈指针要减去8 个字节的值A:这是调整SP 的指针,使其指向栈中的LR

26、.看一看配套ARM 微控制器基础与实战的图6.3.Q:ucos 中断丢失.在ucos 在每秒切换200 次时正常,但在1000 次时中断丢失 可能是哪里的问题A:问题已经找到,是随2104 中的ucos 不支持中断嵌套.在不嵌套时4000 次/秒也是正常的.第162 问:Q:uC/OS-II 能在2104 上和用户程序一起编译吗 一定得分开编译吗ARM 微控制器基础与实战上介绍的移植方法上是分开编译的,我想合并在一起调试,这样就不必用软件中断去寻找系统函数的入口地址.要做到这样,是不是只需把OS_TASK_STAT_EN 设置为1,OS_SELF_EN 为039A:可以,网站上有例子 第163

27、 问:Q:请教:我运行OSInit(); 函数,程序死在SoftwareInterrupt B SoftwareInterrupt 困惑呀!A:uc/osii 的启动代码与普通的启动代码不同,您使用的是普通的启动代码.第164 问:Q:请问:在UC/OS-II 目录中的README.TXT 下,有的例子说:仅lpc2106 有足够的RAM可以在RAM 中放入所用代码.那么,如果我使用LPC2104,在FLASH 中存放运行代码是否能正常运行 谢谢!A:主要看数据是否超出16k,如果超出,请减少任务占用的堆栈.第165 问:Q:请问:在UCOS-IIex2_arm 中,我编译时出现错误提示如下:

28、ERROR:L6221E:execution region ER_R0 overlaps with Execution region ER_ZI.如何解决 而我在UCOS-IIex1_arm 中编译.运行都正常,谢谢!A:定义任务堆栈小一点,如#define TASK_STK_SIZE 128第166 问:Q:uCOS-IIEX2_arm 我什么也不动,用ADS 打开,可是编译的时候出错,是很多文件找不到.比如ucos_ii.h 就找不到.#include .sourceucos_ii.h可是我的光盘里没有source 这个文件夹啊,还有很多uCOS-II 文件也找不到,是不是我的光盘少了东东

29、 站上有得下载吗A:要将uC/OS-II(v2.52)源代程序放到source 目录下,北航出版的uC/OS-II 书(第二版)带有.第167 问:Q:OSIntNesting(嵌套层数)和OsEnterSum(关中断计数器),有什么区别吗我个人认为这两个变量相同,不知为什么要定义两个变量A:OsEnterSum 是关中断的计数器,目的是实现临界段嵌套.OSIntNesting 是中断嵌套层数,目的是实现中断嵌套.第168 问:Q:为何我EX1_FLASH 移植的时候总出现如下错误提示,请问是哪里出错了Error : C2933E: type disagreement for OSTaskStkInit40Os_cpu_c.c line 70A:是调用OSTaskStkInit 时类型不一致导致,好好看一下C 语言.第169 问:Q:请问:在SWI 软中断指令中,LR 中放的是异常模式下的返回地址,而这个地址的低8 位和低24 位分别是thumb 和ARM 指令下的立即数,这种对应的关系是如何来的还有执行THUMB 和ARM 指令,LR 中放的地址最后的位应是0 和00,那么为什么会有swi 01swi 03这样的立即数呢A:您的理解不对,可以看一看os_cpu_s.s 这个文件.第170 问:Q:2104,2119 中都不能用UCOSII 的f

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1