zoukankan      html  css  js  c++  java
  • 【位运算与嵌入式编程】

    1
    中断是嵌入式系统中重要的组成部分,这导致很多编译开发商提供一种拓展,让标准C支持中断,其事实是,产生了一个新的关键字,
    _interrupt,请看下面的程序(一个中断服务的ISR),请指出这段代码的错误。

    interrupt double compute_area(double radius)
    {
    	double area = PI * radius * radius;
    	printf("
     Area = %f",area);
    	return area;
    }
    

    解答:

    1 中断服务子程序不能返回一个值
    2 中断服务子程序不能接受一个参数]
    如下是STM32F307的一个中断响应函数
    /*******************************************
    Description:  串口1的中断响应函数
    Input:  无
    Ouput:  无
    Return:  无
    Others: 无
    *********************************************/
    void USART1_IRQHandler()
    {
        static uint8_t i = 0; //静态变量
        //判断中断标志位
        if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET)
        {
            USART_ClearITPendingBit(USART1,USART_IT_RXNE);   //清除中断标志位
            RF_DATA[i]  = USART_ReceiveData(USART1);  //读取串口数据
            bind_count++;
            if(RF_DATA[0] == 0X66)
            {
                i++;
                if(i == 13)
                {
                    RF_DATA_SUCCES = true;
                    i = 0;
                }
            }
            if(bind_flag == true || two_point_four_bind_flag == false)
            {
                bind_flag = false;  
                if(RF_DATA[0] == 0XAA)
                {
                    two_point_four_bind_flag = true;
                }
            }
        }
    }
    3 在许多处理器/编译器中,浮点一般都是不可重入的,有些处理器/编译器需要让额外的寄存器入栈,有些处理器/编译器就不允许在中断服务子程序
    里做浮点运算。此外中断服务子程序应该是短而有效率的,在中断服务子程序里做浮点运算是不明智的。
    4 printf()经常有重入和性能上的问题,所以一般不使用printf()
    

    参考资料:
    1 《程序员面试宝典(第四版)》 欧立奇 刘洋 段韬 编著

  • 相关阅读:
    Mysql常见索引介绍
    Mysql字段修饰符(约束)
    使用select和show命令查看mysql数据库系统信息
    Mysql5.7数据库介绍
    对Mysql数据表本身进行操作
    各种修改Mysql字符集
    Mysql的安全配置向导命令mysql_secure_installation
    firewalld介绍
    CentOS7使用yum安装mysql5.7
    利用ASP.NET一般处理程序动态生成Web图像(转)
  • 原文地址:https://www.cnblogs.com/Manual-Linux/p/10797831.html
Copyright © 2011-2022 走看看