Tag: 中断

软件用于Windows操作系统的C中断服务程序

#include #include #include void Task() { printf(“Hi”); } int main ( ) { time_t t; clock_t start, end; long i; long count; double x = 0.0; count = 2; start = clock(); time(&t); printf(ctime(&t)); printf( “Counting to %ld\n”, count ); if(count) { Task(); } end = clock(); printf( “That took %f seconds and I counted […]

在错误的线程中调用信号处理程序

我想知道是否有可能中断主线程并要求它执行一些回调。 主线程应该继续完成回调后的操作。 例如,我们有2个线程t1和m1(主线程)。 t1将中断m1(主线程)并要求它用一些参数调用一个函数。 m1(主线程)将停止执行之前的操作并将开始执行该function。 完成function后,它将恢复到之前的function。 我想复制硬件中断的作用。 我有一个线程从文件中读取数据。 然后它应该要求主线程调用一个函数。 主线程将做一些事情。 它应该停止这样做并开始执行该function。 完成后,主线程应该继续它正在做的事情 我使用信号编写了以下代码 #include #include #include #include static void catch_function(int signo) { int id = GetCurrentThreadId(); printf(“\nThread ID is %d”,id); signal(SIGINT, catch_function); } DWORD WINAPI MyThreadFunction( LPVOID lpParam ) { int id = GetCurrentThreadId(); printf(“\nChild Thread ID is %d”,id); while(1) { Sleep(50); if (raise(SIGINT) != […]

不兼容的C型错误?

uint32 InterruptLatency; uint8 measurements[32]; char buf[256]; int kernelinterrupt time() { fscanf(fp,”%lu”, InterruptLatency); // I am reading the data from kernel which is not shown here measurements[17] = InterrupLatency; buf = &measurements; // I am getting error here as below // after storing it in buffer I am sending the data from but to another layer […]

ARM Cortex-M处理器硬故障处理中的冗余代码

来自FreeRTOS.org ,关于在ARM Cortex-M3和ARM Cortex-M4微控制器上调试硬故障和其他exception ,根据FreeRTOS的人员,我们可以使用以下代码来调试ARM Cortex-M硬故障 – /* The fault handler implementation calls a function called prvGetRegistersFromStack(). */ static void HardFault_Handler(void) { __asm volatile ( ” tst lr, #4 \n” ” ite eq \n” ” mrseq r0, msp \n” ” mrsne r0, psp \n” ” ldr r1, [r0, #24] <======== NOTE THIS LINE \n" " […]

如何在x86 DOS程序集中读取键盘输入而不“消耗”它?

我需要编写一种可以从C代码调用的键记录function。 这意味着ac程序将调用一个名为startlog的汇编函数,该函数将指示开始记录按下的键,直到调用一个名为endlog的函数。 日志应该像这样工作:写入任何键的ascii值而不干扰startlog和endlog之间的C代码,这意味着如果C代码也需要读取输入(让我们说通过scanf,它可以正常工作)。 我设法通过将中断向量第9个条目(键盘按下的中断)更改为我写的将值写入文件的函数来编写记录器,并且它工作正常。 但是C代码没有得到输入。 基本上我所做的是读取使用int 21h按下的键,但是在读取ascii值后它被“消耗”所以我需要一种方法来再次模拟按键或读取值而不“消耗”它以便下一次键读取它读取相同的键。 (我用英语描述了代码,因为它是冗长而笨拙的汇编代码)

在Linux中断处理程序中创建一个小延迟

我正在与硬件设计小组合作开发一个中断处理程序,我们正试图弄清楚bug的位置。 我正在以5khz的速度读取SPI总线上的芯片。 芯片加载4个字节并触发数据就绪引脚。 我的中断处理程序唤醒并从SPI总线读取4个字节并将数据存储在缓冲区中。 但奇怪的是,每17次读取都会给出所有0的4个字节,这是不对的。 我们正在探索的一个选项是,当芯片发送数据就绪信号时,它并不总是准备就绪。 所以,我知道我无法在中断处理程序中睡觉,但我想尝试引入10或20微秒的延迟。 现在我有一个计数到100,000的for循环然后处理中断。 我没有看到任何变化,所以我想我可能会看到有人有更好的技术来忙碌等待。 或者至少是一种更好的方法来确定我应该经历多少循环迭代,因为我不确定这需要多长时间,或者编译器是否只是优化了整个事情。

Atmel / Arduino:ISR(TIMER0_OVF_vect)将无法编译(__vector_16中的“首次定义”)

我正在研究一种PWM调制器来“模拟”汽车发动机点火换向。 然后,我将用它驱动另一个微控制器,它处理从原始信号(发动机换向器)到干净输出电压的转换,通过RPM计数器的电流计。 这个项目也是我学习如何更好地控制微控制器的借口。 好吧,我写了一个小程序,使用timer0(8位),我需要触发两个中断服务程序(ISR): TIMER0_OVF_vect:溢出中断 TIMER0_COMPA_vect:比较时触发 我有以下function: void configureTimer0(parameters) { cli(); // Some maths TCCR0A = (1<<WGM01) | (1<<WGM00); // I tried to use the "Fast PWM" waveform generation mode TCCR0B &= 0b00110000; // 5th and 4th bits are reserved. Every other bits is set to 0. TCNT0 = 0; // Initialize counter value to […]

C – 如何读取输入

它是家庭作业的一部分,但它不是主要部分 我已经通过自己手动更改数据来完成主要function,但我真的不知道如何正确读取用户输入。 以下是输入的内容: 3 1 2 9 6 1 1 3 4 4 6 0 所以基本上第一个输入是下一个输入的#的大小。 因此对于3,数组大小为3,[1,2,9]为元素,对于6,数组大小为6,[1,1,3,4,4,6]为元素 当输入为0时,程序终止。 我认为通过使用while循环并说当输入[0] =’0’并且中断时,我可以终止程序,但我不知道如何将其他输入转换为char数组。 如您所见,有空格,因此scanf将以不同的整数读取char数组。 在我获得char的输入后,我相信我可以使用atoi将其恢复为整数… 那么,帮助我如何编码以便正确地获得用户输入… 也许这太模糊了:这是我有点想要的版本: while(1) { scanf(“%d”, &ui); if(ui == 0) { break; } else { size = ui; int temp[size]; for(c = 0; c < size; c++) { scanf("%d", &input); temp[c] = input; } […]

8051外部中断

如何启用8051的外部中断?

为什么中断处理程序(ISR)无法入睡?

我很困惑,为什么中断处理程序无法入睡? 我对同一个问题有2次意见: – 中断处理程序不可调度? 因为它没有task_struct。 如果处理程序hibernate,则系统可能会挂起,因为系统时钟中断被屏蔽并且无法调度hibernate进程。 中断处理程序是否可以安排, 但同时优先级较低的系统时钟中断 被这些优先级较高的中断屏蔽 , 他们不能安排? 请给我一个很好的例子。