小编And*_*eKR的帖子

为什么uint16_t在这里有所作为?

volatile uint16_t r;
unsigned char poly = 0x07;
unsigned char c = 0;

r = (c << 8) ^ poly;
Run Code Online (Sandbox Code Playgroud)

当在Linux上用gcc编译代码时,r7.
当Microchip C18编译相同的代码时,r0.
为什么?

如果我将其更改为:

volatile uint16_t r;
uint16_t poly = 0x07;
uint16_t c = 0;

r = (c << 8) ^ poly;
Run Code Online (Sandbox Code Playgroud)

r也变成7了C18.

C18手册中有关于整数提升的部分,但我认为这与我的问题无关.无论如何,这里是:

ISO要求所有算术都以int精度或更高精度执行.默认情况下,MPLAB C18将以最大操作数的大小执行算术运算,即使两个操作数都小于int.可以通过-Oi命令行选项来设置ISO强制行为.

c microcontroller integer pic

13
推荐指数
1
解决办法
1309
查看次数

PHP舍入到整数

我想舍入一个数字,我需要一个正确的整数,因为我想将它用作数组键.想到的第一个"解决方案"是:

$key = (int)round($number)
Run Code Online (Sandbox Code Playgroud)

但是,我不确定这是否会一直有效.据我所知(int)只是截断任何小数,因为round($number)返回一个理论上有限精度的浮点数,是否有可能round($number)返回类似7.999999 ...然后$key是7而不是8?

如果这个问题确实存在(我不知道如何测试它),它怎么能解决?也许:

$key = (int)(round($number) + 0.0000000000000000001) // number of zeros chosen arbitrarily
Run Code Online (Sandbox Code Playgroud)

有没有比这更好的解决方案?

php floating-point integer rounding

12
推荐指数
2
解决办法
1万
查看次数

在Microchip C18中,为什么插入NOP会导致更大的代码?

我在ISR中有一些代码.代码是为了完整性而给出的,问题只是关于注释掉的__asm_块.

如果没有__asm_块,则会将其编译为82条指令.使用__asm_块,结果是107条指令.为什么差别很大?

这是C代码:

if (PIR1bits.SSPIF)
{
    spi_rec_buffer.read_cursor = 0;
    spi_rec_buffer.write_cursor = 0;

    LATAbits.LATA4 ^= 1;
//      _asm nop nop _endasm
    LATAbits.LATA4 ^= 1;

    while (!PORTAbits.NOT_SS && spi_rec_buffer.write_cursor < spi_rec_buffer.size)
    {
        spi_rec_buffer.data[spi_rec_buffer.write_cursor] = SSPBUF;
        SSPBUF = spi_out_msg_buffer.data[spi_out_msg_buffer.read_cursor];
        PIR1bits.SSPIF = 0;
        spi_rec_buffer.write_cursor++;
        spi_out_msg_buffer.read_cursor++;
        if (spi_out_msg_buffer.read_cursor == spi_out_msg_buffer.write_cursor)
            LATAbits.LATA4 = 0;
        LATBbits.LATB1 = 1;
        while (!PORTAbits.NOT_SS && !PIR1bits.SSPIF);
        LATBbits.LATB1 = 0;
    }

    spi_message_locked = true;
    spi_message_received = true;

}
Run Code Online (Sandbox Code Playgroud)

没有NOP:

