c - 如何使用指针正确访问点阵 MachX02 SRAM 地址
问题描述
我使用 Lattice Mico8 处理器作为我的 SoC 处理器,以及一个 UART 和一个 SRAM。我正在尝试创建一个软件来与我的 Verilog 代码对话。为此,我使用指针从 UART 获取值,存储在 SRAM 中,然后在硬件中检索。我用地址初始化指针,并根据需要递增。但是,我从 UART 获取的值似乎从未存储在 SRAM 地址中。我什至无法在拿到它后立即将其打印回来,即使我应用了一些延迟。我试图让指针指向另一个变量的地址,这样,我可以在得到它后打印回 UART。我在这里做错了什么吗?或者说SRAM有问题。我在需要帮助的地方发布了一小段代码。
void My_Funt (MicoUartCtx_t *pUart, int *sramaddr)
{
int loopvar;
char rcvdChar;
sramaddr =(int *)0x804;
for ( loopvar =0;loopvar<7;loopvar++)
{
MicoUart_getC (pUart, &rcvdChar);
if ( loopvar == 0 )
{
if ( ( rcvdChar == 0x2B)|( rcvdChar == 0x2D))
;
else
{
SendString (pUart, WRNG_MSG_1);
break;
}
}
else if ( loopvar == 4 )
{
if ( rcvdChar != 0x2E)
{
SendString (pUart, WRNG_MSG_1);
break;
}
}
else if ( ( loopvar == 6 ) || ( loopvar == 7 ) )
{
if ( rcvdChar == '\r') break;
else if ( ( (int)(rcvdChar) >= 48 )&&( (int)(rcvdChar) <= 57 ) )
;
else
{
SendString (pUart, WRNG_MSG_1);
break;
}
}
else
{
if ( ( (int)(rcvdChar) >= 48 )&&( (int)(rcvdChar) <= 57 ) )
;
else
{
SendString (pUart, WRNG_MSG_1);
break;
}
}
if ( rcvdChar == '\r') break;
*sramaddr = rcvdChar;
MicoUart_putC (pUart, rcvdChar);
MicoSleepMicroSecs (100)
MicoUart_putC (pUart, (char) *sramaddr); // this line was edited to test if the value was retrievable from the SRAM
sramaddr++;
}
sramaddr =(int *)0x810;
*sramaddr = loopvar;
}
至少我希望将值放在 UART 屏幕上,只是为了知道它在 SRAM 中。我尝试使用 Lattice Reveal System 通过将触发器设置为 SRAM 的 CS 来调试我的代码。那永远不会触发。
解决方案
推荐阅读
- android - 单击第一个和第二个活动的文本,应该对第三个活动可见
- python - python用完整列表填充列表中缺少的条目
- c++ - 无法在 Netbeans (Cygwin) 上使用 libbgi.a 编译 C++ 程序
- r - 带有 R 的简单甘特图(绘制多条线)
- sql-server - 从小数或浮点值导出数字直到小数点后 2 位
- python - 为代码上传的 csv 文件是否会受到 VBA 代码的影响
- semantic-ui-react - 自定义 DropDown Semantic-Ui-React
- npm - npm 错误!不是尝试为命名空间包创建二进制文件时的子项
- flutter - Flutter Bloc 教程 - 如何显示用户名,即来自其他页面的值
- c# - 如何使用 sendgrid 在列表中添加联系人?