作为一个失败的嵌入式程序员,菜鸟级别,项目中用到 nodic的nrf1822芯片,由于是偏维护性,没有对底层代码进行深究,这里主要是阅读底层代码部分笔记,没有什么顺序看到哪记到哪。
字对齐检查
51822 一个word是四个自己,在有些操作时需要检查传入的参数是否是字对齐,使用以下函数:
static __INLINE bool is_word_aligned(void * p)
{
return (((uintptr_t)p & 0x03) == 0);
}
即去检查,地址的低两位是否为1,来判断地址是否是4整数倍。
存储单元的地址以字节为单位,一个word占4个字节,32位
CEIL_DIV
/**@brief Perform integer division, making sure the result is rounded up.
*
* @details One typical use for this is to compute the number of objects with size B is needed to
* hold A number of bytes.
*
* @param[in] A Numerator.分子
* @param[in] B Denominator.分母
*
* @return Integer result of dividing A by B, rounded up.
*/
#define CEIL_DIV(A, B) ((((A) - 1) / (B)) + 1)
在分配空间的时候,按word分配吗,如果有不足的则补足一个word。
APP_BUTTON_INIT
#define APP_BUTTON_INIT(BUTTONS, BUTTON_COUNT, DETECTION_DELAY, USE_SCHEDULER) \
do \
{ \
uint32_t ERR_CODE = app_button_init((BUTTONS), \
(BUTTON_COUNT), \
(DETECTION_DELAY), \
(USE_SCHEDULER) ? app_button_evt_schedule : NULL); \
APP_ERROR_CHECK(ERR_CODE); \
} while (0)
APP_BUTTON_INIT 的初始化,其中USE_SCHEDULER参数是确认都是否是使用调度器,是如果软件上不想立即执行按键的触发逻辑,可以将触发事件放到调度里,之后再去执行。可以参见下面的网址上的解答。
https://devzone.nordicsemi.com/f/nordic-q-a/9046/app_button_init