您好!
我想使用一些内联汇编代码来设置几个 CCS 变量(IP 地址等)的值、因此我可以设置为 EEPROM 中的值。
是否可以通过某种方式将 CCS 变量的地址(例如 uint32_t ui32IPAddr)获取到寄存器中、以便我可以执行此操作?
谢谢你。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我想使用一些内联汇编代码来设置几个 CCS 变量(IP 地址等)的值、因此我可以设置为 EEPROM 中的值。
是否可以通过某种方式将 CCS 变量的地址(例如 uint32_t ui32IPAddr)获取到寄存器中、以便我可以执行此操作?
谢谢你。
您好、Brad、
我不是汇编层面的专家。 不清楚为什么要使用汇编语言来处理 C 变量。 我将建议您参阅 《TI Arm 编译器用户指南》中的第6.6.2和6.6.3节 、从而从 C/C++访问汇编函数/变量。 有关寄存器变量和参数、另请参阅第5.8节。 Register 是一个标准 C 关键字、它允许您在未启用优化的情况下强制将变量分配给寄存器。
您好 Charles、
我使用汇编语言是因为这是我所知道的从板上的 EEPROM 中获取数据的唯一方法、并且正如我在上一个项目中意识到的、当我初始化板以使用静态 IP 地址时、我需要设置 IP 地址 ui32IPAddr 和网关地址 ui32GWAddr。
我看看示例6.3和6.4、运气不好。 我能够如示例6.3中所示定义变量 var、并且可以如示例6.4中所示将其声明为外部变量、但我看不到在 assm 命令中使用它以便使用它来获取所需数据的任何方法。 例如、如果我尝试在以下命令中使用它:
MOV R1、var
我收到编译错误"无效操作数"。 第5.8节只让我更困惑。
你看到我做错了什么吗?
谢谢你。
我使用汇编语言是因为这是我所知道的从电路板上的 EEPROM 中获取数据的唯一方法,而且正如我从上个项目中获悉的,[/报价]您是如何对 EEPROM 进行编程的? 要读取 EEPROM ,只需调用 EEPROMRead ()即可,数据保存在变量中。 请参阅外设驱动程序库用户指南中记录的以下示例。
uint32_t ui32EEPROMInit; uint32_t pui32Data[2]; uint32_t pui32Read[2]; // // Enable the EEPROM module. // SysCtlPeripheralEnable(SYSCTL_PERIPH_EEPROM0); // // Wait for the EEPROM module to be ready. // while(!SysCtlPeripheralReady(SYSCTL_PERIPH_EEPROM0)) { } // // Wait for the EEPROM Initialization to complete // ui32EEPROMInit = EEPROMInit(); // // Check if the EEPROM Initialization returned an error // and inform the application // if(ui32EEPROMInit != EEPROM_INIT_OK) { while(1) { } } // // Program some data into the EEPROM at address 0x400. // pui32Data[0] = 0x12345678; pui32Data[1] = 0x56789abc; EEPROMProgram(pui32Data, 0x400, sizeof(pui32Data)); // // Read it back. // EEPROMRead(pui32Read, 0x400, sizeof(pui32Read)); 130
您好 Charles、
我解决了一个小问题。 我在 pu32Read 中获得的 IP 地址(192.168.1.101)为0x6501A8C0、但我需要将反转字节设为0xC0A80165。 我知道我可以使用大量指令来执行此操作、但我想知道是否有简单的 C/C++命令可以执行此操作。
我仍然对我所能获得的有关如何在 C/C++代码和汇编代码之间来回传递变量的任何信息感兴趣、因为我确信我会在某个时候再次遇到这个问题。
谢谢!
您好、Brad、
我认为您需要使用 htonl 和 ntohl 函数在主机字节顺序和网络字节顺序之间进行转换。 请访问 https://linux.die.net/man/3/htonl
如果您引用 C:\ti\TivaWare_C_Series-2.2.0.295\utils\lwiplib.c 文件、它会使用 htonl 将 unsigned long 整数(主机字节地址)转换为网络字节顺序。 在将添加到应用程序之前、您可以先创建一个简单的程序并尝试使用这些函数。