我正在尝试优化算法,我想不出更好的方法来做到这一点.
有一个输入(时钟频率值)将通过乘数和除数的组合.
OutClk =(InClk*Mult1*Mult2*Mult3*Mult4/Div1)/ Div2
我目前的(天真的?)实现是:
#define PRE_MIN 10000000
#define PRE_MAX 20000000
// Available values of the multipliers and divisors.
uint8_t mult1_vals[] = {1, 2};
uint8_t mult2_vals[] = {1, 2, 4, 8};
uint8_t mult3_vals[] = {3, 5, 7};
uint8_t div1_vals[] = {1, 2, 4};
uint8_t div2_vals[] = {1, 2, 4, 8};
bool exists_mults_divs(uint32_t in_val, uint32_t out_val)
{
uint8_t i_m1, i_m2, i_m3, i_d1, i_d2;
uint32_t calc_val;
for (i_m1 = 0; i_m1 < sizeof(mult1_vals); i_m1++) {
for (i_m2 = 0; i_m2 …
Run Code Online (Sandbox Code Playgroud) 我想要一个函数或(最好)一个宏来计算获得特定位掩码所需的移位数。
目前我正在做类似的事情:
#define CURRBITMASK 0x30
#define CURRBITSHIFT 4
Run Code Online (Sandbox Code Playgroud)
我想做的事:
#define BITMASK1 0x10
#define BITSHIFT1 GETSHIFT(BITMASK1) // 4 ; 0x10 = (0x1 << 4)
#define BITMASK2 0x18
#define BITSHIFT2 GETSHIFT(BITMASK2) // 3 ; 0x18 = (0x3 << 3)
#define BITMASK3 0xC0
#define BITSHIFT3 GETSHIFT(BITMASK3) // 6 ; 0xC0 = (0x3 << 6)
#define BITMASK4 0x40
#define BITSHIFT4 GETSHIFT(BITMASK3) // 6 ; 0x40 = (0x1 << 6)
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以仅使用宏从掩码中获取所需的移位?如果没有,是否有比这更优化的方法来将其作为函数来实现?:
int get_shift(int bitmask) {
int count = 0;
while (bitmask & 0x1) {
bitmask …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Docker 容器中执行以下操作:
docker run -it <image> bash
root$ dd if=/dev/zero of=file.fs bs=1024 count=1024
root$ mkfs.ext4 file.fs
root$ mkdir tmp
root$ mount -t ext4 file.fs tmp
**mount: tmp/: mount failed: Unknown error -1**
root$ dmesg
dmesg: read kernel buffer failed: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
上面的相同命令(使用 sudo)在我的主机上运行良好。
如何在 Docker 容器中成功挂载?
我有一个包含 10个元素的数组.一个任意的功能是元素被调用.
每个任意函数都可以
我有各种遵循这种模式的功能.
我正在尝试这样做:
#define ITERATE_ALL10(IDX) (##IDX = 0; ##IDX < 10; ##IDX++)
int arbitrary_fx(int *some_arr, int id) {
int i;
if (id == ID_ALL) {
for (ITERATE_ALL10(i)) {
arbitrary_fx_helper(some_arr[id]);
}
}
else {
arbitrary_fx_helper(some_arr[id]);
}
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何修复错误:
expected ';' before ')' token
Run Code Online (Sandbox Code Playgroud)
和
expected expression before ')' token
Run Code Online (Sandbox Code Playgroud)
我做错了什么?有没有更好的方法来实现我想要的?