小编old*_*mer的帖子

计算结果和多路复用

在这里使用伪代码.这些风格是否有利有弊:

假设你有一个可以添加的alu,和,或者和xor.它是最好有一个计算可能的答案所有的时间,然后选择基于操作码的答案代码(在这种情况下,一个热):

alu_add = a + b;
alu_and = a & b;
alu_or  = a | b;
alu_xor = a ^ b;

...

if(opcode[0])      alu_out = alu_add;
else if(opcode[1]) alu_out = alu_and;
else if(opcode[2]) alu_out = alu_or;
else if(opcode[3]) alu_out = alu_xor;
Run Code Online (Sandbox Code Playgroud)

另一种方法是像这样编码:

if(opcode[0])      alu_out = a + b;
else if(opcode[1]) alu_out = a & b;
else if(opcode[2]) alu_out = a | b;
else if(opcode[3]) alu_out = a ^ b;
Run Code Online (Sandbox Code Playgroud)

我也看到它:

alu_add = a + b;
alu_and = a & …
Run Code Online (Sandbox Code Playgroud)

optimization verilog vhdl

4
推荐指数
1
解决办法
303
查看次数

UART代码端口后的TI MSP430中断问题

我将MSP430F2013处理器用于没有UART的应用程序.我需要一个UART,因此我使用TI的示例代码"msp430x20x3_ta_uart2400.c"来模拟使用定时器模块.这一切都运行良好(使用IAR Embedded Workbench编译),使用PuTTY测试它以将字符传输到开发板,并使用环回将它们回显到终端.

这是一个降低风险的练习,现在我已将该代码移植到我的应用程序的状态机中.完成此操作后,我遇到了有关定时器中断和低功耗睡眠模式的问题.这是我进入低功耗(睡眠)模式的代码片段:

// Prepare the UART to receive one byte.
prepare_receiver();

// Enter low power mode 1.
__bis_SR_register(LPM1_bits + GIE);

// Check whether the full message has been received.
if(true == get_message_complete())
{
    process_event(e_euart_message_received, NULL);
}
Run Code Online (Sandbox Code Playgroud)

我在调试器(C-Spy)上看到的是,有时它会bis_SR_register()在第一个条目上执行该行,然后转到if语句,即忽略我要求它进入睡眠状态的事实.在其他情况下,当它确实进入睡眠状态时,ISR会正确触发并最终将我带回if语句以继续执行程序(正如我所料).但是,如果我尝试跳到下一个语句,应用程序会冻结第一行,即我无法前进.

我想不出任何功能上与我正在做的TI示例有什么不同,所以我认为我的问题必须与我如何移植它有关.例如,我的Timer ISR和我在这里发布的代码是在不同的编译单元 - 这种决定会对事情有什么影响吗?我知道我的问题可能有点模糊,但不幸的是我无法发布我的所有代码,所以相反,我正在寻找有MSP经验的人,他可能会提出一些建议,或者一些潜在的陷阱,我可能已陷入其中.

embedded debugging interrupt msp430 iar

4
推荐指数
1
解决办法
3104
查看次数

可以将所有程序转换为汇编吗?

假设我们有一个exe,可以很容易地转换为汇编吗?软件作者有没有办法阻止/阻止这种情况?

assembly disassembly

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

arm-none-eabi-gcc C指针

所以在arm-none-eabi-gcc中使用C语言.我一直有指针问题,它们似乎不存在.也许我将错误的cmds传递给编译器.

这是一个例子.

    unsigned int * gpuPointer = GetGPU_Pointer(framebufferAddress);
    unsigned int color = 16;
    int y = 768;
    int x = 1024;

    while(y >= 0)
    {
        while(x >= 0)
        {
            *gpuPointer = color;
            color = color + 2;
            x--;
        }

        color++;
        y--;
        x = 1024;
    }
Run Code Online (Sandbox Code Playgroud)

以及反汇编程序的输出.

81c8:   ebffffc3    bl  80dc <GetGPU_Pointer>
81cc:   e3a0c010    mov ip, #16 ; 0x10
81d0:   e28c3b02    add r3, ip, #2048   ; 0x800
81d4:   e2833002    add r3, r3, #2  ; 0x2
81d8:   e1a03803    lsl r3, r3, #16 …
Run Code Online (Sandbox Code Playgroud)

c assembly gcc arm disassembly

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

汇编中的eax ebx ecx有什么区别

我正在尝试学习一些汇编,但我很难理解一些基本的东西是做什么的。eax ebx ecx 只是变量还是除了存储值之外它们都有独特的特定用途?

x86 assembly

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

ARM AKS 必须定义至少一个系统池

