volatile uint16_t r;
unsigned char poly = 0x07;
unsigned char c = 0;
r = (c << 8) ^ poly;
Run Code Online (Sandbox Code Playgroud)
当在Linux上用gcc编译代码时,r是7.
当Microchip C18编译相同的代码时,r是0.
为什么?
如果我将其更改为:
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强制行为.
我想舍入一个数字,我需要一个正确的整数,因为我想将它用作数组键.想到的第一个"解决方案"是:
$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)
有没有比这更好的解决方案?
我在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) 这两个命令有什么区别吗?
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'和朋友将按预期工作.
设置cookie时,PHP 会对cookie值进行url编码(至少在不使用时setrawcookie),并在将cookie值提供给应用程序之前对其进行url解码$_COOKIE.
这是一个公认的标准吗?如果我设置了原始cookie值a%3Db,我会回复a=b大多数Web编程语言(通过各自的cookie读取机制)吗?
当我声明一个接受的函数const char*并且我传递一个字符串文字时,我得到一个
警告:[2066]类型限定符在分配中不匹配
因为字符串文字是rom const char*.反过来也是这样.
尽管PIC是哈佛架构,但内存被映射到一个连续的地址空间,因此理论上应该可以以相同的方式支持ram和rom指针.可能我必须使用rom指针,因为它们是24位而ram指针是16位.
但是,只是将a转换const char*为a const rom char*不起作用.
我想要一个带有交错线的差异,即"帅哥"不超过一行.
例如,而不是
-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%等等,但它没有改变任何东西(我甚至不知道它是否与我的问题相关).
"use strict";
if (true) {
function foo() {
}
}
Run Code Online (Sandbox Code Playgroud)
在PhpStorm中,此代码显示错误:
禁止在程序或功能的顶级功能声明
但是,Chrome很乐意执行它,即使在调试器中也没有任何控制台输出.
现在禁止或不禁止?
每个Go文件都以package <something>.
据我所知 - 这可能是我缺少一些信息的地方 - 只有两个可能的值<something>:它所在的目录名称*,或main.如果是main,该目录中的所有其他文件也只能有main.如果是其他内容,则项目不一致/违反惯例.
现在,如果它是目录的名称,则它是多余的,因为相同的信息就是在目录的名称中.
如果是main,那就没用了,因为据我所知go build,没有办法告诉"请建立所有 main包裹".
*换句话说,一个目录是一个包.
这里给出一个示例,说明如何从模块导入某些类:
import {ModalContainer, ModalDialog} from 'react-modal-dialog';
Run Code Online (Sandbox Code Playgroud)
但是,PhpStorm(最新的EAP)给了我一个错误:
我安装了包,npm install react-modal-dialog它存在于node_modules.
等效var {ModalContainer, ModalDialog} = require('react-modal-dialog');工作正常.