Tag: 微处理器

记忆围栏如何工作?

我需要了解多核机器中的内存栅栏。 说我有这个代码 核心1 mov [_x], 1; mov r1, [_y] 核心2 mov [_y], 1; mov r2, [_x] 现在没有内存栅栏的意外结果是r1和r2在执行后都可以为0。 在我看来,为了解决这个问题,我们应该在两个代码中都放置内存栅栏,因为仅将它放在一个代码中仍然无法解决问题。 如下…… 核心1 mov [_x], 1; memory_fence; mov r1, [_y] 核心2 mov [_y], 1; memory_fence; mov r2, [_x] 我的理解是正确还是我仍然缺少某些东西? 假设架构是x86。 另外,有人能告诉我如何将内存栅栏放入C ++代码中吗?

如何通过微处理器/微控制器同时检测两个或多个按键(GPIO)?

正如问题所述,我想知道控制器是否可以同时检测到两个按钮按下。 我是控制器编程的新手,从基础开始 – 闪烁LED,然后移动到按钮,现在尝试按下按钮。 当两个按钮被按在一起时,我想设置一些标志 。 但据我所知,在这种情况下只会调用一个ISR,从而检测到一次按下。 我们怎样才能做到这一点…… (在某些电子设备中,当我们按下某些按钮时它具有特定的function,例如当同时按下3个适当的按钮时重置电话) 梅西

使C源代码中的大常量更具可读性?

我正在研究微处理器的一些代码。 它有一些大的关键常数。 #define F_CPU 16000000UL 在这种情况下,这是CPU频率。 在赫兹。 事实上,如果没有在数字上手动标记光标,则很难判断它是1,600,000,160,000,000还是16,000,000。 如果我将逗号放在#define F_CPU 16,000,000UL的数字中,它会截断常量。 我使用了一些具有特定数字分隔符的深奥语言,旨在使大数字更具可读性(ex 16_000_000 ,主要是用于MCU的语言)。 大型“神奇数字”在嵌入式内容中相当普遍,因为它们需要描述MCU如何与现实世界对话。 在C中有这样的东西吗?

是否可以将整个数组保存在cpu寄存器中

在下面的代码中, int main( ) { register int arr[4]; /* … */ } 是否有可能在某些cpu寄存器中分配’arr’。 (考虑cpu有4个或更多寄存器)。 或者编译器会忽略数组的寄存器存储类。

CPU TSC提取操作,尤其是在多核多处理器环境中

在Linux世界中,要获得纳秒精度定时器/时钟提示,可以使用: #include int foo() { timespec ts; clock_gettime(CLOCK_REALTIME, &ts); //–snip– } 这个答案提出了一种使用RDTSC指令直接查询cpu时钟的asm方法。 在多核,多处理器架构中,如何在多个内核/处理器之间同步此时钟滴答/定时器值? 我的理解是,在固有的围栏中完成了。 这种理解是否正确? 你能否提出一些可以详细解释这个问题的文件? 我对Intel Nehalem和Sandy Bridge微体系结构感兴趣。 编辑 将进程限制为单个核心或cpu不是一种选择,因为该进程非常庞大(就消耗的资源而言)并且希望最佳地利用包含所有核心和处理器的机器中的所有资源。 编辑 感谢您确认TSC在核心和处理器之间同步。 但我最初的问题是这种同步是如何完成的? 它是否带有某种围栏? 你知道任何公共文件吗? 结论 感谢所有输入:以下是此讨论的结论:TSC在初始化时使用在多处理器/多核系统中的核心和处理器之间发生的RESET进行同步。 之后,每个Core都是独立的。 TSC保持不变,具有锁相环,可以规范频率变化,从而规范给定内核中的时钟变化,这就是TSC在内核和处理器之间保持同步的方式。