我正在使用 ARM 脚本创建 AKS 集群。目标是从 0 开始创建具有所有所需配置 VN、NGS 和 AgentPool 的集群。这是我的 ManagedCluster ARM 模板:

  {
            "apiVersion": "2020-03-01",
            "name": "[parameters('clusterName')]",
            "type": "Microsoft.ContainerService/managedClusters",
            "location": "[parameters('templateSettings').location]",
            "properties": {
                "kubernetesVersion": "[parameters('kubernetesVersion')]",
                "enableRBAC": true,
                "dnsPrefix": "[parameters('dnsPrefix')]",
                "agentPoolProfiles": [
                    {
                        "name": "nodepool",
                        "count": "[parameters('agentCount')]",
                        "vmSize": "[parameters('agentVMSize')]",
                        "osDiskSizeGB": "[parameters('osDiskSizeGB')]",
                        "vnetSubnetID": "[parameters('vnetSubnetID')]",
                        "maxPods": 110,
                        "minCount": 1,
                        "maxCount": 100,
                        "enableAutoScaling": true,
                        "type": "VirtualMachineScaleSets",
                        "storageProfile": "ManagedDisks"
                    }
                ],
                "servicePrincipalProfile": {
                    "ClientId": "[parameters('servicePrincipalClientId')]",
                    "Secret": "[parameters('servicePrincipalClientSecret')]"
                },
                "networkProfile": {
                    "loadBalancerSku": "standard",
                    "networkPlugin": "kubenet"
                },
                "addonProfiles": {
                    "httpApplicationRouting": {
                        "enabled": true
                    },
                    "omsagent": …
Run Code Online (Sandbox Code Playgroud)

azure azure-resource-manager

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

汇编指令如何区分寄存器,存储器地址,立即值或偏移参数?

我一直想知道,是否有一些看不见的操作码或标志或任何告诉汇编指令如何处理其参数的东西?有点困惑,因为显然相同的指令可以使用不同类型的操作数操作 - 支持寄存器,存储器地址,偏移和立即值.

在汇编程序的"文本表示"中似乎没有任何额外的细节,但是二进制可能存在差异,例如,一些位被切换以便CPU知道使用哪种类型的操作数?

parameters x86 assembly instruction-set decoding

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

你怎么能从寄存器中提取一个值?

我试图弄清楚如何从ASM指令中提取寄存器值并将其转换为C++中的变量.

例如:MOV DWORD PTR DS:[ESI],EDI

(假设EDI值为int)int value = EDI;

c++ x86 assembly

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

如何减少阶乘循环的执行时间和周期数?和/或代码大小?

基本上,我很难使执行时间比实际时间要短,并且要减少时钟周期和内存大小。有谁知道我该怎么做吗?代码工作正常,我只想稍作更改。

编写了有效的代码,但不想弄乱代码,但也不知道要进行哪些更改。

; Calculation of a factorial value using a simple loop

; set up the exception addresses
THUMB
AREA RESET, CODE, READONLY
EXPORT  __Vectors
EXPORT Reset_Handler
__Vectors 
DCD 0x00180000     ; top of the stack 
DCD Reset_Handler  ; reset vector - where the program starts

AREA 2a_Code, CODE, READONLY
Reset_Handler
ENTRY
start   
MOV r1,#0    ; count the number of multiplications performed 
MOV r2,#3    ; the final value in the factorial calculation
MOV r3,#1    ; the factorial result will be stored …
Run Code Online (Sandbox Code Playgroud)

assembly arm cortex-m3 execution-time micro-optimization

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

无法在裸机 kubernetes 集群上获取外部 IP

我正在尝试建立一个裸机 Kubernetes 集群。我已经设置了基本的集群,没问题,但我似乎无法让 MetalLB 正常工作以向服务公开外部 IP。

我的最终目标是能够部署具有 2 个以上副本的应用程序,并拥有一个我可以引用的单个 IP/端口,以便访问任何正在运行的实例。

到目前为止,我所做的(为了测试这一点)是:

kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.7.3/manifests/metallb.yaml
kubectl apply -f metallb-layer-2.yml
kubectl run nginx --image=nginx --port=80
kubectl expose deployment nginx --type=LoadBalancer --name=nginx-service
Run Code Online (Sandbox Code Playgroud)

metallb-layer-2.yml:

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: k8s-master-ip-space
      protocol: layer2
      addresses:
      - 192.168.0.240-192.168.0.250
Run Code Online (Sandbox Code Playgroud)

然后当我运行时kubectl get svc,我得到:

NAME            TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
nginx-service   LoadBalancer   10.101.122.140   <pending>     80:30930/TCP     9m29s
Run Code Online (Sandbox Code Playgroud)

无论我做什么,我都无法让服务拥有外部IP。有没有人有想法?

编辑:在找到有关使用 NodePort 的另一篇文章后,我执行了以下操作:

iptables -A FORWARD -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

在 …

load-balancing docker kubernetes bare-metal-server metallb

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