使用ESP-IDF(ESP32 SDK)的ESP32应用程序与同一SPI总线上的两个SPI从站通信(ILI9341 TFT驱动程序,NRF24L01 + RF收发器).总的来说,它很棒.但是,从RF收发器接收的一些数据被截断,即只有前几个字节是正确的,其余的是垃圾.
问题或多或少是可重现的,并且只有在接收截断数据之前立即与其他从设备(TFT驱动器)进行SPI通信时才会出现问题.
有问题的SPI事务是一个全双工事务,它在接收10个字节时发送一个命令字节和10个哑字节.它使用VSPI总线和DMA通道1.如果出现问题,只有前几个字节是正确的,而最后2到6个字节是无效的(0或虚拟字节的值).
我挖掘了SDK代码(spi_master.c),添加了调试代码,并在DMA的lldesc_t结构中观察到了一个令人惊讶的值:
在事务开始时,它用length = 0x0c和初始化size = 0x0c.0x0c是12个字节,即10个字节四舍五入到下一个字.
在交易结束时,值为length = 0x07和size = 0x0c(长度可能略有不同).因此,事务只读取7个字节,然后以某种方式终止.或者更确切地说DMA操作终止.
代码非常简单:
uint8_t* buffer = heap_caps_malloc(32, MALLOC_CAP_DMA);
...
memset(buffer, CMD_NOP, len);
spi_transaction_t trx;
memset(&trx, 0, sizeof(spi_transaction_t));
trx.cmd = 0x61;
trx.tx_buffer = buffer;
trx.length = 8 * 10;
trx.rx_buffer = buffer;
trx.rxlength = 8 * 10;
esp_err_t ret = spi_device_transmit(spi_device, &trx);
Run Code Online (Sandbox Code Playgroud) 我正在使用QR-Bill 库 v2.5.3。作为其依赖项之一,它使用 range 指定 PDFBox [2.0.0,3.0):
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>[2.0.0,3.0)</version>
<scope>runtime</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
对于 Gradle 项目,依赖关系解析为pdfbox-2.0.24. 对于 Maven 项目,它解析为pdfbox-3.0.0-RC1.
Maven 和 Gradle 对待版本范围的方式真的不同吗?库的正确范围是多少,以便 Gradle 和 Maven 都使用 PDFBox 的最新 2.x 版本,但不使用 3.x 版本(因为它不兼容)?
进一步的调试细节:
Maven项目
https://github.com/manuelbl/SwissQRBill/tree/master/examples/maven_example
% mvn dependency:tree
[INFO] net.codecrete.qrbill:maven-example:jar:1.0-SNAPSHOT
[INFO] \- net.codecrete.qrbill:qrbill-generator:jar:2.5.3:compile
[INFO] +- io.nayuki:qrcodegen:jar:1.7.0:runtime (version selected from constraint [1.6.0,2.0))
[INFO] \- org.apache.pdfbox:pdfbox:jar:3.0.0-RC1:runtime (version selected from constraint [2.0.0,3.0))
[INFO] +- org.apache.pdfbox:fontbox:jar:3.0.0-RC1:runtime
[INFO] \- commons-logging:commons-logging:jar:1.2:runtime
Run Code Online (Sandbox Code Playgroud)
摇篮项目
https://github.com/manuelbl/SwissQRBill/tree/master/examples/gradle_example
% gradle dependencies --configuration runtimeClasspath …Run Code Online (Sandbox Code Playgroud) #include <stdio.h>
register int i = 10;
int main(void)
{
printf( " i = %d \n ", i );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这里,我将变量i声明为寄存器.但是,在编译时显示以下错误
" error: register name not specified for ‘i’ "
Run Code Online (Sandbox Code Playgroud)
为什么我们不应该在全局使用register关键字?
我在Dao类中有一个返回的方法List<Object[]>,我使用的是命名查询
public List<Object[]> getListByCustomer(Session session, int customerId, List<Integer> strIds) {
Query namedQuery = session.createSQLQuery(QueryConstants.EXPORT);
namedQuery.setParameter("customer", customerId);
namedQuery.setParameter("stringId", strIds);
List<Object[]> objects = namedQuery.list();
return objects;
}
Run Code Online (Sandbox Code Playgroud)
我想将List<Integer> strIdsstringId 传递给命名查询,如下所示:
public class QueryConstants {
public static final String EXPORT =
"SELECT sv.NAME, sv.TYPE, sv.CLIENT_ADDRESS, sv.NAME_REDUNDANT, sv.DEPARTURE_DATE, s1.CODE,sv.STATE, sv.CODE "
+ "FROM VIEW sv, PROCESS p1, SET s1 "
+ "WHERE sv.R_ID = p1.R_ID and p1.ISSUER_ID = s1.USER_ID and sv.CUSTOMER_ID = :customer and sv.R_ID IN (:stringId)";
}
Run Code Online (Sandbox Code Playgroud)
但我明白了 ORA-00932: …
我正在尝试测试 Java 21 的外部函数和内存功能。这是我的代码:
\npublic static void main(String[] args) {\n // 1. Find foreign function on the C library path\n Linker linker = Linker.nativeLinker();\n SymbolLookup stdlib = linker.defaultLookup();\n MethodHandle radixsort = linker.downcallHandle(stdlib.find("radixsort").orElseThrow(), FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_INT, ValueLayout.ADDRESS, ValueLayout.JAVA_CHAR));\n // 2. Allocate on-heap memory to store four strings\n String[] javaStrings = {"mouse", "cat", "dog", "car"};\n\n // 3. Use try-with-resources to manage the lifetime of off-heap memory\n try (Arena offHeap = Arena.ofConfined()) {\n // 4. Allocate a region of off-heap memory to store …Run Code Online (Sandbox Code Playgroud) 嘿伙计们,这里的初学者问题.
如何在C中读取12或13位数的长整数(如书的ISBN号)?我想从带有书籍信息(ISBN /名称/作者)的文本文件中读取数字.
文本文件的内容如下:
0393312836
发条橙
安东尼伯吉斯
0199536759
米德尔马契
布雷特伊斯顿埃利斯
...
...
...
我正在使用此代码:
int main(void){
FILE *f;
char name[MAX], writer[MAX], line[MAX];
long isbn;
f=fopen("path.txt","r");
if(f == NULL){
return 0;
}
while (fgets(line, 1024, f) != NULL){
sscanf(line,"%ld", &isbn);
printf("ISBN: %ld\n",isbn);
fgets(nome, 1024, f);
printf("NAME: %s",name);
fgets(line, 1024, f);
printf("WRITER: %s",writer);
}
fclose(f);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
他能够阅读书籍和作者的姓名,但如果他们有9位数或更少的数字,他只会阅读这些数字.我需要做些什么来完成这项工作?
提前致谢.
如何在pl/sql块中使用"START SCRIPT"?
我想用这样的东西
declare
begin
proc(para1,para2);
execute immediate 'start prompt1' ;
end;
/
Run Code Online (Sandbox Code Playgroud)
另外我想知道,我可以从prompt1获取一个值到我调用脚本的PL/SQL块吗?因为我需要使用该值在PL/SQL块中执行某些操作.
我写过图像处理代码,将像素数据复制成整数数组,如下所示:
void processImage(BufferedImage source) {
WritableRaster raster = source.getRaster();
int numBands = raster.getNumBands();
int height = raster.getHeight();
int width = raster.getWidth();
int[] pixelRow = new int[width * numBands];
for (int i = 0; i < height; i++) {
raster.getPixels(raster.getMinX(), raster.getMinY() + i, width, 1, pixelRow);
// do some processing
}
// create a new image
return newImage;
}
Run Code Online (Sandbox Code Playgroud)
该代码适用于我迄今为止测试过的图像.所述pixelRow阵列似乎总是接收的顺序的红,绿和蓝为与3个频带的图像(没有alpha通道)和像素分量的顺序红,绿,蓝和Alpha对于那些4个频带(alpha通道).
但是,我找不到任何说明这一点的说明.是否保证我将始终按顺序获取像素组件?有没有描述这个的规范?
我有以下代码:
string result = "";
for(int i=2; i<=excelRange.Rows.Count; i++)
{
result += excelRange.Cells[i, 2].Value2;
}
Run Code Online (Sandbox Code Playgroud)
对于包含数百个条目的 Excel 文件,这需要 5 秒钟。也许有更有效的方法吗?我只想要从 B2 到 Bn 的值。
在我的Phone 7应用程序中,我使用了一个数据透视控件.现在我想改变其标题和标题区域的背景.我怎样才能做到这一点?
是否有可以自定义的枢轴控件的整体模板?
我已经尝试将包含pivot控件的网格背景设置为标题颜色,然后将每个pivot项的背景设置为原始背景颜色.一见钟情看起来不错.但是当您向左擦拭枢轴项目以显示第二个项目时,在两个枢轴项目之间会出现标题颜色的区域.所以这种方法不起作用.
此外,我试图自定义标题和标题项的模板.但这些模板仅涵盖文本本身的区域,而不是整个标题和模板区域.