|
原帖由 爱好汽车电子 于 2013-3-14 09:30 发表
你好 我的意思是这样的 我定义一个全局变量的指针指向链表的头,然后我通过在中断服务程序中决定对链表的添加或删除等操作。我是否可以在中断服务程序中开辟堆,实现对链表的操作。 中断返回后,该堆开辟的空间是 ...
明白你的意思了。
全局变量定义的指针,这个是没问题的。关键就是这个链表是怎么创建的问题。
如果在函数中,包括中断函数(这种叫法是不规范的,因为中断服务子程序其实和一般的函数是有区别的,不过无所谓,只要知道是什么就好)。
如果是用本地变量方式开辟这个链表的话,在退出这个函数后,一样会回收它的,因为本地变量,也可以说是临时变量、普通变量、自动变量。都是在栈中开辟的。这些变量在进到函数时会在栈中开辟,退出函数时这块区域就会被回收(注意,收回了但不一定马上就会被分配给其他的变量做存储区),所以这样做是不行的。
最好,你可以试一下,在一般的函数和中断函数里面都这样试试,看看刚改写的新值,现在读出来后是不是原来的值。
做好的作法是:
1.全局或局部静态变量的方式开辟这个链表,那么它在静态区,不在栈里面。生存周期为程序运行期。
2.如果系统支持的的话,使用malloc。在外部使用malloc的方式开辟链表,那么它在堆区。当然释放要自己来注意了。生存周期在malloc和free之间,也就是说由程序员来控制。 |
|