导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[转帖]禁止的进程??[liufengzhong]

 *第63744篇: [转帖]禁止的进程??

  
楼 主:liufengzhong 2014年8月4日17:11
 [转帖]禁止的进程??
当我在startkit中尝试下面的代码时候我遇到一个问题。

用xTimecomposer调试是OK的,但是从SPI闪存执行编写的测试代码却NG(它不能与JTAG执行)。

[测试代码]

-----
#include   <xs1.h>  
#include   <stdio.h>  
#include   <platform.h>  
 
in  port DIGITAL_INPUT = XS1_PORT_32A;    //PORT 32A
port out led_d1 = XS1_PORT_1A;
port out led_d2 = XS1_PORT_1D;
 
void led_thread(chanend input_data1)
{
    unsigned busy_flg;
    int delay  = 1000;
 
    printf("LED thread start!!\n");
 
    input_data1 :>   busy_flg;
 
    while (1) {
        delay_milliseconds(delay);
        led_d2   <: 0;
        delay_milliseconds(delay);
        led_d2   <: 1;
    }
 
}
 
void port_inout(chanend input_data1){
 unsigned buf;
 
 printf("port_inout start!!\n");
 
 DIGITAL_INPUT :>   buf;
 input_data1   <: buf;
 
 led_d1   <: 1;
 
};
 
int main(void)
{
    chan input_data;
 
    par {
 
        led_thread(input_data);
        port_inout(input_data);
    }
 
    return 0;
}
 
---

我可以通过增加while(1)in port_inout而解决问题如下所示,总之,通过port_input结束任务引起的问题。


void port_inout(chanend input_data1){
 unsigned buf;
...
 led_d1   <: 1;
 
while(1); // Addition
 
};

我想要知道原因。
有人有一些想法吗?

谢谢。


回答:


当端口驱动高代码中没有while(1),端口将被驱动高和这将结束在逻辑核的范围,所以,当你在代码中加入while(1)你将能够看见LED改变状态。


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:[转帖]已执行的user_program.xe在哪里?

[下一篇主题]:[转帖]有可能永久地保存数据(保存传感器读数)在startkit?