OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4366|回复: 9

arm板每次下载后只能运行一个程序,如何能下载两个程序切换运行?

[复制链接]

11

主题

54

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-8-24
在线时间
13 小时
发表于 2016-9-5 15:52:18 | 显示全部楼层 |阅读模式
10金钱
譬如通过按键切换不同程序的执行,该怎么做呢?

最佳答案

查看完整内容[请看2#楼]

如果觉得浪费,你可以选择一个资源少的型号 如果你是想做成类似linux平台下这种,可以安装各种应用程序的,那不建议你用STM32的芯片. 如果你只是想有多种功能,那完全可以集成到一个程序中,你可以做成多线程的程序. 如果你是想一个程序只实现一种功能,那你可以多焊几个芯片啊,每个芯片写一个程序.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2016-9-5 15:52:19 | 显示全部楼层
hanxinfeng11 发表于 2016-9-6 10:08
因为感觉一个arm板那么多资源,如果只是让它一直跑一个程序,很浪费啊

如果觉得浪费,你可以选择一个资源少的型号
如果你是想做成类似linux平台下这种,可以安装各种应用程序的,那不建议你用STM32的芯片.
如果你只是想有多种功能,那完全可以集成到一个程序中,你可以做成多线程的程序.
如果你是想一个程序只实现一种功能,那你可以多焊几个芯片啊,每个芯片写一个程序.
回复

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2016-9-5 16:00:20 | 显示全部楼层
移植一个脚本解释器,比如lua,然后应用用脚本写,就可以实现运行不同程序
回复

使用道具 举报

11

主题

54

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-8-24
在线时间
13 小时
 楼主| 发表于 2016-9-5 16:18:51 | 显示全部楼层
zmingwang 发表于 2016-9-5 16:00
移植一个脚本解释器,比如lua,然后应用用脚本写,就可以实现运行不同程序

不懂脚本解释器,如果没有这个,每次就只能执行一个程序是吧。或者必须一直一个系统才行吗?移植是不是就是下载的意思?
回复

使用道具 举报

11

主题

54

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-8-24
在线时间
13 小时
 楼主| 发表于 2016-9-6 09:00:29 | 显示全部楼层
求大神解答
回复

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2016-9-6 10:02:08 | 显示全部楼层
hanxinfeng11 发表于 2016-9-5 16:18
不懂脚本解释器,如果没有这个,每次就只能执行一个程序是吧。或者必须一直一个系统才行吗?移植是不是就 ...

程序本身就是为了实现特定功能的,你完全可以只写一套程序,按键切换不同的功能,除非你想在不重新下载程序的情况下,变更程序功能.
回复

使用道具 举报

11

主题

54

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-8-24
在线时间
13 小时
 楼主| 发表于 2016-9-6 10:08:38 | 显示全部楼层
zmingwang 发表于 2016-9-6 10:02
程序本身就是为了实现特定功能的,你完全可以只写一套程序,按键切换不同的功能,除非你想在不重新下载程序 ...

因为感觉一个arm板那么多资源,如果只是让它一直跑一个程序,很浪费啊
回复

使用道具 举报

15

主题

172

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1276
金钱
1276
注册时间
2016-5-31
在线时间
499 小时
发表于 2016-9-6 14:05:41 | 显示全部楼层
楼主请看如下的程序片段:

说明: 1、上电之前Esc+Space按键同时按下,执行:虚拟U盘功能---->设置键盘功能。


        2、如果上述按键没有按下,执行正常的键盘功能.


稍微修改一下,完全可以实现你的   “通过按键切换不同程序的执行”!


#define FirmwareUpgradeAddress   ((uint32_t)0x08018400) //固件升级程序地址

#define ApplicationAddress            ((uint32_t)0x08010000)

#define KEY_MAPS_FILE_ADDR       ((uint32_t)0x08018000)  //0x08013000+0x5000



typedef  void (*pFunction)(void);

pFunction Jump_To_Application;






void Run_Process_Exchanged(void)
{       
   /* Jump to code loaded in NOR memory and execute it ******/

  JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
  Jump_To_Application = (pFunction) JumpAddress;

  /* Initialize user application's Stack Pointer */
  __set_MSP(*(__IO uint32_t*) ApplicationAddress);

  Jump_To_Application();               
}


void FirmwareUpgrade_Process_Exchanged(void)
{       
   /* Jump to code loaded in NOR memory and execute it *********/
  JumpAddress = *(__IO uint32_t*) (FirmwareUpgradeAddress + 4);
  Jump_To_Application = (pFunction) JumpAddress;

  /* Initialize user application's Stack Pointer */
  __set_MSP(*(__IO uint32_t*) FirmwareUpgradeAddress);

  Jump_To_Application();               
}




/****************************************************************************       
* 功    能:      主函数
*-----------------------------------------------------------------------------------------------------------*
* 入口参数:                                                         
* 出口参数:
****************************************************************************/

int main(void)                                                
{        
        Set_System();         
        NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x18400); //必须设置中断向量表       

        USART_Config();               
        TM1629_GPIO_Configuration();               
        TM1629_Display_Init();               
       
        memset(keymaps_udisk,0,1024);
        memset(custom_buf,0,16*8); //清除数据                 
       
        Keymaps_ReadFlash_Data(KEY_MAPS_FILE_ADDR);       
        flag_keymaps_rdok=Keymaps_Config_Process();
       
        update_key();         //读取矩阵键盘扫描值
       
        //usb键盘上电前,Esc+Space按键同时按下
        if((key_matrix[0][0]==0)&&(key_matrix[3][5]==0)){
          Run_Process_Exchanged(); //执行虚拟U盘功能---->设置键盘功能               
          while(1);
        }       
       
        Key_BackLight_Ctrl(1);       
        TM1629_Display(&kled_disp,0); //关闭键盘控制板---背光照明                       

        uart_printf ("\r +------------------------------------------------+ \n");
        uart_printf ("\r | CooCox RTOS Running........................... |        \n");
        uart_printf ("\r +------------------------------------------------+ \n\n");       

       if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET){ //如果系统已经从独立看门狗复位  
           RCC_ClearFlag();//清除复位标志
       }       
       
        Get_UserKey_Data();         
        Get_UserTDESKey_Data();
       

        CoInitOS();                                                        /*!< Initial CooCox RTOS                           */  

        CoCreateTask(Task_Init, (void *)0, 10,&Task_Init_Stk[TASK_STK_SIZE-1], TASK_STK_SIZE);
         
        CoStartOS();   

        while (1);  
}






回复

使用道具 举报

14

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2016-5-7
在线时间
34 小时
发表于 2016-9-7 08:39:23 | 显示全部楼层
做成系统就可以跑很多程序了
回复

使用道具 举报

2

主题

194

帖子

0

精华

高级会员

Rank: 4

积分
981
金钱
981
注册时间
2015-9-20
在线时间
148 小时
发表于 2016-9-7 08:56:46 | 显示全部楼层
目测要火,mark一个
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-28 10:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表