小编Gab*_*les的帖子

C++函数通过一个带有public成员指针的对象调用函数,而不使用dereference运算符

好吧,我认为标题足够描述(但令人困惑,抱歉).

我正在读这个库:Timer1.

在头文件中有一个指向函数的公共成员指针,如下所示:

class TimerOne
{
  public:
  void (*isrCallback)();
};
Run Code Online (Sandbox Code Playgroud)

存在TimerOne类的实例化对象,称为"Timer1".

Timer1调用该函数如下:

Timer1.isrCallback();
Run Code Online (Sandbox Code Playgroud)

这怎么回事?我熟悉通过使用dereference运算符通过函数指针调用函数.

例如:

(*myFunc)();
Run Code Online (Sandbox Code Playgroud)

所以我希望通过对象的上述调用更像是:

(*Timer1.isrCallback)();
Run Code Online (Sandbox Code Playgroud)

那么,通过函数指针调用函数的可接受选项是什么,作为独立的函数指针对象的成员?

c++ pointers function-pointers function

4
推荐指数
2
解决办法
772
查看次数

“弧形嫁接”和“弧形补丁”之间有什么区别?

arc help --full | less显示以下内容graft

  graft revision

      Grafts revision and its dependencies (if any) onto your working tree.

      --force
          Do not run any sanity checks.

      --skip-landed
          Do not try to patch landed/closed diffs.
Run Code Online (Sandbox Code Playgroud)

这是为了patch

  patch D12345
  patch --revision revision_id
  patch --diff diff_id
  patch --patch file
  patch --arcbundle bundlefile
      Supports: git, svn, hg
      Apply the changes in a Differential revision, patchfile, or arc
      bundle to the working copy.

      --arcbundle bundlefile
          Apply changes from an arc bundle …
Run Code Online (Sandbox Code Playgroud)

git phabricator arcanist

4
推荐指数
2
解决办法
1631
查看次数

在Python中的符号学图上使用matplotlib防止轴采用科学记数法(10的幂)

我读过这里(如何防止数字在Python matplotlib图中更改为指数形式)和这里(Matplotlib:在对数图中禁用十的幂)并尝试了他们的解决方案但无济于事。

如何将 y 轴转换为显示普通十进制数字而不是科学记数法?请注意,这是 Python 3.5.2。

在此输入图像描述

这是我的代码:

#Imports:
import matplotlib.pyplot as plt

possible_chars = 94
max_length = 8
pw_possibilities = [] 
for num_chars in range(1, max_length+1):
    pw_possibilities.append(possible_chars**num_chars)

x = range(1, max_length+1)
y = pw_possibilities 

#plot 
plt.figure()
plt.semilogy(x, y, 'o-')
plt.xlabel("num chars in password")
plt.ylabel("number of password possibilities")
plt.title("password (PW) possibilities verses # chars in PW")
plt.show()
Run Code Online (Sandbox Code Playgroud)

python plot scientific-notation matplotlib python-3.x

3
推荐指数
1
解决办法
7952
查看次数

FreeRtos 或 TI rtos 中堆栈大小的计算

最近,我正在使用 FreeRTOS 并创建了一些任务来执行我所需的操作。尽管似乎每次我使用xTaskCreate()TI GUI 配置创建新任务时,我只是尝试将堆栈大小保持为所需的大小,以免堆栈溢出。

有没有办法计算我的任务针对以下事件使用的最大堆栈大小?

  1. 全局变量和局部变量使用的堆栈
  2. 函数最大递归次数所使用的栈
  3. 包括中断上下文切换

stack rtos freertos

3
推荐指数
1
解决办法
7035
查看次数

在类中的构造函数或运算符重载(例如:复制赋值运算符)声明的末尾键入 `= default` 的目的是什么?

这个答案是什么是三的规则?有以下代码。请注意,除了第一个构造函数之外,所有构造函数= default;的末尾都有:

class person
{
    std::string name;
    int age;

public:
    person(const std::string& name, int age);        // Ctor
    person(const person &) = default;                // 1/5: Copy Ctor
    person(person &&) noexcept = default;            // 4/5: Move Ctor
    person& operator=(const person &) = default;     // 2/5: Copy Assignment
    person& operator=(person &&) noexcept = default; // 5/5: Move Assignment
    ~person() noexcept = default;                    // 3/5: Dtor
};
Run Code Online (Sandbox Code Playgroud)

虽然我以前见过很多次,但我不明白什么时候可以使用= default,或者为什么。在我看来,如果您想要defaultC++ 提供的构造函数或赋值运算符,您可以只删除该声明(以及任何相关的定义),不是吗?

明确禁止给定类型的任何其他构造函数的目的是什么?例如:也许这个

person& operator=(const person &) …
Run Code Online (Sandbox Code Playgroud)

c++ constructor default default-constructor

3
推荐指数
1
解决办法
127
查看次数

如何在 Bazel 中禁用 C/C++ `-Werror` 构建错误?(又名:如何关闭已由“-Wall -Werror”打开的特定警告)

我在构建时遇到以下错误:

...has undefined behavior [-Werror,-Wundefined-reinterpret-cast]
Run Code Online (Sandbox Code Playgroud)

Bazel 构建完全停止,因为这个clang(llvm 编译器)-Wundefined-reinterpret-cast警告被 转换为构建错误-Werror

尽管出现此构建错误,如何强制构建继续并生成二进制可执行文件?

