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 《程序员面试宝典(第四版)》 欧立奇 刘洋 段韬 编著

  • 相关阅读:
    pymysql 查询大量数据导致内存使用过高优化方案
    docker-compose文件
    Flask关于request一些方法和属性的整理
    gitignore 文件中忽略项不起作用的解决方法
    Django 时区
    django-apscheduler定时任务
    结队-贪吃蛇游戏-项目进度
    团队-科学计算器-开发环境搭建过程
    《团队-科学计算器-设计文档》
    《结对-贪吃蛇-设计文档》
  • 原文地址:https://www.cnblogs.com/Manual-Linux/p/10797831.html
Copyright © 2011-2022 走看看