小编mks*_*uth的帖子

如何在emacs javascript模式下更改缩进宽度

我想为我的缩进使用2个空格而不是4.我可以使用以下命令更改C模式的默认行为:

(setq c-basic-offset 2)
Run Code Online (Sandbox Code Playgroud)

如何在javascript模式下更改此设置?

javascript emacs indentation

116
推荐指数
5
解决办法
4万
查看次数

Verilog变量可以局部范围给一个总是阻塞吗?

我有时会发现在clocked always块中使用"局部变量"的阻塞赋值很有用.这可以帮助减少重复的代码.

为了避免在不同的always块中意外使用相同的变量(对于模拟来说可能是非确定性的),我想给它本地范围.有一个很好的综合方式吗?

就像是:

module sum3(
  input            clk,
  input      [7:0] in1,
  input      [7:0] in2,
  input      [7:0] in3,
  output reg [7:0] result,
  output reg [7:0] result_p1);

  begin :sum
    reg [7:0] sum_temp; // local variable
    always @(posedge clk) begin
      sum_temp   = in1 + in2 + in3;
      result    <= sum_temp;
      result_p1 <= sum_temp + 1;
    end
  end

endmodule
Run Code Online (Sandbox Code Playgroud)

(ModelSim似乎没问题,但Synplify似乎不喜欢它.)

scope verilog nonblocking blocking

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

Verilog/VHDL - 如何避免在单个always块中重置数据寄存器?

我想避免重置不需要重置的数据寄存器.例如,当通过流水线级流数据时,如果每个级都有一个有效位,则不需要重置数据寄存器.(我相信这可以简化数据寄存器的路由和时序.)

这可以通过使用单独的always块(或vhdl中的进程)轻松完成,但我发现这很冗长,并且执行以下操作是有问题的,因为数据寄存器基本上是由重置启用的.

always @(posedge clk)
if (rst)
  out_valid <= 0;
  // NOTE: out_data is not reset
else begin
  out_valid <= in_valid;
  if (in_valid)
    out_data <= in_data + 1;
end
Run Code Online (Sandbox Code Playgroud)

相反,我一直把reset子句放在always块的末尾,并利用"last assignment wins"规则.

always @(posedge clk)
begin
  out_valid <= in_valid;
  if (in_valid)
    out_data <= in_data + 1;

  if (rst)
    out_valid <= 0
end
Run Code Online (Sandbox Code Playgroud)

我没有看到很多人使用这种风格.我有什么缺点或问题吗?有没有更好的方法呢?

额外问题:如果重置是异步的,该怎么办?如:

always @(posedge clk, posedge rst)
begin
  out_valid <= in_valid;
  if (in_valid)
    out_data <= in_data + 1;

  if (rst)
    out_valid <= 0
end
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我认为合成器将复位信号连接到数据寄存器,这违背了目的.是否有一种优雅的方法可以将数据寄存器与复位信号去耦,而无需使用单独的always块?

asynchronous verilog vhdl synchronous reset

5
推荐指数
1
解决办法
2300
查看次数

如何在aquamacs(或emacs)中使用mac'命令'键定义快捷方式

如何使用mac命令键定义aquamacs键盘快捷键.我希望'command'-k表现得像ctrl-k(杀线).提前致谢!

macos emacs command aquamacs shortcut

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

如何在不破坏选项卡的情况下使用ctrl-i获取emacs快捷方式

可能重复:
如何在不更改TAB的情况下将命令绑定到Ci?

我想重新定义emacs键盘快捷键控件 - 我是"移动游标"

为此,我将以下行添加到我的.emacs文件中:

(global-set-key (kbd "C-i") 'previous-line)
Run Code Online (Sandbox Code Playgroud)

然后我发现,默认情况下,tab键可以执行任何绑定到control-i的操作,这显然不是我想要的.因此,为了恢复正常的标签行为,我将其添加到我的.emacs文件中

(global-set-key (kbd "<tab>") 'indent-for-tab-command)
Run Code Online (Sandbox Code Playgroud)

这主要是有效的.但是,选项卡不再适用于迷你缓冲区中的自动完成命令.我该如何解决这个问题?或者有更好的方法来解决这个问题吗?谢谢.

emacs tabs keyboard-shortcuts

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

如何使用openOCD和gdb对STM32闪存进行编程

我正在使用带有openOCD和GDB的Olimex ARM-USB-OCD加密狗来编程和调试stm32f103 micro.我正在使用的IDE来自Olimex dev-kit CD并使用了eclipse ganymede.

我可以将一个小程序加载到RAM中,并且没有任何问题地逐步执行代码.

我现在有一个更大的程序,它不适合RAM(只有20K),所以我想从flash(128K)运行它.

我修改了链接器脚本,指示程序代码应该进入flash部分(地址0x8000000),但是gdb无法加载程序.

(gdb) 
20 load main.out
&"load main.out\n"
load main.out
~"Loading section .text, size 0xb0e6 lma 0x8000000\n"
Loading section .text, size 0xb0e6 lma 0x8000000
&"Load failed\n"
Load failed
Run Code Online (Sandbox Code Playgroud)

我该怎么办才能让gdb将程序加载到flash中?

gdb stm32 openocd

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

在emacs HTML模式下禁用自动回车

我在HTML模式下使用emacs.当我输入大约70列文本时,它会自动执行回车操作,将文本分成两行.有没有办法禁用和/或修改它?

html emacs editing

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

如何在不复制引用的情况下在Python中对列表进行切片?

我需要从函数内的列表中删除前N个元素,并且我希望修改原始列表.在Python中执行此操作的简洁方法是什么?

使用a slice不起作用,因为切片操作返回对列表的单独引用.在这个例子中,我想pkt[3,4,5]调用函数后.

>>>> def process_packet(packet, num_bytes):
         # ...
         packet = packet[num_bytes:len(packet)]
         print packet

>>> pkt = [1,2,3,4,5]
>>> process_packet(pkt, 2)
[3, 4, 5]
>>> print pkt
[1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

python list slice

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

如何从ARM Cortex-M3上的中断处理程序中重新启用中断?

背景:
我使用的是没有操作系统的cortex-M3 ARM内核.

我的主循环等待来自中断处理程序的标志然后执行一个函数doBigTask().

在一个单独的中断处理程序中,我想执行另一个函数doSmallTask(),但由于这个函数也非常重要,我仍然希望处理其他与I/O相关的中断.

我的问题:
从内部简单地启用中断是否存在任何问题doSmallTask()?例如,在中断已经被禁用后退出中断处理程序是否有任何复杂性?

注意:我不希望发生重入中断,因为doSmallTask()在下一个中断触发它之前就会完成.

int flag = 0;

void doSmallTask()
{
   asm volatile ("cpsie i");  // Enable interrupts
   // do rest of function
   // ...
}

void irqHandler1()
{
   flag = 1;
}

void irqHandler2()
{
  doSmallTask();
}

void irqHandler3()
{
  // service I/O
}

int main()
{
  while(1)
    if (flag)
    {
      doBigTask();
      flag = 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

embedded arm interrupt cortex-m3

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