Я пишу функцию в C
, чтобы открыть последовательный порт и прочитать данные флэш-памяти в микросхеме.Я хочу передать параметры последовательного порта этой функции и открыть COM 4
.Я пытался использовать эти методы для вызова функции:
ret = download_main(1,'-C'+ 4);
ret = download_main(1,'-C4');
char array_1[] = { "-C4"};
ret = download_main(1, array_1);
ret = download_main(1, "-C4");
и измените определение функции на int download_main(int argc, char *argv)
char *args[] = { "-C4", NULL };
ret = download_main(1, args);
но все не смогли передать параметр этой функции и открыть COM4
.
вызов функции
int main(int argc, char *argv[])
{
int ret;
char* COMx = "com4";
FILE* fp;
printf("open com!\n");
/** Open Com */
if ((fp = fopen(COMx, "wb+")) == NULL) {
printf("Open %s Failed!\n", COMx);
}
/** Send "Hello,world!" */
fwrite((char*)"Hello,world!", sizeof("Hello,world!"), 1, fp);
char *args[] = { "-C4", NULL };
ret = download_main(1, args);
return ret;
}
вызванную функцию:
int download_main(int argc, char *argv[])
{
BOOL fSuccess;
TCHAR commPort[16];
TCHAR *numStr;
int len, i,ch;
int poweroff_param;
char *optstring = "C:c:r:F:f:P:w:b:B:R:A:l:h";
bininfo_node *bin_info = NULL;
opterr = 1;
if (argc < 3)
{
usage();
return 0;
}
optind = 0;
while((ch=getopt(argc,argv,optstring))!=-1)
{
switch(ch)
{
case 'c':
g_calibrate_switch = atoi(optarg);
if(1 == g_calibrate_switch)
printf("burn flash then entry calib mode\n");
break;
case 'C':
numStr = optarg;
len = _tcslen(numStr);
for (i = 0; i < len; i++)
{
if (!_istdigit(numStr[i]))
{
TRACE("Error: Invalid COM number: %s", numStr);
g_dldtool_exit_code = EXIT_CODE_COM_NUM_ERROR;
goto _exit;
}
}
_stprintf_s(commPort, sizeof(commPort) / sizeof(TCHAR), "\\\\.\\COM%s", optarg);
break;
В этой программе нет ошибки компиляции.Когда я отлаживаю эту программу, она продолжает выходить с кодом 0 и напоминает мне добавить параметры в функцию, не проходя через точку останова в функции download_main
, как показано ниже:
![enter image description here](https://i.stack.imgur.com/7LTS1.jpg)