PIC32에서 muruby/c로 프로그래밍(Lkha)

9940 단어 mruby_cpic
개시하다
어쨌든 이번에는 타이머를 실시하지 않겠습니다.
부품, 회로 사용
pickit3
PIC32MX170F256B-I/SP
・저항330,10k
・전기용기1u,10u
LED
전원 코드는 1uF
Pickit3 왼쪽부터 왼쪽 잭 1핀

보아하니 pic24와 같다
똑같아요.기본적으로 같은 DIP의 28pin이기 때문에 매우 비슷하다.
관심 있는 사람은 마이크로컴퓨터 문서 m("m")를 참고하세요.
절차.
기본적으로 PIC24와 같은 단계이기 때문에 다른 부분만 쓴다.(난 불친절해, 아마)
https://www.s-itoc.jp/activity/research/mrubyc/mrubyc_news/842
・3.개발 환경에서 컴파일러는 XC16 대신 XC32를 사용합니다.
· 4.1의 4 선택 [pickit3]
• 4.1의 5 선택 XC32 컴파일러
· MCC는 조작 없이 "Generate"버튼만 누른다(4.1의 8, 9 건너뛰기)
• 4.1의 12
XC32(GrovalOptions)=>Common include dirs
→src,src\hal
xc32-ld=>Heap size
→1024
xc32-ld=>Minimum stack size
→1024
・main.c와 Sample1.rb와hal.h사용↓
• 4.1의 17 수정 안 함
절차.
토치카밖에 없어요.
sample1.rb
while true
  led1_write( 1 )
  sleep 1
  led1_write( 0 )
  sleep 1
end
main.c
#include "mcc_generated_files/mcc.h"
#include "mrubyc.h"
#include <stdio.h>
#include <stdlib.h>

extern const uint8_t sample1[];
#define MEMORY_SIZE (1024*20)
static uint8_t memory_pool[MEMORY_SIZE];

static void c_led1_write(mrb_vm *vm, mrb_value *v, int argc) {
    int set_value = GET_INT_ARG(1);
    PORTBbits.RB5 = set_value;
}

int hal_write(int fd, const void *buf, int nbytes) {
    return 0;
}
int hal_flush(int fd) {
    return 0;
}

int main(void)
{
    SYSTEM_Initialize();
    TRISB = 0x0;

    mrbc_init(memory_pool, MEMORY_SIZE);
    mrbc_define_method(0, mrbc_class_object, "led1_write", c_led1_write);
    mrbc_create_task(sample1, 0);
    mrbc_run();
    return 1;
}
hal.h
#define MRBC_NO_TIMER

#ifndef MRBC_SRC_HAL_H_
#define MRBC_SRC_HAL_H_

#ifdef __cplusplus
extern "C" {
#endif

/***** Feature test switches ************************************************/
/***** System headers *******************************************************/
#include "../mcc_generated_files/mcc.h"
#include "../delay.h"


/***** Local headers ********************************************************/
/***** Constant values ******************************************************/
/***** Macros ***************************************************************/

#ifndef MRBC_NO_TIMER
# define hal_init()        ((void)0)
#define hal_enable_irq()  __builtin_disi(0x0000)
#define hal_disable_irq() __builtin_disi(0x3FFF)
#define hal_idle_cpu()    Idle()

#else // MRBC_NO_TIMER
# define hal_init()        ((void)0)
# define hal_enable_irq()  ((void)0)
# define hal_disable_irq() ((void)0)
# define hal_idle_cpu()    ((delay(1)), mrbc_tick())

#endif



/***** Typedefs *************************************************************/
/***** Global variables *****************************************************/
/***** Function prototypes **************************************************/
int hal_write(int fd, const void *buf, int nbytes);
int hal_flush(int fd);


/***** Inline functions *****************************************************/


#ifdef __cplusplus
}
#endif
#endif // ifndef MRBC_HAL_H_
xc32 delay가 없어서 하는 거예요.
xc16에 delay가 있는데 이번에는 없어요. 그래서 해요.
순환일 뿐이야.
delay(1)로 약 1ms
각각의 서류를 작성하다
Header Files
Source Files에 Add Existing item을 제출하십시오.
delay.h
#ifndef _EXAMPLE_FILE_NAME_H    /* Guard against multiple inclusion */
#define _EXAMPLE_FILE_NAME_H


/* Provide C++ Compatibility */
#ifdef __cplusplus
extern "C" {
#endif

void delay(int);

#ifdef __cplusplus
}
#endif

#endif /* _EXAMPLE_FILE_NAME_H */
delay.c
#include <stdio.h>
#include <stdlib.h>
#include "delay.h"

/*
 * 
 */
void delay(int n){ 
    n = n * 1000;
    while(n>0) {n--;}
}

좋은 웹페이지 즐겨찾기