gpt4 book ai didi

C - 用静态数据填充结构的方法

转载 作者:太空宇宙 更新时间:2023-11-04 02:15:11 24 4
gpt4 key购买 nike

我正在用要在 I2C 上发送的数据填充一个数组,下面的代码显示了我在做什么。对我来说,这看起来很可怕。是否有任何人都可以推荐的更好/更简洁的方法?

谢谢

#define DS1337_SECONDS_REG              0x00
// Default values used for initialisation
#define DS1337_DEFAULT_SECONDS 0x00
#define DS1337_DEFAULT_MINUTES 0x00
#define DS1337_DEFAULT_HOURS_HR_MODE 0x40
#define DS1337_DEFAULT_DAY 0x00 /* Sun */
#define DS1337_DEFAULT_DATE 0x01
#define DS1337_DEFAULT_MONTH 0x01
#define DS1337_DEFAULT_YEAR 0x0C /* 2012 */
#define DS1337_DEFAULT_ALM1_SECS 0x00
#define DS1337_DEFAULT_ALM1_MINS 0x00
#define DS1337_DEFAULT_ALM1_HRS 0x00
#define DS1337_DEFAULT_ALM1_DAY_DATE 0x00
#define DS1337_DEFAULT_ALM2_MINS 0x00
#define DS1337_DEFAULT_ALM2_HRS 0x00
#define DS1337_DEFAULT_ALM2_DAY_DATE 0x00

extern i2c_err_t i2c_send(const i2c_ch_t channel, const uint8_t data[], const uint32_t length, const i2c_stop_t stop);

rtc_err_t ds1337_init(void)
{
uint8_t data_to_send[17] = { DS1337_SECONDS_REG, /* Address of first register */
DS1337_DEFAULT_SECONDS, DS1337_DEFAULT_MINUTES, DS1337_DEFAULT_HOURS_HR_MODE,
DS1337_DEFAULT_DAY, DS1337_DEFAULT_DATE, DS1337_DEFAULT_MONTH, DS1337_DEFAULT_YEAR,
DS1337_DEFAULT_ALM1_SECS, DS1337_DEFAULT_ALM1_MINS, DS1337_DEFAULT_ALM1_HRS, DS1337_DEFAULT_ALM1_DAY_DATE,
DS1337_DEFAULT_ALM2_MINS, DS1337_DEFAULT_ALM2_HRS, DS1337_DEFAULT_ALM2_DAY_DATE,
DS1337_CTRL_REG_INIT_VAL, /* Turn off the squarewave output pin */
DS1337_CLEAR_STATUS_VAL /* Clear the status registers */
};

if (i2c_set_address(DS1337_CHANNEL, DS1337_SPI_ADDRESS) != I2C_NO_ERROR)
return RTC_I2C_ADDRESS_ERROR;

if (i2c_send(DS1337_CHANNEL, data_to_send, sizeof(data_to_send), STOP_CONDITION) != I2C_NO_ERROR)
return RTC_I2C_SEND_ERROR;

//enable_interrupts(GLOBAL);

return RTC_NO_ERROR;
}

最佳答案

使用枚举而不是#defines,对于 2012 年我会说“12”而不是“0x0C”。

考虑用硬编码“0”来代替明显未使用的 *ALM* 值。

#include 一个头文件来获取i2c_send()的声明,而不是显式声明它。

省略(即隐式)[17] 数组大小——只需说[] 并让您打包的实际数据确定大小。

关于C - 用静态数据填充结构的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8872247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com