我还不能理解如何在VHDL中取消引用指针。
我心目中的C代码是这样的:
int a;
int* ptr_a;
a = 42;
ptr_a=&a;
*ptr_a=451;// how can I do this ?我试着用VHDL来模仿下面的代码:
ptr_test : process
type ptr_integer is access integer;
variable a : integer;
variable ptr_a : ptr_integer;
begin
a := 42;
ptr_a := new integer'(a);
report "ptr now points to a : ptr=" & str(ptr_a.all);
ptr_a.all := 451;
report "ptr modified : ptr=" & str(ptr_a.all);
report "a is NOT modified : a =" & str(a);
wait;
end process;那么,如何通过指针正确地修改一个值呢?
发布于 2013-03-04 22:02:19
你不能直接。访问类型不是“像指针一样”--它们至少在某种程度上是不同类型的数据存储。
此行不会创建指向a的指针
ptr_a := new integer'(a);它创建一个与a具有相同值的数据对象,并设置ptr_a来引用它。
如果要创建另一个访问类型变量:
variable ptr_b : ptr_integer;并将其设置为以指向ptr_a
ptr_b := ptr_a;然后,对ptr_b.all的更改将反映在ptr_a.all中。
发布于 2013-03-04 22:09:09
"new“等同于(C++而不是C) "new”操作;调用一个构造函数,在堆上分配一个整数并将其初始化为"a“。(当然,你可以在完成后“释放”它)
你正在寻找的是ptr_a := a'access;,这是一种通过指针访问全局或局部(堆栈)变量的Ada方法:只有当变量被声明为“别名”时才是合法的,这会提醒编译器它可能有多个视图(从而阻止一些好的优化)。在C中,不管你愿意与否,所有的东西都是“别名”的。
这是Ada没有通过VHDL简化过程的一个方面:很难看到它有很好的用途。因此,在VHDL中没有完全等效的方法。
Martin的回答刚刚出现:正如他所说的,你可以有2个或更多指向同一个堆对象的指针。
或者,解释一下您试图以这种方式实现的目标;可能还有一种VHDL替代方法。
https://stackoverflow.com/questions/15202066
复制相似问题