1

私は mbed OS と組込みプログラミング全般を使用する初心者です。mbed OS と uvisor に慣れたいと思っています。私の目的は、LCD 画面を使用して印刷するか、セキュリティで保護されたボックスに秘密を隠すことです。したがって、uvisor を無効にして mbed-library を使用すると、すべてが完全に機能します。しかし、uvisor ライブラリを有効にしようとすると、プログラムが動作しなくなります。mbed OS+uvisor を使用して簡単な例を実装しようとしましたが、うまくいきました。よろしくお願いします。

これが私のコードです:main.cpp:

#include "mbed-drivers/mbed.h"
#include "minar/minar.h"
#include "core-util/FunctionPointer.h"
#include "uvisor-lib/uvisor-lib.h"
#include "lcd.h"
#include "main.h"
#include "btn.h"


/* messages on LCD */
char uvisorhello[] = " *** uvisor-Hello ***";


using mbed::util::FunctionPointer0;

/* Create ACLs for main box. */
MAIN_ACL(g_main_acl);

/* Enable uVisor. */
UVISOR_SET_MODE_ACL(UVISOR_ENABLED, g_main_acl);

DigitalOut led(MAIN_LED);
DigitalOut red_led(RED_LED);


void toggle_led()
{
  led = !led;
}



void init_periph()
{

  /* Init LCD */
  init_LCD();

  /* Configure the pushbutton. */
  btn_init();
}


void main_prog()
{
  toggle_led();
}



void app_start(int, char**){

    init_periph();

    lcd_print(uvisorhello);

    minar::Scheduler::postCallback(toggle_led).period(minar::milliseconds(1500));

}

main.h :

void  lcd_print(char *str);
void lcd_clear();
void toggle_led();

#define LED_ON  true
#define LED_OFF false

#define MAIN_LED LED1
#define RED_LED LED2

#define MAIN_BTN USER_BUTTON
#define MAIN_BTN_PD PullDown



#define MAIN_ACL(acl_list_name)                           \
    static const UvisorBoxAclItem acl_list_name[] = {     \
        {TIM2,   sizeof(*TIM2),   UVISOR_TACLDEF_PERIPH}, \
        {TIM5,   sizeof(*TIM5),   UVISOR_TACLDEF_PERIPH}, \
        {GPIOA,  sizeof(*GPIOA),  UVISOR_TACLDEF_PERIPH}, \
        {GPIOG,  sizeof(*GPIOG),  UVISOR_TACLDEF_PERIPH}, \
        {GPIOC, sizeof(*GPIOC), UVISOR_TACLDEF_PERIPH}, \
        {GPIOD, sizeof(*GPIOD), UVISOR_TACLDEF_PERIPH}, \
        {GPIOF, sizeof(*GPIOF), UVISOR_TACLDEF_PERIPH}, \
        {SPI5, sizeof(*SPI5), UVISOR_TACLDEF_PERIPH}, \
        /* FIXME: Secure RCC/EXTI/SYSCFG/FLASH */         \
        {RCC,    sizeof(*RCC),    UVISOR_TACLDEF_PERIPH}, \
        {EXTI,   sizeof(*EXTI),   UVISOR_TACLDEF_PERIPH}, \
        {SYSCFG, sizeof(*SYSCFG), UVISOR_TACLDEF_PERIPH}, \
        {FLASH,  sizeof(*FLASH),  UVISOR_TACLDEF_PERIPH}, \
        {PWR,    sizeof(*PWR),    UVISOR_TACLDEF_PERIPH}, \
        {(void *) 0x42470000, 0x1000, UVISOR_TACLDEF_PERIPH}, \
    }

lcd.cpp :

  #include "lcd.h"




/* Font size structure */
TM_FONT_SIZE_t FontSize;


void init_LCD()
{

  /* Init LCD */
  TM_LCD_Init();

  /* Fill LCD with color */
  //TM_LCD_Fill(0x4321);


}

void lcd_print(char *str)
{
  /* Verify if the bottom of the screen is reached*/
  if(TM_LCD_GetCurrentY()>TM_LCD_GetHeight())  lcd_clear();
  /* Put string to LCD */
  TM_LCD_Puts(str);
}

void lcd_clear()
{
  TM_LCD_SetXY(0,0);
  TM_LCD_Fill(0xFFFF);
}

lcd.h

#include "lib/stm32fxxx_hal.h"
#include "lib/tm_stm32_disco.h"
#include "lib/tm_stm32_delay.h"
#include "lib/tm_stm32_lcd.h"
#include "main.h"


void init_LCD();
void lcd_print(char *str);
void lcd_clear();
4

0 に答える 0