我已经看到这个主题已经在许多其他问题中讨论过,但我无法找到适合我的具体情况的答案。
我正在使用 STM32F0 微控制器。SPI 接收/发送 FIFO 的顶部可通过存储器访问进行访问。这个特殊的微控制器允许我从 FIFO 顶部读取/写入 8 位或 16 位。更准确地说,当执行 LDRB/STRB 指令时,将 8 位从 FIFO 弹出/推送到 FIFO,而当执行 LDRH/STRH 指令时,将从 FIFO 弹出/推送 16 位。
STMicroElectronics 提供的硬件抽象层提出了这种语法来读取 SPI FIFO。
return *(volatile uint8_t*)&_handle->Instance->DR; // Pop 1 byte
return *(volatile uint16_t*)&_handle->Instance->DR; // Pop 2 byte
*(volatile uint8_t*)&_handle->Instance->DR = val; // Push 1 byte
*(volatile uint16_t*)&_handle->Instance->DR = val; // Push 2 bytes
Run Code Online (Sandbox Code Playgroud)
SPI FIFO 顶部的DR一个指针在哪里uint32_t*
我已经使用这种语法构建了我的软件,并且它工作得很好。唯一的问题是 g++ 抛出了很多关于类型双关的警告。更确切地说:
Inc/drivers/SPI.h:70:50:警告:取消引用类型双关指针将破坏严格别名规则 [-Wstrict-aliasing]
return *(volatile uint16_t*)&_handle->Instance->DR;
经过一些阅读后,看起来在 C++ 中使用 union 并不是一个好主意。无论如何我确实尝试过但遇到了一些问题。实际上,通过联合中的指针访问内存会使我的微控制器崩溃,就像未对齐的内存访问一样。
static_cast …
我正在尝试使Scrapy输出彩色日志。我对Python日志记录不是很熟悉,但是我的理解是我必须制作自己的Formatter并让Scrapy使用它。我成功制作了一个Formatter,以使用Clint对输出进行着色。
我的问题是我无法使其在Scrapy中正常工作。我本来希望我的Spider中的logger对象有一个处理程序,然后我才应该切换该处理程序的格式化程序。当我查看里面的东西时spider.logger.logger,我看到那handler是一个空列表。我试图将格式化程序添加到新的流处理程序中。
crawler.spider.logger.logger.addHandler(sh)
其中sh是使用我的颜色格式化程序的处理程序。
这增加了效果,使每条消息的草率输出两次。第一条消息是彩色的,但没有Scrapy格式。第二个具有无颜色的Scrapy格式。
如何使Scrapy输出彩色日志保持可在其中设置的相同格式 settings.py
谢谢