2
我有一堆標記舵機,每個都有自己校準的最小,中等和最大脈寬值。C++宏參數w /令牌串聯?
// repository of calibrated servo pulse width values:
#define SERVO_0x01_MIN 165
#define SERVO_0x01_MID 347
#define SERVO_0x01_MAX 550
#define SERVO_0x02_MIN 165
#define SERVO_0x02_MID 347
#define SERVO_0x02_MAX 550
...
爲了簡化代碼的維護,交換一個伺服應該只需要改變一個宏定義值。
// maps certain positions on robot to the servo that is installed there
#define JOINT_0 0x02
#define JOINT_1 0x05
#define JOINT_2 0x0A
...
// function-like macros to resolve values from mapping
#define GET_MIN(servo) SERVO_##servo##_MIN
#define GET_MID(servo) SERVO_##servo##_MID
#define GET_MAX(servo) SERVO_##servo##_MAX
我遇到的問題是,調用一個函數宏有一個說法,本身就是一個宏不能解決其終值:
// main
int main(void) {
// this works
int max_0x01 = GET_MAX(0x01); // int max_0x01 = 550;
// this doesn't
int max_joint_0 = GET_MAX(JOINT_0); // int max_joint_0 = SERVO_JOINT_0_MAX;
}
我能做些什麼,使GET_MAX(JOINT_0)
變成550
?
哇!謝謝 - 請您爲此添加一個簡短的解釋爲什麼這有效? –