Передача адреса указателя вместо указателя в качестве аргумента функции - PullRequest
1 голос
/ 05 августа 2020

Итак, я пытаюсь понять аргумент, передаваемый этой функции.

Второй аргумент принимает указатель

BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION;

, тогда почему передача адреса указателя является le git?

struct AMessage *pxMessage;
pxMessage = & xMessage;
xQueueGenericSend( xQueue2, ( void * ) &pxMessage, ( portTickType ) 0, queueSEND_TO_BACK );
 

Ссылка: http://web.ist.utl.pt/~ist11993/FRTOS-API/group___queue_management.html#xQueueGenericSend

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Функция очереди freeRTOS передает сообщение. Если сообщение является указателем, вам необходимо указать ссылку на него. Затем происходит разыменование этой ссылки.

В этом случае в очередь будет помещен указатель на сообщение, а не само сообщение.

Он работает точно так же, как memcpy. Параметры memcpy: void *, и этой функции можно передать любой указатель.

0 голосов
/ 05 августа 2020

Если подпрограмма хочет вывести указатель, например, в том месте, где при синтаксическом анализе вашей строки она остановилась, вы передаете ей указатель на этот указатель, чтобы он мог записать ваш указатель с этим выходом.

Приведение делает проверка типов тихая, но вы можете просить о глупостях. По определению, указатель void может быть приведен или назначен для указания на что угодно, включая указатель, указатель на указатель, указатель на указатель на указатель и т. Д. c. Указатель - это просто длинное число без знака с большим отношением, типом, на который он указывает, и приведение его меняет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...