目前我正在为处理器设计任务编写一小段代码。
我知道这通常是不好的做法,但是对于这个任务,由于我们在专用处理器上实现了一个非常具体的功能,我决定让处理器数据无内存。所有数据仅在来自另一个处理器的FIFO中或寄存器中。这很合适,因为数据量很小。
因此,我的C代码中的所有变量都有前缀“register”:它告诉编译器将它们保存在寄存器中,这样可以正常工作。
但是,C不允许定义全局寄存器变量,所以我的所有变量都在entry函数中本地声明。
当我想从入口函数调用另一个函数时出现问题,入口函数需要对相同的寄存器变量进行操作。第二个函数无法看到它们,因为它们在入口函数中是本地的。 我无法使这些变量全局化(见上文),我无法传递指针(因为寄存器不可寻址),所以我看到这样做的唯一方法是将所有变量实际传递给结构中的第二个函数,第二个函数对它们进行操作并将新值返回到另一个结构中的第一个函数。
这似乎是一个非常糟糕的举动,因为我不认为编译器足够聪明,实际上,第二个函数应该直接访问原始变量的寄存器。它会导致大量不必要的寄存器来回复制。
我正在使用的编译器不支持嵌套函数(如GCC)。因为这是C,所以没有可能的课程。
还有其他(优雅的)方法可以解决这个问题吗?
非常感谢!