我使用的是 ATMEGA16M1 微控制器和 MPLAB IDE。
我有以下函数可以写入端口。
void Lcd8_Write_String(char *a)
{
int i;
for(i=0;a[i]!='\0';i++)
Lcd8_Write_Char(a[i]);
}
void Lcd8_Write_Char(char a)
{
pinChange(RS,1); // => RS = 1
Lcd8_Port(a); //Data transfer
pinChange(EN,1); // => E = 1
_delay_ms(1);
pinChange(EN,0); // => E = 04
_delay_ms(1);
}
Run Code Online (Sandbox Code Playgroud)
我用 调用该函数Lcd8_Write_String("Hello World");。
我得到:
错误:将“Lcd8_Write_String”的参数 1 从指针传递到非封闭地址空间。
我该如何解决这个错误?
我使用 Atom 作为编辑器,并使用 g++ 编译器来编译我的 C++ 文件。
有问题的代码片段是:
bool openComPort(wchar_t* portSpecifier)
{
DCB dcb;
// Open Serial Port
wprintf(L"Opening COM PORT: %s",portSpecifier);
printf("\n");
serialPort = CreateFile(portSpecifier,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if (serialPort == INVALID_HANDLE_VALUE)
{
wprintf(L"Error opening Serial port: %s\n",portSpecifier);
return(false);
}
...
return true;
}
Run Code Online (Sandbox Code Playgroud)
如果我想编译它,我总是会收到错误:
错误:无法将“wchar_t”转换为“LPCSTR”{aka“const char”}serialPort = CreateFile(portSpecifier,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
我读过它应该与 Windows 和 UNICODE 或 ASCII 有关。
我通过按 ctrl+shift+U 并选择 UTF-8 确保 Atom 使用 UNICODE。
#define UNICODE我一开始就尝试过。没用。
我尝试过其他线程的不同解决方案,例如:
(_TCHAR*)wprintf(L"Opening COM PORT: %s",portSpecifier);
Run Code Online (Sandbox Code Playgroud)
我仍然遇到同样的错误。您对如何解决这个问题有什么建议吗?