Fix interpreter not update memory size after call native func (#563)
The native function might call wasm function exported, in which the memory.grow opcode might be executed, and interpreter should update memory size after that, or load/store opcodes may run failed with "out of bounds memory access" exception thrown. Update tensorflow sample patch, allow tensorflow wasm app to grow memory so as to run more models. And fix some compile issues of littlevgl zephyr sample for latest zephyr source code. Signed-off-by: Wenyong Huang <wenyong.huang@intel.com>
This commit is contained in:
@ -35,15 +35,18 @@ struct ili9340_data ili9340_data1;
|
||||
#define ILI9340_CMD_DATA_PIN_COMMAND 0
|
||||
#define ILI9340_CMD_DATA_PIN_DATA 1
|
||||
|
||||
static void ili9340_exit_sleep(struct ili9340_data *data)
|
||||
static void
|
||||
ili9340_exit_sleep(struct ili9340_data *data)
|
||||
{
|
||||
ili9340_transmit(data, ILI9340_CMD_EXIT_SLEEP, NULL, 0);
|
||||
//k_sleep(Z_TIMEOUT_MS(120));
|
||||
}
|
||||
|
||||
int ili9340_init()
|
||||
int
|
||||
ili9340_init()
|
||||
{
|
||||
struct ili9340_data *data = &ili9340_data1;
|
||||
|
||||
printf("Initializing display driver\n");
|
||||
data->spi_dev = device_get_binding(DT_ILITEK_ILI9340_0_BUS_NAME);
|
||||
if (data->spi_dev == NULL) {
|
||||
@ -97,10 +100,12 @@ int ili9340_init()
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ili9340_set_mem_area(struct ili9340_data *data, const u16_t x,
|
||||
const u16_t y, const u16_t w, const u16_t h)
|
||||
static void
|
||||
ili9340_set_mem_area(struct ili9340_data *data,
|
||||
const uint16_t x, const uint16_t y,
|
||||
const uint16_t w, const uint16_t h)
|
||||
{
|
||||
u16_t spi_data[2];
|
||||
uint16_t spi_data[2];
|
||||
|
||||
spi_data[0] = sys_cpu_to_be16(x);
|
||||
spi_data[1] = sys_cpu_to_be16(x + w - 1);
|
||||
@ -111,16 +116,17 @@ static void ili9340_set_mem_area(struct ili9340_data *data, const u16_t x,
|
||||
ili9340_transmit(data, ILI9340_CMD_PAGE_ADDR, &spi_data[0], 4);
|
||||
}
|
||||
|
||||
static int ili9340_write(const struct device *dev, const u16_t x, const u16_t y,
|
||||
const struct display_buffer_descriptor *desc, const void *buf)
|
||||
static int
|
||||
ili9340_write(const struct device *dev, const uint16_t x, const uint16_t y,
|
||||
const struct display_buffer_descriptor *desc, const void *buf)
|
||||
{
|
||||
struct ili9340_data *data = (struct ili9340_data *) &ili9340_data1;
|
||||
const u8_t *write_data_start = (u8_t *) buf;
|
||||
const uint8_t *write_data_start = (uint8_t *) buf;
|
||||
struct spi_buf tx_buf;
|
||||
struct spi_buf_set tx_bufs;
|
||||
u16_t write_cnt;
|
||||
u16_t nbr_of_writes;
|
||||
u16_t write_h;
|
||||
uint16_t write_cnt;
|
||||
uint16_t nbr_of_writes;
|
||||
uint16_t write_h;
|
||||
|
||||
__ASSERT(desc->width <= desc->pitch, "Pitch is smaller then width");
|
||||
__ASSERT((3 * desc->pitch * desc->height) <= desc->buf_size,
|
||||
@ -151,62 +157,69 @@ static int ili9340_write(const struct device *dev, const u16_t x, const u16_t y,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ili9340_read(const struct device *dev, const u16_t x, const u16_t y,
|
||||
const struct display_buffer_descriptor *desc, void *buf)
|
||||
static int
|
||||
ili9340_read(const struct device *dev, const uint16_t x, const uint16_t y,
|
||||
const struct display_buffer_descriptor *desc, void *buf)
|
||||
{
|
||||
LOG_ERR("Reading not supported\n");
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
static void *ili9340_get_framebuffer(const struct device *dev)
|
||||
static void *
|
||||
ili9340_get_framebuffer(const struct device *dev)
|
||||
{
|
||||
LOG_ERR("Direct framebuffer access not supported\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int ili9340_display_blanking_off(const struct device *dev)
|
||||
static int
|
||||
ili9340_display_blanking_off(const struct device *dev)
|
||||
{
|
||||
struct ili9340_data *data = (struct ili9340_data *) dev->driver_data;
|
||||
struct ili9340_data *data = (struct ili9340_data *)dev->data;
|
||||
|
||||
LOG_DBG("Turning display blanking off\n");
|
||||
ili9340_transmit(data, ILI9340_CMD_DISPLAY_ON, NULL, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ili9340_display_blanking_on(const struct device *dev)
|
||||
static int
|
||||
ili9340_display_blanking_on(const struct device *dev)
|
||||
{
|
||||
struct ili9340_data *data = (struct ili9340_data *) dev->driver_data;
|
||||
struct ili9340_data *data = (struct ili9340_data *)dev->data;
|
||||
|
||||
LOG_DBG("Turning display blanking on\n");
|
||||
ili9340_transmit(data, ILI9340_CMD_DISPLAY_OFF, NULL, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ili9340_set_brightness(const struct device *dev,
|
||||
const u8_t brightness)
|
||||
static int
|
||||
ili9340_set_brightness(const struct device *dev, const uint8_t brightness)
|
||||
{
|
||||
LOG_WRN("Set brightness not implemented\n");
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
static int ili9340_set_contrast(const struct device *dev, const u8_t contrast)
|
||||
static int
|
||||
ili9340_set_contrast(const struct device *dev, const uint8_t contrast)
|
||||
{
|
||||
LOG_ERR("Set contrast not supported\n");
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
static int ili9340_set_pixel_format(const struct device *dev,
|
||||
const enum display_pixel_format pixel_format)
|
||||
static int
|
||||
ili9340_set_pixel_format(const struct device *dev,
|
||||
const enum display_pixel_format pixel_format)
|
||||
{
|
||||
if (pixel_format == PIXEL_FORMAT_RGB_888) {
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
LOG_ERR("Pixel format change not implemented\n");
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
static int ili9340_set_orientation(const struct device *dev,
|
||||
const enum display_orientation orientation)
|
||||
static int
|
||||
ili9340_set_orientation(const struct device *dev,
|
||||
const enum display_orientation orientation)
|
||||
{
|
||||
if (orientation == DISPLAY_ORIENTATION_NORMAL) {
|
||||
return 0;
|
||||
@ -215,8 +228,9 @@ static int ili9340_set_orientation(const struct device *dev,
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
static void ili9340_get_capabilities(const struct device *dev,
|
||||
struct display_capabilities *capabilities)
|
||||
static void
|
||||
ili9340_get_capabilities(const struct device *dev,
|
||||
struct display_capabilities *capabilities)
|
||||
{
|
||||
memset(capabilities, 0, sizeof(struct display_capabilities));
|
||||
capabilities->x_resolution = 320;
|
||||
@ -226,13 +240,14 @@ static void ili9340_get_capabilities(const struct device *dev,
|
||||
capabilities->current_orientation = DISPLAY_ORIENTATION_NORMAL;
|
||||
}
|
||||
|
||||
void ili9340_transmit(struct ili9340_data *data, u8_t cmd, void *tx_data,
|
||||
size_t tx_len)
|
||||
void
|
||||
ili9340_transmit(struct ili9340_data *data, uint8_t cmd,
|
||||
void *tx_data, size_t tx_len)
|
||||
{
|
||||
data = (struct ili9340_data *) &ili9340_data1;
|
||||
struct spi_buf tx_buf = { .buf = &cmd, .len = 1 };
|
||||
struct spi_buf_set tx_bufs = { .buffers = &tx_buf, .count = 1 };
|
||||
|
||||
data = (struct ili9340_data *) &ili9340_data1;
|
||||
gpio_pin_set(data->command_data_gpio, DT_ILITEK_ILI9340_0_CMD_DATA_GPIOS_PIN,
|
||||
ILI9340_CMD_DATA_PIN_COMMAND);
|
||||
spi_transceive(data->spi_dev, &data->spi_config, &tx_bufs, NULL);
|
||||
@ -260,7 +275,7 @@ struct display_driver_api ili9340_api1 = {
|
||||
};
|
||||
|
||||
/*
|
||||
DEVICE_AND_API_INIT(ili9340, DT_ILITEK_ILI9340_0_LABEL, &ili9340_init,
|
||||
&ili9340_data, NULL, APPLICATION,
|
||||
CONFIG_APPLICATION_INIT_PRIORITY, &ili9340_api);
|
||||
*/
|
||||
DEVICE_AND_API_INIT(ili9340, DT_ILITEK_ILI9340_0_LABEL, &ili9340_init,
|
||||
&ili9340_data, NULL, APPLICATION,
|
||||
CONFIG_APPLICATION_INIT_PRIORITY, &ili9340_api);
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user