完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
7 个讨论
|
|
捷恩斯威移值带FPU的不给源码,不看V7M文档还是搞不出。Richard Ma的示例相当的nice!!! 晚上按示例整了个MDK的版本,开两个任务使用浮点计算cos(a) * cos(a) + sin(a) *sina(a) = 1正常。 有兴趣的可以试用一下,直接os_cpu_a.asm以及os_cpu.c以下部分即可 IAR的版本也差不多,照着改就是了。 OSPendSV CPSID I ; Prevent interruption during context switch MRS R0, PSP ; PSP is process stack pointer CBZ R0, OSPendSV_nosave ; Skip register save the first time SUB R0, R0, #0x20 ; Save remaining regs r4-11 on process stack STM R0, [R4-R11] SUB R0, R0, #0X40 VSTM R0, [D8-D15] LDR R1, =OSTCBCur ; OSTCBCur->OSTCBStkPtr = SP; LDR R1, [R1] STR R0, [R1] ; R0 is SP of process being switched out ; At this point, entire context of process has been saved OSPendSV_nosave PUSH [R14] ; Save LR exc_return value LDR R0, =OSTaskSwHook ; OSTaskSwHook(); BLX R0 POP [R14] LDR R0, =OSPrioCur ; OSPrioCur = OSPrioHighRdy; LDR R1, =OSPrioHighRdy LDRB R2, [R1] STRB R2, [R0] LDR R0, =OSTCBCur ; OSTCBCur = OSTCBHighRdy; LDR R1, =OSTCBHighRdy LDR R2, [R1] STR R2, [R0] LDR R0, [R2] ; R0 is new process SP; SP = OSTCBHighRdy->OSTCBStkPtr; VLDM R0, [D8-D15] ADD R0, R0, #0X40 LDM R0, [R4-R11] ADD R0, R0, #0X20 BIC.W LR, LR, #0x10 ; Set exception return uses floating-point state MSR PSP, R0 ; Load PSP with new process SP ORR LR, LR, #0x04 ; Ensure exception return uses process stack CPSIE I BX LR ; Exception return will restore remaining context OS_STK *OSTaskStkInit (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT16U opt) [ OS_STK *stk; unsigned int i; (void)opt; /* 'opt' is not used, prevent warning */ stk = ptos; /* Load stack pointer */ *(stk) = (INT32U)0xCCUL; *(--stk) = (INT32U)0xDDUL; for(i = 16u; i != 0; i--) [ *(--stk) = (INT32U)0xAAAAAAAAUL; ] /* Registers stacked as if auto-saved on exception */ *(--stk) = (INT32U)0x01000000uL; /* xPSR */ *(--stk) = (INT32U)task; /* Entry Point PC */ *(--stk) = (INT32U)0xFFFFFFFEL; /* R14 (LR) (init value will */ /* cause fault if ever used) */ *(--stk) = (INT32U)0x12121212uL; /* R12 */ *(--stk) = (INT32U)0x03030303uL; /* R3 */ *(--stk) = (INT32U)0x02020202uL; /* R2 */ *(--stk) = (INT32U)0x01010101uL; /* R1 */ *(--stk) = (INT32U)p_arg; /* R0 : argument */ /* Remaining registers saved on process stack */ *(--stk) = (INT32U)0x11111111uL; /* R11 */ *(--stk) = (INT32U)0x10101010uL; /* R10 */ *(--stk) = (INT32U)0x09090909uL; /* R9 */ *(--stk) = (INT32U)0x08080808uL; /* R8 */ *(--stk) = (INT32U)0x07070707uL; /* R7 */ *(--stk) = (INT32U)0x06060606uL; /* R6 */ *(--stk) = (INT32U)0x05050505uL; /* R5 */ *(--stk) = (INT32U)0x04040404uL; /* R4 */ for (i = 16u; i != 0; i--) /* Initialize general-purpose Floating point registers */ [ *--stk = (INT32U)0xBBBBBBBBuL; /* S16-S31 */ ] return (stk); ] |
|
|
|
|
|
aoguansusan 发表于 2019-9-4 11:23 弱弱的问一些,有个问题:在APP.C中有定义:OS_EVENT *MENU_ACK_Mbox;//菜单应答 在APP_CFG.H中:extern OS_EVENT *MENU_ACK_Mbox;//菜单应答 ,在其他地方引用MENU_ACK_Mbox的时候会提示没有定义怎么回事啊? IAR中跑uC的时候不会有这种提示啊,头问题包含错了? |
|
|
|
|
|
你好,我同样碰到浮点问题,以前是M3 LM3S9B96用UCOS/II,程序都跑的好好的,现在全部切换到M4 TMC129ENCPDT(包括ucos),其他都正常,一到浮点运算的时候就有点混乱了,死机状态,开始不知道有浮点问题,困惑了好久,后来网上查了下,确认才知道M4有个浮点问题;我按照上面2位说的改了os_cpu_a.asm和os_cpu_c.c,但是一启动死机了,还不如以前,是什么情况? |
|
|
|
|
|
YOYOOO 发表于 2019-9-4 10:45 今天刚好遇到这个问题,安装这个修改后可以用,谢谢。 |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
684 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
600 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1055 浏览 1 评论
741 浏览 0 评论
普中科技F28335开发板每次上电复位后数码管都会显示,如何熄灭它?
525 浏览 1 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
163浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
127浏览 14评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
127浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
123浏览 12评论
TPA6304-Q1: TPA6304 两片公用一组I2C的话,其中一片配置不成功怎么办
170浏览 10评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 09:03 , Processed in 1.030867 second(s), Total 65, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号