小编Dr.*_*son的帖子

使用虚拟占位符进行Perl赋值

在其他语言中,我使用过Erlang和Python,如果我分割字符串并且不关心其中一个字段,我可以使用下划线占位符.我在Perl中试过这个:

   (_,$id) = split('=',$fields[1]);
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

无法修改./generate_datasets.pl第17行中列表赋值中的常量项,靠近");"
由于编译错误,./generate_datasets.pl的执行被中止.

Perl是否有类似的模式,我可以使用而不是创建一个无用的临时变量?

perl split

25
推荐指数
3
解决办法
3699
查看次数

使用gcc链接Apple框架

我已经创建了一些使用CoreAudio封装的封装函数,目标是创建一个可以与一些命令行C++工具一起使用的C库.到目前为止,事情进展顺利.我拿了一个示例项目,对其进行了修改,然后在XCode中构建并运行.我想完全跳过XCode并使用gcc和Makefile构建库.

如何链接Apple Framework?框架是否只是共享库,我可以包含在gcc的-l和-L选项中?

gcc macos-carbon core-audio

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

互斥锁和锁结构是如何实现的?

我理解锁,互斥和其他同步结构的概念,但它们是如何实现的?它们是由OS提供的,还是这些结构依赖于CPU MMU的特殊CPU指令?

assembly synchronization mutex locking

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

何时使用属性和方法?

我是来自C++的.NET世界的新手,我正在努力更好地理解属性.我注意到在.NET框架中,Microsoft使用了所有地方的属性.使用属性而不是创建get/set方法是否有优势?当一个人应该使用属性时,是否有一般指南(以及命名约定)?

.net c# coding-style

12
推荐指数
3
解决办法
1781
查看次数

gcc,make:如何禁用警告失败?

我正在尝试使用AVR微控制器和avr-ada构建gcc,并且我遇到了一个障碍,因为我的常规编译器对AVR所需的版本过于挑剔.我收到以下警告,这反过来导致gcc或make报告错误:

gcc -c -g -O2 -gnatpg -gnata -nostdinc -I- -I. -Iada 
  -I../../gcc/ada ../../gcc/ada/exp_ch5.adb -o ada/exp_ch5.o
exp_ch5.adb:177:16: warning: function "Has_Address_Clause" is not referenced
make[2]: *** [ada/exp_ch5.o] Error 1
make[1]: *** [all-gcc] Error 2
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)

有没有办法指示gcc或使警告不失败?

c gcc makefile ada

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

阿达和集会

我正在寻找一个在裸CPU(x86),32位保护模式和无操作系统上运行的硬件调试工具.由于时间限制,我不会在x86程序集中编写所有工具.我喜欢Ada语言(但对它缺乏经验)并且认为在这个项目中使用Ada而不是C可能会很有趣.

使用C,可以使用内联汇编或调用汇编中的子程序来访问BIOS,以获取键盘I/O等基本内容或在屏幕上显示文本.Ada有类似的能力吗?如果是这样,有没有人知道调用汇编方法和链接它们的任何资源或教程?

x86 assembly ada

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

VHDL实体和架构设计

使用Ada,我可以使用.ads和.adb文件将模块化单元拆分为规格和主体.

是否可以分离VHDL实体和架构?如果是这样,是否有命名约定或推荐的样式?实体可以放在自定义库/包中吗?

vhdl

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

如何使用依赖于实体的其他通用参数的通用参数?

我试图转换一些Verilog代码,从UART模块的更快时钟产生更慢的时钟.原始的verilog代码基于fpga4fun.com上的模块,这是我尝试将其翻译为基于VHDL的设计.

entity baud_generator is
generic(
    f_clk : integer := 50000000;  -- default: 50 MHz
    baud  : integer := 115200;    -- default: 115,200 baud
    accum_width : integer := 16;
    accum_inc : integer := (baud sll accum_width) / f_clk
);
port(
    clock : in std_logic;
    reset_n : in std_logic;
    enable : in std_logic;
    baud_clock : out std_logic
);  
end entity baud_generator;
Run Code Online (Sandbox Code Playgroud)

