Я пытаюсь контролировать скорость двигателя, записывая значение регистра в микроконтроллер.
unsigned long PrintHex32( uint32_t data) // prints 32-bit data in hex with leading zeroes
{
uint32_t data2 = data << 8;
char tmp[16];
uint16_t LSB = data2 & 0xffff;
uint16_t MSB = data2 >> 16;
unsigned long ppsval2 = sprintf(tmp, "0x%.4X%.4X%", MSB, LSB);
Serial.println(tmp);
Serial.println("***************");
return tmp;
}
void NoRamp() {
Serial.println("No Ramp");
unsigned long ppsVal = (VMAX * FS * uS);
unsigned long ppsVal3 = PrintHex32(ppsVal);
Serial.println(ppsVal);
Serial.println(ppsVal3);
Serial.println("$$$$$$");
//********* NO Ramp **********////////
sendData(0xA0, 0x00000000); //RAMP Mode
// sendData(0xA4, 0x03E80000); //VMAX-5rps/5hz
// sendData(0xA4, 0x00c80000);
sendData(0xA4, ppsVal3); //VMAX-1rps/1hz
}
в конце мне нужно отправить формат данных после шестнадцатеричного преобразования sendData(0xA4, 0x00c80000)
но в настоящее время я получаю вывод на печать:
No Ramp
0x00C80000
***************
51200
0
$$$$$$
эмм, где я делаю ошибку? Может ли кто-нибудь любезно хлопнуть меня по голове немного, пожалуйста! Огромное спасибо!!
PS: также метод senddata принимает приведенный ниже аргумент, если кому-то нужно знать!
unsigned long sendData(unsigned long address, unsigned long datagram)
Редактировать: я думаю, что могу понять правильный вопрос?
unsigned long PrintHex32( uint32_t data) // prints 32-bit data in hex with leading zeroes
{
uint32_t data2 = data << 8;
//char tmp[16];
uint16_t LSB = data2 & 0xffff;
uint16_t MSB = data2 >> 16;
unsigned long val = xxxx(uint16_t LSB) + uint16_t MSB(YYY);
//sprintf(tmp, "0x%.4X%.4X%", MSB, LSB);
return val ;
}
если вы видите, что я преобразовываю свои входные данные2 в шестнадцатеричный формат, используя uint16_t LSB и uint16_t MSB. как сохранить эти два значения как одно unsigned long val . тогда я могу вернуть эту переменную. Я думаю, что использование метода sprintf неверно, поскольку он показывает только представление char? пожалуйста, поправьте меня, если я ошибаюсь?
PrintHex32
имеет возвращаемый типunsigned long
, ноreturn tmp;
пытается вернутьchar[16]
- это даже не должно компилироваться. - person aschepler   schedule 23.07.2019unsigned long sendData( unsigned long* address, unsigned long data);
- person seccpur   schedule 23.07.2019