01.led_c程序有地方不理解


val & ~1,这个意思是函数的指针与上0,那不就是0了吗。。那用来干嘛

& 这个是位与;
val & ~1 这个只是表示低位清零;

不过不知道 0x20008000 和 0x20008001 是哪来的;求解;

& 这个是位与;—这个我知道
~1等于0,那val与这个0与,不就是0了吗

~1 是按位取反;!1 是逻辑取反

如果是 32 位系统,那么 ~1 就是 0xFFFFFFFE

image
那这一步为什么要这样做呢,作用是干嘛

image
这句话也没看懂

代码配合视频看比较好,不知道你看的是哪个视频;

猜测:copy_add_val_to_ram 函数的地址低位是 1;为了对齐拷贝,就将低位清零,然后拷贝了 16 字节的数据到 ram 空间;

至于 f = (int (*)(int v))0x20008001;
就是给一个指针赋值,f 是个函数指针;(int (*)(int v)) 是强转为函数指针;没有强转应该会报个警告;

@weidongshan

@100ask_Alen