#include "system.h"<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
#include "alt_types.h"
#include "stdio.h"
#include "sys/alt_alarm.h"
#include "unistd.h"
static int Calledtimes = 0;
#define NUMBER_CALLBACK 10
#define STOP_CALLBACK 0
alt_u32 alarm_callback(void *context)//被注册成alarm的函数,
{
Calledtimes ++;
if(Calledtimes <100)
return NUMBER_CALLBACK ;//返回值代表多少个系统时钟心跳周期后,再次调用函数
else
return STOP_CALLBACK;//返回值为0,表示终止调用
}
int main (void)
{
alt_u16 Calledtimes_old;
static alt_alarm alarm; //注册Alarm之前必须先定义一个alt_alarm类型变量,无需初始化
if(alt_alarm_start(&alarm, //alt_alarm类型变量
NUMBER_CALLBACK,//第一次经过多少个系统时钟周期调用函数
alarm_callback, //待被注册的alarm函数
NULL //向alarm函数传递的形参,可以为NULL
)<0) //如果没有系统时钟,返回值就为负
printf("No system clock available\n");
Calledtimes_old = Calledtimes;
while(1)
{
if(Calledtimes_old!=Calledtimes)
{
Calledtimes_old = Calledtimes;
printf("callback function has been called %d times\n",Calledtimes);
if(Calledtimes >=50)
alt_alarm_stop(&alarm);//可以采用调用该函数停止alarm函数调用
}
}
}
总结:
1 硬件系统保障:SOPC中一定要有定时器,而且system library中要配置系统时钟
2 包含头文件alt_alarm.h
3 alarm函数:返回值:NULL表示停止调用,其他数字表示经过多少次系统时钟再次调用,该函数是在中断背景下执行的,最好不要再其中调用printf
4 定义alt_alarm类型的变量
5 注册,通过alt_alarm_start注册,注意判断返回值,小于零没有系统时钟
6 alt_alarm_stop(alt_alarm* alarm)也是可以结束alarm函数调用。
文章评论(0条评论)
登录后参与讨论