Извините за сообщение. Я исследовал это, но ... до сих пор нет радости в том, чтобы заставить это работать. В вопросе также есть две части. Пожалуйста, проигнорируйте код кода TWI в качестве конкретного приложения. Мне нужна помощь по проблемам с гайками и болтами C.Функции C, возвращающие массив
Итак ... чтобы уменьшить использование памяти для проекта, я начал писать свой собственный TWI (wire.h lib) для ATMEL328p. Его не помещали в lib еще как «1», я понятия не имею, как это сделать ... дойдет до этого, и «2» продолжит работу, в которую все добавляется.
Проблема, с которой я столкнулась, заключается в чтении нескольких байтов.
Задача 1 У меня есть функция, которая мне нужно, чтобы вернуть массив
byte *i2cBuff1[16];
void setup() {
i2cBuff1 = i2cReadBytes(mpuAdd, 0x6F, 16);
}
/////////////////////READ BYTES////////////////////
byte* i2cReadBytes(byte i2cAdd, byte i2cReg, byte i2cNumBytes) {
static byte result[i2cNumBytes];
for (byte i = 0; i < i2cNumBytes; i ++) {
result[i] += i2cAdd + i2cReg;
}
return result;
}
Что я понимаю: о) Я объявленная Static BYTE массива в функции которой я точки как аргумент возврата функции. Вызов функции запрашивает возврат указателя для байтового массива, который поставляется.
Хорошо ... это не работает .... Я проверил несколько сайтов, и я думаю, что это должно сработать. Сообщение об ошибке я получаю:
MPU6050_I2C_rev1:232: error: incompatible types in assignment of 'byte* {aka unsigned char*}' to 'byte* [16] {aka unsigned char* [16]}'
i2cBuff1 = i2cReadBytes(mpuAdd, 0x6F, 16);
Задача 2 Ok говорят IF выше пример кода работал. Я пытаюсь уменьшить объем памяти, который я использую в своем эскизе. Используя любую память в функции, даже несмотря на то, что память (необходимость) освобождается после вызова функции, функция должна каким-то образом зарезервировать количество «пространства», когда вызывается функция. В идеале я бы хотел избежать использования статических переменных внутри функции, которые дублируются в основной программе.
Кто-нибудь знает компромисс с повторным вызовом функции .... i.e зацикливание вызова функции с помощью оператора сдвига битов, поскольку он предназначен для вызова функции один раз, чтобы завершить процесс и вернуть ... массив? Или в этом все дело в том, что C на самом деле не поддерживает возвращение массива в первую очередь.
Надеюсь, что это имело смысл, просто хочу получить лучшее от тех немногих, что у меня есть.
BR Дэнни
Вопросы, требующие помощи по отладке («почему этот код не работает?») Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе. Вопросы без четкого описания проблемы не полезны другим читателям. См.: Как создать минимальный, полный и проверенный пример. – Olaf
@Olaf, вы забыли добавить ссылку на этот раз. Asker, пожалуйста [смотрите здесь!] (Http://stackoverflow.com/help/mcve) –
Спасибо Olaf ..... Я отредактирую вопрос – hoboBob