完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
代码是非常简单的。首先乘法器被确定为0, 1, 2,或者3。在我的例子中,乘法器等于1,这意味着乘以10。不管怎样,在它的值乘以10之后,它就无缘无故地跳进另一个if语句。屏幕截图应该有助于理解我的意思。我不明白发生了什么。函数的顶部看起来是这样的:静态无符号长int Tunl;静态无符号短int乘法器;空隙转换电流(无符号短It*value){基本上当我调试时,在从Tunl=10 *Tunl行返回之后,它跳转DUNTL。y到Tunl=1000*Tunl线,但是乘法器变量保持不变,等于1。在这里我完全失去了,我使用PIC16F15325。
以上来自于百度翻译 以下为原文 the code is pretty simple. first a multiplier is determined to be 0, 1, 2, or 3. In my case the multiplier is equal to 1 which means to multiply by 10. Well regardless, after it multiplies the value by 10, it then jumps into another if statement for no reason at all. the screenshot should help to understand what i mean. i don't understand what's going on. the top part of the function looks like this: static unsigned long int templ; static unsigned short int multiplier; void convert_current(unsigned short int* value) { basically when i'm debugging, after it returns from the templ = 10 * templ line, then it jumps directly to the templ = 1000 * templ line, however the multiplier variable remains unchanged, equal to 1. i'm at a total loss here, i'm using pic16f15325 Attached Image(s) |
|
相关推荐
5个回答
|
|
BTW.一旦我内联了函数,它开始正常工作,除了浪费一些空间。我不知道发生了什么。这里是整个函数。
以上来自于百度翻译 以下为原文 btw. once i inlined the function it started working normally, except wasting some space. i have no clue what's going on. here is the whole function static unsigned long int templ; inline void convert_current(unsigned short int* value) { if (*value == 0xffff) { //reading not available *value = 0x01ff; return; } templ = *value & 0x3fff; switch(*value >> 14) { case 1: templ *= 10; // <--- executes here correctly break; case 2: templ *= 100; break; case 3: templ *= 1000; // <---- then jumps here break; } if (templ <= 5200) { //0 to 5.2 A range templ /= 50; } else if (templ <= 21000) { //5.4 to 21 A range templ -= 5200; templ /= 200; templ += 104; } else { templ /= 1000; //convert to amps if (templ <= 345) { //22 to 345 A range templ -= 21; templ += 183; } else { templ = 508; //indicate greater than 345A } if (templ > 508) { //produce error *value = 0x01ff; } else { *value = templ & 0x01ff; } } } //convert_current |
|
|
|
向优化器打招呼。它的任务是使小的快速代码按照C代码和规则执行。这意味着它不能正确地调试。问题是代码是否在最后给出正确的结果。
以上来自于百度翻译 以下为原文 Say hello to the Optimizer. Its job is to make small fast code the executes per the C Code and rules. The Means it may not debug correctly. The Question is does the code give the correct results at the end. |
|
|
|
屏幕上的代码与您发布的代码不同。通过“跳到这里”,你的意思是它执行乘法1000,或者只是调试器停在这行?如果它不仅仅是(可能是错误的)调试器行为,并且发生了乘法,那么你需要发布反汇编列表并把它报告给Microchip。如果只是调试器,那么我不会担心太多。
以上来自于百度翻译 以下为原文 The code on the screen differs from the code that you posted. By "jump here", do you mean that it executes multiplication by 1000, or just that the debugger stops at this line? If it's not just the (possibly faulty) debugger behaviour, and multiplication does take place, then you need to post the disassembly listing and also report this to Microchip. If it's just the debugger, then I wouldn't worry too much. |
|
|
|
我发现我的函数的另一个问题可能导致了这个行为。在底部,我把值赋值:*value = Tunl和0x01FF;我错误地把它放在另一个if子句中,所以在很多情况下,函数实际上不会返回任何数据。也许这就是编译器做了一些奇怪的跳跃的原因,因为它认为这并不重要,这种方式节省了最大的空间。
以上来自于百度翻译 以下为原文 well, i found another issue with my function that may have led to this behavior. at the bottom where i assign the value back: *value = templ & 0x01ff; i mistakenly had that inside another if clause, so in many cases the function would not actually return any data. perhaps this is the reason why the compiler made some weird jumps because it figured it didn't matter and this way saved the most space. |
|
|
|
是的,如果编译器确定代码不重要或者可以简化,它可以做到这一点。
以上来自于百度翻译 以下为原文 Yes if the Compiler determines the Code does not matter or can be simplified, it can do that. |
|
|
|
只有小组成员才能发言,加入小组>>
5088 浏览 9 评论
1958 浏览 8 评论
1893 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3123 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2192 浏览 5 评论
641浏览 1评论
525浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
384浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
546浏览 0评论
451浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-6 05:02 , Processed in 1.119986 second(s), Total 86, Slave 70 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号