请注意,我的 bazel 构建命令具有以下形式:

time bazel build //my/src/...
Run Code Online (Sandbox Code Playgroud)

c++ gcc build clang bazel

3
推荐指数
1
解决办法
8337
查看次数

gcc预编译器指令__attribute __((__ cleanup__))vs((清理))(vs没有下划线?)

我正在学习gcc的清理属性,并了解当变量超出范围时它如何调用函数运行,我不明白为什么你可以使用带有或不带下划线的"清理"一词.下划线的版本的文档或文档在哪里?

上面的gcc文档显示如下:

__attribute__ ((cleanup(cleanup_function)))
Run Code Online (Sandbox Code Playgroud)

但是,我读过的大多数代码示例都显示如下:

__attribute__ ((__cleanup__(cleanup_function)))
Run Code Online (Sandbox Code Playgroud)

例如:

请注意,第一个示例链接表明它们是相同的,当然编码证明了这一点,但他最初是如何知道的?这个是从哪里来的?

为什么不同?在哪里__cleanup__定义或记录,而不是cleanup

我的根本问题在于我不知道我不知道的事实,因此我试图暴露我未知的一些未知因素,以便他们成为众所周知的未知数,直到我能够研究它们并使它们成为已知的知识.

我的想法是,gcc预处理器指令可能有一些全局应用的原则,你可以在任何指令之前或之后任意添加下划线? - 或者也许只有其中一些? - 或者它可能以某种方式修改预处理程序指令或属性,并且有些情况下,一个方法(有或没有额外的下划线)优先于另一个方法?

macros c-preprocessor preprocessor-directive

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

从没有中断引脚的传感器读取数据的最佳方法,该措施需要一段时间才能准备好

我正在尝试将压力传感器(MS5803-14BA)与我的电路板(NUCLEO-STM32L073RZ)连接。

根据数据表(第3页),压力传感器需要几毫秒的时间才能准备好读取测量值。对于我的项目,我对转换原始数据大约需要10 ms的最高分辨率感兴趣。

不幸的是,该压力传感器没有任何可用于查看测量准备就绪时间的中断引脚,因此,我暂时解决了在请求新数据后延迟的问题。

我不喜欢当前的解决方案,因为在这10毫秒内,我可以让单片机工作在其他地方(我的板上还连接了其他几个传感器),但是没有任何中断引脚,我不确定这是什么。解决此问题的最佳方法。

我想到了另一个解决方案:使用计时器,该计时器每20秒触发一次,并执行以下操作:

1.a Read the current value stored in the registers (discarding the first value)
1.b Ask for a new value
Run Code Online (Sandbox Code Playgroud)

这样,在下一次迭代中,我只需要读取上一次迭代结束时请求的值即可。

我不喜欢我的测量结果总是20毫秒。直到延迟保持20毫秒,它应该还是可以的,但是如果我需要降低速率,则解决方案的读数“老化”会增加。

您对如何处理还有其他想法吗?

谢谢。

注意:如果您需要查看我当前的实现,请告诉我。

c interrupt stm32 multitasking pressure

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

如何重置 STM32 HAL UART 驱动程序 (HAL) 状态?

我知道可以使用启用 UART 接收中断

HAL_UART_Receive_IT(&huart2, (uint8_t *)rx_buffer, expectedNumberOfBytes)
Run Code Online (Sandbox Code Playgroud)
  • 但是一旦开始,如何“手动”停止它?

我们可以使用HAL_NVIC_DisableIRQ()(例如:)禁用 UART 中断HAL_NVIC_DisableIRQ(USART1_IRQn)。这将防止它抛出一个中断,但该函数的状态集HAL_UART_Receive_ITHAL_UART_STATE_BUSY_RX需要设置回HAL_UART_STATE_READY为UART手柄回到可以接受一个新的状态HAL_UART_Receive_IT()调用。

问题
如果我想在一段时间后禁用 Rx 中断,如何重置 UART 中断的状态?

堆栈溢出问题不涉及如何重置状态;我提到了这些问题:

  1. 在中断处理程序 STM32F407 中禁用中断
  2. https://electronics.stackexchange.com/questions/100073/stm32-usart-rx-interrupts

我可以使用USART_ClearITPendingBit()orUSART_ITConfig()但这些被 STM 的 HAL 库定义为私有函数。那么我应该使用它们吗?

c hardware interrupt stm32

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

C 中的哪些 print 调用不会在幕后调用 malloc() ?

我正在实施我自己的fast_malloc()来替换malloc(). 我需要在里面调试打印。是否有任何打印调用保证永远不会调用malloc(),或者我是否需要创建自己的安全版本?

以前,我不小心通过调用导致了无限递归malloc()printf()然后调用malloc(),然后调用printf()...永远。

如果我需要创建自己的安全版本,在后台使用固定大小的静态数组作为要格式化的缓冲区,这就是我需要知道的。我能做到。

puts()或者怎么样putc()?他们应该很安全,不是吗?

我使用的是 Linux Ubuntu 20.04。理想情况下,我所做的一切都将是跨平台兼容的,但我想如果需要低级系统调用,我可以自定义。


有关的:

  1. 相关,但不重复,因为它特定于snprintf()调用 malloc 的 snprintf 或不调用 malloc 的 snprintf
  2. fprintf 在幕后使用 malloc() 吗?

c printing printf

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