但是,我的编译器Aldec-HDL不喜欢以下行:

 accum_inc : natural := (baud sll accum_width) / f_clk
Run Code Online (Sandbox Code Playgroud)

这是确切的错误消息:

 # Error: COMP96_0300: baud_generator.vhd : (20, 52): Cannot reference "f_clk" …
Run Code Online (Sandbox Code Playgroud)

syntax vhdl

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

包不可见错误

我在包可见性方面遇到了问题。我有一个非常简单的包,下面列出了代码。错误消息显示在此处:

viterbi.adb:12:14: "Integer_Text_IO" is not visible (more references follow)
viterbi.adb:12:14: non-visible declaration at a-inteio.ads:18
gnatmake: "viterbi.adb" compilation error
Run Code Online (Sandbox Code Playgroud)

包装规格如下:

package Viterbi is

  procedure Load_N_File(
    Filename : in String;
    N : in out Integer;
    M : in out Integer);

end Viterbi;
Run Code Online (Sandbox Code Playgroud)

包体如下:

with Ada.Integer_Text_IO; use with Ada.Integer_Text_IO;
with Ada.Strings; use Ada.Strings;

package body Viterbi is

  procedure Load_N_File(
    Filename : in String;
    N : in out Integer;
    M : in out Integer
  ) is
    N_File : File_Type;
  begin
    Open( N_File, Mode=>In_File, Name=>Filename …
Run Code Online (Sandbox Code Playgroud)

ada gnat

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

阿达用字符串切片

我很长时间都在学习Ada的C++程序员.如果以下任何一种形式不好,请随时指出.我正在努力学习Ada做事的方法,但旧习惯很难打破(我想念Boost!)

我正在尝试加载包含整数,空格和字符串的文件.可能有更好的方法来做到这一点,但我认为我应该将该行加载到一个字符串缓冲区,我知道它不会超过80个字符.我在适当的地方声明了如下的缓冲区变量:

 Line_Buffer : String(1..80);
Run Code Online (Sandbox Code Playgroud)

打开文件后,我遍历每一行并在空格字符处拆分缓冲区:

 while not Ada.Text_IO.End_Of_File(File_Handle) loop
   Ada.Text_IO.Get_Line(File_Handle, Item=>Line_Buffer, Last=>Last);
   -- Break line at space to get match id and entry
   for String_Index in Line_Buffer'Range loop
     if Line_Buffer(String_Index) = ' ' then
       Add_Entry(Root_Link=>Root_Node,
        ID_String=> Line_Buffer(1..String_Index-1),
        Entry_String=> Line_Buffer(String_Index+1..Last-1)
        );
     end if;
   end loop;
 end loop;
Run Code Online (Sandbox Code Playgroud)

Add_Entry中发生的事情并不重要,但其规范如下所示:

 procedure Add_Entry(
   Root_Link : in out Link;
   ID_String : in String;
   Entry_String : in String);
Run Code Online (Sandbox Code Playgroud)

我想使用无界字符串而不是有界字符串,因为我不想担心必须在这里和那里指定大小.这编译并正常工作,但在Add_Entry中,当我尝试遍历Entry_String中的每个字符时,而不是从1开始的索引,它们从原始字符串中的偏移量开始.例如,如果Line_Buffer为"14 silicon",如果我循环如下,则索引从4到10.

for Index in Entry_String'Range loop
  Ada.Text_IO.Put("Index: " & Integer'Image(Index));
  Ada.Text_IO.New_Line;  
end loop;
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来进行这种解析,以便传递给Add_Entry的字符串具有以1开头的边界?另外,当我将切片字符串作为"in"参数传递给过程时,是在堆栈上创建的副本,还是对所用原始字符串的引用?

ada gnat

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

标签 统计

ada ×4

assembly ×2

gcc ×2

gnat ×2

vhdl ×2

.net ×1

c ×1

c# ×1

coding-style ×1

core-audio ×1

locking ×1

macos-carbon ×1

makefile ×1

mutex ×1

perl ×1

split ×1

synchronization ×1

syntax ×1

x86 ×1