• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

const char *p参数的函数 和中断赋值的问题

_落雪千寒灬 2018-06-17 浏览量:875

假设一个带有 const char *p参数的函数 在此函数中 p指向一个全局变量(p=&a) 然后我在中断里给此全局变量赋值(a=1)

如果程序执行到此函数中 并已经p=&a 然后程序恰好进入了中断 执行a=1

会出现什么现象?会赋值失败吗?会程序崩溃吗?

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 单片机在读取数据的时候肯能已经把a的值读出来放在一个通用寄存器里。如果这时候发生中断,这个寄存器应该会被压栈,执行完中断之后弹出的是修改之前的值。

    程序不会崩溃,但是出现这种不是你想要的结果。

    所以这种资源的访问必须做到互斥 。或者函数里进行操作的时候关中断。

    • 发布于 2018-06-18
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:9
  • 不会赋值失败,程序也不会崩溃,数值会改变,这就要求程序员在处理的时候注意这类问题,进行原子操作,并且这种中断和大循环中变量问题keil编译器在链接的时候会有警告的
    • 发布于2018-06-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 不会赋值失败的,

    const char *p 是指p的值不能重复赋值,而是固定&a了,而a的值是可以随便改动的。

    这没有冲突啊。

    • 发布于2018-06-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 程序编译好之后地址就已经确定了,不会变了
    • 发布于2018-06-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个赋值不会失效,因为一个是改变p的值,一个是改变a的值,二者不会冲突
    • 发布于2018-06-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 程序不崩溃,赋值不会失败,p值已经改变了
    • 发布于2018-06-19
    • 举报
    • 评论 0
    • 0
    • 0

  • p=&a与a=1只会是最后执行的那一句有效。
    如果先是a=1再是p=&a,那么,p所指的就是1
    要是先p=&a再a=1,那么,p还是原来的值。
    • 发布于2018-06-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个是不会奔溃的,因为一个是改变指针的值,一个是改变指针所指向的值
    • 发布于2018-06-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 不会有问题,赋值可以成功,因为你设置a=1只是修改a的值,p所指向的内容没有发生任何变化。

    • 发布于2018-06-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 改变指针的地址和内容不会有问题,但是不能给指针一个不确定的地址,不然真的会崩溃
    • 发布于2018-07-14
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

const char *p参数的函数 和中断赋值的问题