我正在尝试将使用 DocuSign 签名的 pdf 转换为图像格式。我们在 Convert_from_path 方法中遇到错误。代码及错误如下所示:
import pdf2image
data=pdf2image.convert_from_path('name.pdf')
PDFPageCountError: Unable to get page count.
Syntax Error: Gen inside xref table too large (bigger than INT_MAX)
Syntax Error: Couldn't find trailer dictionary
Syntax Error: Invalid XRef entry
Syntax Error: Invalid XRef entry
Syntax Error: Top-level pages object is wrong type (null)
Command Line Error: Wrong page range given: the first page (1) can not be after the last page (0).
Run Code Online (Sandbox Code Playgroud) 我终于弄明白这一点,想分享知识并节省一些时间,所以请看下面的答案.但是,我仍然需要Linux的答案,所以如果你知道,请回答,因为我的答案中的代码仅适用于Windows.
更新:我也想到了Linux,包括前Python 3.3(例如:Raspberry Pi),我在下面的答案中发布了我的新模块/代码.
我原来的问题:如何在Python中获得毫秒和微秒分辨率的时间戳?我也喜欢类似Arduino的延迟和delayMicroseconds()函数.
几个月前,这个问题被标记为这个问题的副本.看这里:
它说,"这个问题在这里已有答案." 不幸的是,这不是真的.几年前我在问这个问题之前就读过这些答案了,他们没有回答我的问题,也没有满足我的需要.它们和我的问题一样不适用,因为它是最黑的回答,因为它依赖于time模块,因为它依赖于模块,因为它不具有任何类型的保证分辨率,因此它是不可思议的错误:
请重新打开我的问题.它不是重复的.它没有其他问题的事先答案.链接已经包含答案的问题依赖于time模块,甚至表明它的解决方案已经到处都是.最热门的答案是使用16毫秒的答案引用Windows分辨率,这比我在此提供的答案(0.5 美分分辨率)差32000倍.同样,我需要1 ms和1 us(或类似)分辨率,而不是16000 us分辨率.因此,它不是重复的.
谢谢你的时间.:)
以下是STM32微控制器上的数据类型:http : //www.keil.com/support/man/docs/armcc/armcc_chr1359125009502.htm。
这些微控制器使用32位ARM核心处理器。
哪些数据类型具有自动原子读取和原子写入访问权限?
我很确定所有32位数据类型都可以(因为处理器是32位),而所有64位数据类型都不能(因为要读或写一个64位字至少需要2个处理器操作),但是bool(1个字节)和uint16_t/ int16_t(2个字节)呢?
上下文:我正在STM32上的多个线程(在FreeRTOS中称为单核,但有多个线程或称为“任务”)之间共享变量,并且需要知道是否需要通过使用中断关闭中断来强制进行原子访问互斥锁等
更新:
参考此示例代码:
volatile bool shared_bool;
volatile uint8_t shared u8;
volatile uint16_t shared_u16;
volatile uint32_t shared_u32;
volatile uint64_t shared_u64;
volatile float shared_f; // 32-bits
volatile double shared_d; // 64-bits
// Task (thread) 1
while (1)
{
// Write to the values in this thread.
// What I write to each variable will vary. Since other threads
// are reading these values, I need to …Run Code Online (Sandbox Code Playgroud) 我编写了以下结构,用于我正在制作的Arduino软件PWM库,一次PWM(在Uno上)或70个引脚(在Mega上).
如上所述,处理此结构数组的代码的ISR部分(eRCaGuy_SoftwarePWMupdate())需要133us才能运行.但是,非常奇怪的是,如果我取消注释"byte flags1"这一行 (在结构中)虽然flags1尚未在任何地方使用,但ISR现在需要158us才能运行.然后,如果我取消注释"byte flags2;" 为了使BOTH标志现在不被注释,运行时会回落到之前的状态(133us).
为什么会这样?!?我该如何解决?(即:我想确保一致的快速代码,对于这个特定的功能,而不是令人费解的变幻无常的代码).添加一个字节会大大减慢代码速度,但添加两个字节根本不会发生任何变化.
我正在尝试优化代码(我还需要添加另一个功能,需要单个字节用于标志),但我不明白为什么添加一个未使用的字节会使代码减慢25us,但添加两个未使用的字节并不会t根本改变运行时间.
我需要了解这一点,以确保我的优化始终如一.
在.h文件中(我的原始结构,使用C风格的typedef'ed结构):
typedef struct softPWMpin //global struct
{
//VOLATILE VARIBLES (WILL BE ACCESSED IN AND OUTSIDE OF ISRs)
//for pin write access:
volatile byte pinBitMask;
volatile byte* volatile p_PORT_out; //pointer to port output register; NB: the 1st "volatile" says the port itself (1 byte) is volatile, the 2nd "volatile" says the *pointer* itself (2 bytes, pointing to the port) is volatile.
//for PWM output:
volatile unsigned …Run Code Online (Sandbox Code Playgroud) 这是我的情况:git merge master导致 50 个文件存在合并冲突。我希望其中 45 个文件被接受master并完成,并且我想手动解决其余 5 个文件中的冲突。所有 45 个文件都在目录 中some/dir。其余5人分散在其他地方。如果我只想接受 master 对所有 50 个冲突的更改,我会运行以下命令:
git merge -X theirs master
# OR (same thing):
git merge --strategy-option theirs master
Run Code Online (Sandbox Code Playgroud)
但我不想那样,就像我说的。我想要更多这样的东西:
git merge -X theirs master some/dir
Run Code Online (Sandbox Code Playgroud)
这样它会自动为 中的所有冲突选择“他们的”(主人)一方some/dir,但否则让我手动修复冲突。然而,这并不存在。
所以,我的解决方法是这样的:
简短的介绍:
开始合并,在众多冲突文件中手动修复我需要的几个文件。备份我刚刚修复的所有文件。中止合并。重做合并,git merge -X theirs master以自动接受master所有文件中所有冲突的更改。手动将我的几个手动修复的文件复制回存储库,然后提交它们。
这样可以避免手动修复 50 个文件,而当只有 5 个文件真正需要我注意时,这可能会非常乏味且耗时。
完整、详细的步骤:
开始正常合并:
git merge master
Run Code Online (Sandbox Code Playgroud)
手动解决我想要执行此操作的 5 个文件中的冲突,并保存每个文件。然后,将它们复制到存储库之外的位置(或者至少在存储库忽略的文件夹中)。我现在拥有手动解决的 5 个文件的副本。这是实现此目的的一种方法:
mkdir -p …Run Code Online (Sandbox Code Playgroud)在 a 期间,我无法理解这些冲突中的us人和them是谁git revert,所以我真的不知道这里发生了什么:
git revert some_commit_hash
Run Code Online (Sandbox Code Playgroud)
然后git status显示如下冲突:
deleted by them: path/to/file1.h
both modified: path/to/file2.h
deleted by them: path/to/file1.cpp
deleted by them: path/to/test_file1.cpp
added by us: path/to/file3.h
deleted by them: path/to/file4.h
added by us: path/to/file5.h
Run Code Online (Sandbox Code Playgroud)
“我们”是谁?“他们”是谁?
更新:请注意,我正在还原的提交是一个非常大的合并提交。
不重复:
us和them:GIT:“被我们删除”冲突有多危险?mergeandrebase但 NOT revert,并且 git 经常使用相同的术语来表示相反的事情,具体取决于操作:根据 Git,谁是“我们”,谁是“他们”?这之间有区别吗(使用浮点文字后缀):
float MY_FLOAT = 3.14159265358979323846264338328f; // f suffix
double MY_DOUBLE = 3.14159265358979323846264338328; // no suffix
long double MY_LONG_DOUBLE = 3.14159265358979323846264338328L; // L suffix
Run Code Online (Sandbox Code Playgroud)
vs 这个(使用浮点转换):
float MY_FLOAT = (float)3.14159265358979323846264338328;
double MY_DOUBLE = (double)3.14159265358979323846264338328;
long double MY_LONG_DOUBLE = (long double)3.14159265358979323846264338328;
Run Code Online (Sandbox Code Playgroud)
在 C 和 C++ 中?
注意:函数调用也是如此:
void my_func(long double value);
my_func(3.14159265358979323846264338328L);
// vs
my_func((long double)3.14159265358979323846264338328);
// etc.
Run Code Online (Sandbox Code Playgroud)
我正在尝试在我的~/.bashrc文件中为 Python 指定别名。我输入此命令是为了告诉 Git Bash 在哪里可以找到 Python 可执行文件:
python --version winpty
Run Code Online (Sandbox Code Playgroud)
...从我的 [Git Bash] 中,不幸的是,我收到此错误:
MINGW64 ~
$ python --version
winpty: error: cannot start '"C:/Program Files/WindowsApps/Microsoft.DesktopAppInstaller_1.4.3161.0_x64__8wekyb3d8bbwe/AppInstallerPythonRedirector.exe" --version': Access is denied. (error 0x5)
Run Code Online (Sandbox Code Playgroud)
我应该如何从 [Git Bash] 正确运行 python?
谢谢。
从任何自动生成的STM32CubeMx生成的链接器脚本的底部:
/* Remove information from the standard libraries */
/DISCARD/ :
{
libc.a ( * )
libm.a ( * )
libgcc.a ( * )
}
Run Code Online (Sandbox Code Playgroud)
从GNU Binutils ld(链接程序脚本)手册中,3.6.7输出节丢弃:
特殊输出节名称“ / DISCARD /”可用于丢弃输入节。分配给名为“ / DISCARD /”的输出节的任何输入节均不包含在输出文件中。
这3个输入目标文件包含什么,为什么我们丢弃它们中的所有内容(所有输入部分)?
GNU ld(链接器脚本)手册第3.5.5节源代码参考有一些关于如何访问 C 源代码中的链接器脚本“变量”(实际上只是整数地址)的非常重要的信息。我用了这个信息。广泛使用链接器脚本变量,我在这里写了这个答案:How to get value of variable defined in ld linker script from C。
然而,很容易做错,并尝试访问链接描述文件变量的值(错误地)而不是它的地址,因为这有点深奥。手册(上面的链接)说:
这意味着,你不能访问 值链接脚本定义符号的-它没有价值-所有你能做的就是访问的地址链接脚本定义的符号。
因此,当您在源代码中使用链接描述文件定义的符号时,您应该始终获取该符号的地址,并且永远不要尝试使用其 value。
问题:那么,如果您确实尝试访问链接描述文件变量的value,这是“未定义的行为”吗?
想象一下在链接脚本(例如:STM32F103RBTx_FLASH.ld)中你有:
/* Specify the memory areas */
MEMORY
{
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 128K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
}
/* Some custom variables (addresses) I intend to access …Run Code Online (Sandbox Code Playgroud)