BTFSS     0x9e,0x3,0x0      if (PIR1bits.SSPIF)
BRA       0x2ba
                            {
MOVLB     0xf                   spi_rec_buffer.read_cursor = 0;
CLRF …
Run Code Online (Sandbox Code Playgroud)

c microcontroller pic pic18

11
推荐指数
1
解决办法
2388
查看次数

git子树和git filter-banch之间的区别

这两个命令有什么区别吗?

git subtree split --prefix=some_subdir -b some_branch
Run Code Online (Sandbox Code Playgroud)

git filter-branch --subdirectory-filter some_subdir some_branch
Run Code Online (Sandbox Code Playgroud)

我想使用git filter-branch而不是git subtree因为我也想删除新分支中的一些文件,但我担心这种保证,对于以下情况git subtree可能无效git filter-branch:

完全相同历史的重复拆分保证是相同的(即产生相同的提交ID).因此,如果您添加新提交然后重新拆分,新提交将作为提交附加在您上次生成的历史记录之上,因此'git merge'和朋友将按预期工作.

git

10
推荐指数
1
解决办法
1092
查看次数

Cookie值是否应为URL编码?

设置cookie时,PHP 会对cookie值进行url编码(至少在不使用时setrawcookie),并在将cookie值提供给应用程序之前对其进行url解码$_COOKIE.

这是一个公认的标准吗?如果我设置了原始cookie值a%3Db,我会回复a=b大多数Web编程语言(通过各自的cookie读取机制)吗?

cookies interop http

10
推荐指数
2
解决办法
6081
查看次数

我可以在Microchip C18中创建一个接受ram和rom指针的函数吗?

当我声明一个接受的函数const char*并且我传递一个字符串文字时,我得到一个

警告:[2066]类型限定符在分配中不匹配

因为字符串文字是rom const char*.反过来也是这样.

尽管PIC是哈佛架构,但内存被映射到一个连续的地址空间,因此理论上应该可以以相同的方式支持ram和rom指针.可能我必须使用rom指针,因为它们是24位而ram指针是16位.

但是,只是将a转换const char*为a const rom char*不起作用.

c microcontroller pointers pic

9
推荐指数
1
解决办法
2748
查看次数

git diff与交错线

我想要一个带有交错线的差异,即"帅哥"不超过一行.

例如,而不是

-t1 = "Christmas 2013"
-t2 = "Easter 2013"
-t3 = "Thanksgiving 2013"
+t1 = "Christmas 2014"
+t2 = "Easter 2014"
+t3 = "Thanksgiving 2014"
Run Code Online (Sandbox Code Playgroud)

我要这个:

-t1 = "Christmas 2013"
+t1 = "Christmas 2014"
-t2 = "Easter 2013"
+t2 = "Easter 2014"
-t3 = "Thanksgiving 2013"
+t3 = "Thanksgiving 2014"
Run Code Online (Sandbox Code Playgroud)

到目前为止我有

git diff -U0 --ignore-space-at-eol before after holidays.ini
Run Code Online (Sandbox Code Playgroud)

我尝试过设置--break-rewrites=0%/0%,--break-rewrites=100%/0%等等,但它没有改变任何东西(我甚至不知道它是否与我的问题相关).

git diff git-diff

9
推荐指数
1
解决办法
421
查看次数

严格模式是否禁止语句级函数声明?

"use strict";

if (true) {
  function foo() {
  }
}
Run Code Online (Sandbox Code Playgroud)

在PhpStorm中,此代码显示错误:

禁止在程序或功能的顶级功能声明

但是,Chrome很乐意执行它,即使在调试器中也没有任何控制台输出.

现在禁止或不禁止?

javascript strict

9
推荐指数
1
解决办法
4330
查看次数

包裹声明的目的是什么?

每个Go文件都以package <something>.

据我所知 - 这可能是我缺少一些信息的地方 - 只有两个可能的值<something>:它所在的目录名称*,或main.如果是main,该目录中的所有其他文件也只能有main.如果是其他内容,则项目不一致/违反惯例.

现在,如果它是目录的名称,则它是多余的,因为相同的信息就是在目录的名称中.

如果是main,那就没用了,因为据我所知go build,没有办法告诉"请建立所有 main包裹".

*换句话说,一个目录是一个包.

go

9
推荐指数
2
解决办法
1450
查看次数

使用ES6`import`语法时"无法解析符号"

这里给出一个示例,说明如何从模块导入某些类:

import {ModalContainer, ModalDialog} from 'react-modal-dialog';
Run Code Online (Sandbox Code Playgroud)

但是,PhpStorm(最新的EAP)给了我一个错误:

无法解析符号'ModalDialog'

我安装了包,npm install react-modal-dialog它存在于node_modules.

等效var {ModalContainer, ModalDialog} = require('react-modal-dialog');工作正常.

javascript commonjs phpstorm webstorm ecmascript-6

8
推荐指数
2
解决办法
8953
查看次数