中华田园巨龙 2021-12-05 17:56 采纳率: 100%
浏览 34
已结题

#define 里使用if-else进行多次写失败

我是先使用ioremap_nocache分配了一个地址,然后写寄存器:

static void __iomem *vaddr_base;
volatile u32 rw32;

static int __init writeFPGA_init(void)
{

        vaddr_base = ioremap_nocache(0x04000000, 0x4000);

        EC_WRITE_U16(vaddr_base + 0x11,0x4321);
        printk("0x11 U16 = :0x%x\n",EC_READ_U16(vaddr_base + 0x11));

}

上面的EC_WRITE_U16宏如下所示:

#define EC_WRITE_U16(DATA, VAL) \
        do { \
            if( (uint16_t)(DATA) % 2 ==0 ) \
            { \
                *((uint16_t *) (DATA)) = cpu_to_le16((uint16_t) (VAL)); \
            } \
            else { \
                *((uint8_t *)(DATA)) = (uint8_t)(0x21); \
                *(((uint8_t *)(DATA)) + 0x01) = (uint8_t)(0x43); \
            } \

else里面只有下述任意一句话时,就能运行正确。

                *((uint8_t *)(DATA)) = (uint8_t)(0x21); \  
                *(((uint8_t *)(DATA)) + 0x01) = (uint8_t)(0x43); \

但是如果像上述一样,else里面有两句话以上时,就会运行出错。

[  918.959306] Unable to handle kernel paging request at virtual address ffff000012d18011
[  918.967273] Mem abort info:
[  918.970078]   ESR = 0x96000061
[  918.973164]   Exception class = DABT (current EL), IL = 32 bits
[  918.979136]   SET = 0, FnV = 0
[  918.982204]   EA = 0, S1PTW = 0
[  918.985373] Data abort info:
[  918.988291]   ISV = 0, ISS = 0x00000061
[  918.992172]   CM = 0, WnR = 1
[  918.995170] swapper pgtable: 4k pages, 48-bit VAs, pgdp = 0000000010c88c05
[  919.002097] [ffff000012d18011] pgd=00000000bfffe803, pud=00000000bfffd803, pmd=00000000b6aed003, pte=00e8000004000f07
[  919.012786] Internal error: Oops: 96000061 [#1] PREEMPT SMP
[  919.012792] Modules linked in: writeFPGA(O+) vspm_if(O) vsp2(O) qos(O) mmngrbuf(O) vspm(O) uvcs_drv(O) pvrsrvkm(O) mmngr(O) [last unloaded: writeFPGA]
[  919.012819] Process insmod (pid: 1594, stack limit = 0x00000000df23aed5)
[  919.012830] CPU: 1 PID: 1594 Comm: insmod Tainted: G           O      4.19.72-cip10-rt4-yocto-standard #6
[  919.012833] Hardware name: Silicon Linux RZ/G2E evaluation kit EK874 (CAT874 + CAT875) (DT)
[  919.012837] pstate: 60000005 (nZCv daif -PAN -UAO)
[  919.012859] pc : writeFPGA_init+0x134/0x1000 [writeFPGA]
[  919.012864] lr : writeFPGA_init+0x11c/0x1000 [writeFPGA]
[  919.012866] sp : ffff000009823b50
[  919.012868] x29: ffff000009823b50 x28: 0000000000000100
[  919.012872] x27: ffff00000815ae30 x26: ffff000000c0e040
[  919.012875] x25: 0000000000000002 x24: ffff0000094ad000
[  919.012879] x23: ffff80007858b180 x22: 0000000000000000
[  919.012883] x21: ffff800076a20000 x20: ffff000000c0e000
[  919.012887] x19: ffff000000c0e000 x18: 0000000000000000
[  919.012891] x17: 0000000000000000 x16: 000000000000034a
[  919.012894] x15: 0000000000000030 x14: 0720072007200720
[  919.012899] x13: 0720072007200720 x12: 0720072007200720
[  919.012903] x11: 0720072007200720 x10: 0720072007200720
[  919.012906] x9 : 0720072007200720 x8 : 0720072007200720
[  919.012910] x7 : 0720072007200720 x6 : 000000000000016f
[  919.012914] x5 : 0000000000000000 x4 : 0000000000000000
[  919.012918] x3 : 0000000000000000 x2 : 0000000000004321
[  919.012921] x1 : ffff000008daa000 x0 : ffff000012d18000
[  919.012926] Call trace:
[  919.012933]  writeFPGA_init+0x134/0x1000 [writeFPGA]
[  919.012948]  do_one_initcall+0x50/0x154
[  919.012957]  do_init_module+0x54/0x230
[  919.012960]  load_module+0x1e70/0x2570
[  919.012963]  __se_sys_finit_module+0xd4/0xec
[  919.012967]  __arm64_sys_finit_module+0x18/0x20
[  919.012975]  el0_svc_common+0x70/0x164
[  919.012979]  el0_svc_handler+0x24/0x80
[  919.012982]  el0_svc+0x8/0xc
[  919.012989] Code: 36000080 52886421 78011002 14000006 (78011002)

这个是什么原因呢?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月13日
    • 创建了问题 12月5日

    悬赏问题

    • ¥20 测距传感器数据手册i2c
    • ¥15 RPA正常跑,cmd输入cookies跑不出来
    • ¥15 求帮我调试一下freefem代码
    • ¥15 matlab代码解决,怎么运行
    • ¥15 R语言Rstudio突然无法启动
    • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
    • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
    • ¥15 用windows做服务的同志有吗
    • ¥60 求一个简单的网页(标签-安全|关键词-上传)
    • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法