C 在msm800中启用硬件看门狗
我需要启用msm800嵌入式计算机的硬件看门狗 不幸的是,我几乎不知道如何使用汇编语言 这是设备的文档所说的: 功能:看门狗 编号:EBh 说明: 启用选通并禁用 监察人通电后,看门狗 它总是被禁用的。曾经的看门狗 已启用,则用户应用程序 必须至少每小时执行一次选通 800毫秒,否则看门狗执行 硬件重置 输入值: AH:78h DLAG Int15功能 AL:EBh功能请求 BL:00h禁用 BL:01h启用 BL:FFh选通 01h FFh启用看门狗/重触发 BH:00h=BL->秒数/01h= BL->最小值的数量 输出值:AL 01h看门狗定时器 发生超时 这就是我想到的:C 在msm800中启用硬件看门狗,c,gcc,assembly,embedded,pc104,C,Gcc,Assembly,Embedded,Pc104,我需要启用msm800嵌入式计算机的硬件看门狗 不幸的是,我几乎不知道如何使用汇编语言 这是设备的文档所说的: 功能:看门狗 编号:EBh 说明: 启用选通并禁用 监察人通电后,看门狗 它总是被禁用的。曾经的看门狗 已启用,则用户应用程序 必须至少每小时执行一次选通 800毫秒,否则看门狗执行 硬件重置 输入值: AH:78h DLAG Int15功能 AL:EBh功能请求 BL:00h禁用 BL:01h启用 BL:FFh选通 01h FFh启用看门狗/重触发 BH:00h=BL->秒数/01h
#include <stdio.h>
int main() {
asm(
"movb $0x78, %ah\n\t"
"movb $0xEB, %al\n\t"
"movb $0x01, %bl\n\t"
"movb $0x00, %bh\n\t"
"int $0x80"
);
return 0;
}
#包括
int main(){
asm(
movb$0x78,%ah\n\t
movb$0xEB,%al\n\t
movb$0x01,%bl\n\t
movb$0x00,%bh\n\t
“整数$0x80”
);
返回0;
}
虽然这是错误的-运行会导致分段错误,我在寄存器中有正确的值,但不知道如何实际运行该函数
有什么帮助吗?如果您使用的是gcc,您需要告诉它哪些寄存器被阻塞了
asm(
"movb $0x78, %ah\n\t"
"movb $0xEB, %al\n\t"
"movb $0x01, %bl\n\t"
"movb $0x00, %bh\n\t"
"int $0x80"
:
:
: "ax", "bx", //... and what else may be clobbered by the int $80
);
如果您使用的是gcc,则需要告诉它哪些寄存器被阻塞
asm(
"movb $0x78, %ah\n\t"
"movb $0xEB, %al\n\t"
"movb $0x01, %bl\n\t"
"movb $0x00, %bh\n\t"
"int $0x80"
:
:
: "ax", "bx", //... and what else may be clobbered by the int $80
);
通常,编译器供应商会提供一种用C代码设置CPU外围设备的方法。我会尝试在你的手册中搜索“WDT”或“看门狗”,看看它是否提供了一些方便的方法 通常,编译器供应商会提供一种用C代码设置CPU外围设备的方法。我会尝试在你的手册中搜索“WDT”或“看门狗”,看看它是否提供了一些方便的方法 您面临的问题可能与上下文切换有关。通过中断指令将控制转移到,这意味着上下文切换部分需要由代码处理。简而言之,您必须编写一个中断服务例程,并从主函数调用它 例程应该在实际中断处理器之前保存处理器的状态。这是因为中断处理可能会修改寄存器的内容
退出时,例程应恢复处理器的状态。中断服务例程不会接受任何参数,也不会返回任何值。您面临的问题可能与上下文切换有关。通过中断指令将控制转移到,这意味着上下文切换部分需要由代码处理。简而言之,您必须编写一个中断服务例程,并从主函数调用它 例程应该在实际中断处理器之前保存处理器的状态。这是因为中断处理可能会修改寄存器的内容
退出时,例程应恢复处理器的状态。中断服务例程不会接受任何参数,也不会返回任何值。以下是我在C中设置特定地址或寄存器的代码(与GCC一起使用): 这定义了地址0x40100000处的8位端口或寄存器,可作为任何其他变量进行读/写:
MICRO_PORT = 0xFF;
someval = MICRO_PORT;
以下是我在C中设置特定地址或寄存器的代码(与GCC一起使用): 这定义了地址0x40100000处的8位端口或寄存器,可作为任何其他变量进行读/写:
MICRO_PORT = 0xFF;
someval = MICRO_PORT;
我在文档中找到了: 看门狗功能集成在INT15功能中 所以看起来应该调用int 0x15,而不是0x80。0x80是一个Linux系统调用 此外: 有一些编程示例可用:产品CD-Rom或 客户下载区:\tools\SM855\int15dl\
您看过这些示例了吗?我在文档中发现: 看门狗功能集成在INT15功能中 所以看起来应该调用int 0x15,而不是0x80。0x80是一个Linux系统调用 此外: 有一些编程示例可用:产品CD-Rom或 客户下载区:\tools\SM855\int15dl\
您看过这些示例吗?我从未使用过msm800(我甚至不知道它存在),但您是舒尔公司的产品,需要将asm命令写入字符串吗?在我使用asm的系统上,我必须直接编写,而不是以字符串形式编写。我也从未见过这样编写的asm指令。我从未使用过msm800(我甚至不知道它存在),但您是舒尔公司的吗?您是否需要以字符串形式编写asm命令?在我使用asm的系统上,我必须直接编写它,而不是以字符串形式编写。我也从来没有见过这样编写的asm指令。不能以这种方式编译它,它会做什么:“在gcc asm中做什么?如果输出、输入和阻塞寄存器,它会分隔一个列表。如果您没有使用gcc,这一点可能是没有意义的,因为每次使用“asm”时,您的编译器很可能会保存所有寄存器。如果不能这样编译它,在gcc asm中做什么?:“在gcc asm中做什么?如果输出、输入和删除寄存器,它会分隔一个列表。如果您没有使用gcc,这一点可能没有意义,因为每次使用“asm”时,编译器很可能会保存所有寄存器。