Sourceboost C 中指向数组的全局变量指针

发布于 2024-12-08 19:28:07 字数 585 浏览 1 评论 0原文

我声明了这些全局变量:

volatile unsigned char BUFFER[7]={0,0,0,0,0,0,0};//to get all data
volatile unsigned char *PTR=&BUFFER[0];//points to start address

在 Microchip PIC 中断函数内,指针读取 UART 寄存器并根据我的代码将其引用到 BUFFER[] 数组:

*PTR=rcreg;
PTR++;

然后检查函数 main() 中的数据:

for(i=0;i<3;i++){
    if(BUFFER[i]==DATA[i]){
        k++;
        if(k==2){LED_On();}
    }
}

并将 ptr 设置为指向BUFFER[]的起始地址

ptr=BUFFER;

问:这是读取寄存器中数据的最佳方式和正确方式吗?如何在中断函数中使用指针?

感谢您提前的关注和帮助!

I declared these global variables:

volatile unsigned char BUFFER[7]={0,0,0,0,0,0,0};//to get all data
volatile unsigned char *PTR=&BUFFER[0];//points to start address

Inside the Microchip PIC interrupt function, the pointer reads the UART register and deference it to BUFFER[] array according to my code:

*PTR=rcreg;
PTR++;

I then check the data in function main():

for(i=0;i<3;i++){
    if(BUFFER[i]==DATA[i]){
        k++;
        if(k==2){LED_On();}
    }
}

and set ptr to point at the start address of BUFFER[]

ptr=BUFFER;

Question: Is this the best way and correct way to read data in the register? How can I use pointer in interrupt function?

Thank you for your kind attention and help in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

江心雾 2024-12-15 19:28:08

您可能需要考虑实现一个无锁循环缓冲区来在 ISR 和 main() 之间传输数据:
循环无锁缓冲区
非阻塞算法

You may want to consider implementing a lock-free circular buffer to transfer data between the ISR and main():
Circular lock-free buffer
Non-blocking algorithm

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文