完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
嗨,在XC8(1.40免费或1.33Pro版本)中,在具有堆栈类型配置作为可重入的PIC18F26J50项目中,FSR1中的数据堆栈从0x4F4开始。该项目具有以下功能:void ObjRomArray_read(const char*psrc,uint8_t idx,char*pdest,uint8_t objDestSize);函数ObjRomArray_read立即调用,数据堆栈是0x4FE,局部变量的地址被复制到“pdest”参数指针,指针pdest的值指向不正确的值0x5FB而不是0x4FB。----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ObjRomArray_read(tableRef,i,&剂量,尺寸(剂量));0x3DFE:0x3DFE:MOVLW0x30x30x3E00:MOVWPOStiNC1,ACCESS0x3E02:MOVLW0xFC0xFC0x0x3E0x3E04:ADDWF FSR1,W,ACCESS0x0x0x3E06:ACCESS0x3E08:MOVWWW0xFF0xFF0x3E0A:ADDWFC FSR1H,W,ACCESS0x0x3x3X3X3X3E04:ADDWFC FSR1,W,ACCESS0x3X3X3X3X3X3E04 E0C:MOVWF POSTINC1,ACCESS0x3E0E:MOVLW 0xF90x3E10:MOVF PLUSW1,W,ACCESS0x3E12:MOVWF POSTINC1,ACCESS0x3E14:MOVFF this_dosTable_objRomRefL,POSTINC10x3E16:NOP0x3E18:NOP0x3E18:MOVC10x3E18:MOVX85POSTINC10x3E1A:NOPC10x3E1A:NOP 0x747A:CALL 0x747A,00x3E1E:NOP--------------------------------------------------------------------------------------------------------------------------------------------函数,数据堆栈(FSR1)从0x504开始,当PC=0x477E时,数据堆栈(FSR1)的值是0x506,而“pdest”指针是0x5FB,而不是0x4FB。void ObjRomArray_read(const char*psrc,uint8_t idx,char*pdest,uint8_t objDestSize){0x747A:MOVF POSTINC1,F,ACCESS0x747C:MOVF POSTINC1,F,ACCESS!恒焦*objSrc=psrc;0x747E:MOVLW0xFC0x74747E: MOVLW 0xFC0x7480: MOVLW 0xFC0x7480: MOVFPLUSW1, 0x510x747482: NOP0x510x510x747482: NOP0x7474747484: MOVLW0xFD0x747486: MOVVLW0x7486: MOVX7486PLUSW1, wtemp10emp10x7488: NOP0x748A: NOP0x748A: NOP0x0x748A: MOVLW0xFF0xFF0xFF0x748C: MOVLW0x748C: MOVVLW0xFF有谁已经有这个问题了?
|
|
相关推荐
8个回答
|
|
|
我建议您只提供足够的C源代码,而不提供程序集列表。
|
|
|
|
|
|
这对你有帮助吗?
|
|
|
|
|
|
它至少帮助了一部分:你确定剂量是在堆栈上分配的,而不是在堆中分配的?如果在堆中,地址会更有意义。但运气好的话,在地图文件中给出了剂量的地址。检查一下。(即使没有按名称给出,也可以找到与RetotPurtualSyGoToMuleMyTestTo()关联的RAM。如果在该函数中没有分配其他变量,则相关联的RAM的起始地址将是剂量的地址。
|
|
|
|
|
|
谢谢!我来查一下。我在模拟器中得到了变量的地址,在变量窗口中,只有在这个描述的情况下,这个值是不正确的。
|
|
|
|
|
|
MAP FILE: ***********************function_RecTot._getVolume_Test*********************定义在文件“./src/test/TestExModels.c”中的第124行“参数:大小位置类型i 1[STACK]无符号char Auto vars:大小位置类型剂量3[STACK]结构。返回值:大小位置类型1[STACK]无效寄存器使用:wreg,fsr0l,fsr0h,fsr1l,fsr1h,fsr1h,fsr2l,fsr2h,fsr2h,statu2,statu0,pclath,btemp,btemp,btemp,btemp+1,btemp,btemp,btemp+1,btemp+btemp+1,btemp+btemp+1,btemp+2,btemp+2,btemp+2,btemp+2,btemp+3,btemp+2,btemp+3,btemp+4,btemp+4,btemp+4,btemp+4,btemp tret、tblptrl、tblptrh、tblptru、prodl,bsr,cstack跟踪对象:在入口:在出口:未更改:数据大小:COMRAMH COMRAML BANK0 BANK1 BANK2 BANK3 BANK4 BANK6 BANK9 BANK9 BANK10 BANK11 BANK13 BANK14 Params:0 0 0 0 0 0 0 0 0 0 0 0 0 0本地:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0临时:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0总计:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
|
|
|
|
|
我强迫FSR1以0x500开始,运行正常。
|
|
|
|
|
|
如果以可重入模式编译,则此代码具有相同的问题。比较调用函数前后引脚var的值。我设置堆来模拟本主题的主代码问题。https://www.dropbox.com/s...1gfrsyge/Temp.zip?dl=0void.(char*p,char size){.(size--){(*p)+;p+;;;}}void main(void){FSR1=0x4FE;char pins[5];pins[0]=1;pins[1]=2;pins[2]=3;pins[3]=4;pins[4]=5;PORTA=pins[0];.;}
|
|
|
|
|
|
感谢缩减示例。所以现在发生的是,代码向堆栈指针添加一个偏移量,以获得要传递给函数的两个字节的参数,但是在这个添加过程中,堆栈指针本身在按下参数的第一个字节之后递增。这通常不是问题,但如果堆栈处于堆栈指针的MSB在第一个字节被按下时增加的位置,则参数的MSB将不正确。请发送此代码示例以支持以便记录该问题,好吗?只是FYI,编译器没有实现堆。堆用于不支持的动态内存分配。编译器使用PUP POP数据栈来重入函数(或静态编译堆栈,用于不可重入函数)。杰夫。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475 浏览 0 评论
5794 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1124浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1098浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 10:49 , Processed in 0.909462 second(s), Total 86, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2054