关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7586|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
* t8 a2 ]- k9 ~- O0 u' @8 p
* g3 Y$ _+ W& M, l; S- v. H: p    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
* z  E) k* ]' R8 A3 D4 ]5 L; V/ u7 e
其他程序段。。。。。
9 O0 H6 S6 i% b& n2 d/ y
3 e/ M/ \- N) ]7 c: m   free(x_d);
' O- ?# I4 N  q' N' ^. `
5 @( o  ~1 @! v  C使用DSP侧单独调试功能,验证动态申请没有问题,
, E4 d- {- ?1 U
9 f4 y8 P1 v3 H' x+ M; \, S) Y& G但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, i9 ^$ u3 `! Y( w0 F

. }  A: }- e! y# R1 m
1 X' M2 Z: u$ N4 w) V
, ^- r, E& [  n$ L+ a6 J  c: a7 u9 Q2 ]1 ^- [1 Z

% {$ C( f6 g# f% }1 ~* C* ~3 ]- P8 e% w! S2 n- C; B
0 P% R6 Q3 {% ]5 T6 q* a  L& M

+ S' ^' C' K3 R9 e0 K3 B6 i  D5 N9 j. g) @  |; z0 H* i' |3 t2 F

4 T5 N/ B/ m) O% x6 b1 O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
! v& m6 @" s  L) t, i, P0 Y我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 J! o: F( e. |" H(不过疑惑的是,为何单独DSP仿真就没有问题呢?). U( t9 }4 E; H, p3 P7 ?0 v

3 z2 F- G6 \- q3 a是不是需要在DSP.CFG中进行配置
- n- Z1 f4 O; n6 _( T/ ^我现在的配置为
4 X# |, ^% a" z" G) b+ A. U
: }- ^3 f9 y* t) c/*
3 h) \0 f3 {: _& U7 g *  ======== Operating System Configuration ========
7 c. {6 [1 Y* V& z% `) r */* j9 v8 G0 F) w$ }0 j) Y( ?7 r

8 J- e" K$ }; n$ H% w% n& O/* no rts heap */% |( d2 t6 p5 Q5 \9 ?* s* \' i
Program.heap = 0;
" }+ U9 d/ e- F4 ^& k& U; aProgram.argSize = 100;  /* minimum size */" j0 o9 ]$ ^+ h, Z
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大6 l. p4 f* T0 ^3 t* n

, A. N( H' ]$ i3 R: `/* create a default heap */
, p& w" p) j( ?5 S! i! O9 pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% v. @6 D6 q9 O& C/ I4 W; ivar heapMemParams = new HeapMem.Params();
9 d9 `; ~! ?1 l; IheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大8 g1 p' o  S' \, x7 ~* f6 I
7 O! F2 n9 B9 M2 D, F
var Memory = xdc.useModule('xdc.runtime.Memory');- Z% Z8 n& B2 z& E( l) ]  B
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( ~- M0 L) l) Q  A

6 o: V* ]3 s: `* h! E/* configure System module *// ?5 E7 E3 {" t# P- u
var SysMin = xdc.useModule('xdc.runtime.SysMin');
9 Q# n) y7 E1 }7 x2 xSysMin.bufSize = 0x1000;
! i# D9 b8 v  h% k; M  t6 sSysMin.flushAtExit = false;
- C" N$ Q8 ?; P2 S
! W+ u2 y9 n1 A$ l& k6 @5 k2 h- tvar System = xdc.useModule('xdc.runtime.System');
  ]% G; e! `; w' _* R$ s% gSystem.SupportProxy = SysMin;
" j0 U/ f  N8 D. U/ M0 @; A- }3 t' m/ g" I: P' n2 d
/* configure SysBios to use the lower half of Timer 1 */% g$ x- l( f* u# s5 j4 ~
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
0 V# a' |' d% R1 {1 h# d' B! D: j; Cvar Clock = xdc.useModule('ti.sysbios.knl.Clock');* Q3 C2 V6 z3 \  \  a% B
Timer.timerSettings[1].master = true;& G, m9 X3 b( B3 X. C8 t3 t  b1 O
Timer.defaultHalf = Timer.Half_LOWER;- r0 {2 {6 }- A! V% w  B- l! ^
Clock.timerId = 1;
9 N  N: x/ P* J2 Q0 G
6 O3 w8 f$ b( n% M
2 a/ L! u9 t' c2 m/*
6 ~9 o* r* `2 ?6 N *  ======== Miscellaneous Configuration ========/ o/ \9 A; m( `! l
*/7 r* {- i. N* I1 x2 B, M2 e
' q; r# h  Y: U9 X
/* set default diags mask */
9 H" _8 e' Z' b, ^( uvar Diags = xdc.useModule('xdc.runtime.Diags');/ _5 S, _- {, X+ C% f  d+ s
var Defaults = xdc.useModule('xdc.runtime.Defaults');/ R" A" G0 B  h/ m5 m! ?7 y

+ {5 J" O# w9 t5 R9 p, v/ x; FDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) ~" t( z0 M7 LDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;: T5 w8 h7 ~( s
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
/ X( L! N! S5 ?& B( ^Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */- @5 Z/ W* |/ l/ W$ E2 A: I8 x
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */0 w0 b; a0 J  M" S- u' u* z
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;* Z5 k( Z" i5 B* q1 Z) Q# g
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
9 I8 _; o1 @: \0 X, }4 yDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
, f: m0 I( r( s0 a' Q# YDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
. ]8 U' l5 V3 F; tDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
; U0 T* M3 a( K  S' i4 N& y6 TDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;" h$ z* @$ L) c- t2 d/ N" n
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  }# q1 ~7 n. ?- ^& P) LDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
0 H. j2 k5 _1 F' Q/ {8 cDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
5 }7 t; S1 {6 T0 K' L* d' Q3 h% v2 J4 r& c" {
/* override diags mask for selected modules */
: l; r* y/ W) y6 nxdc.useModule('xdc.runtime.Main');
1 V4 z- A; u! R! r* a! XDiags.setMaskMeta(
5 _: M4 ]! r# c( P2 {& P* S    "xdc.runtime.Main",
8 h+ k- s$ p. q5 k    Diags.ENTRY | Diags.EXIT | Diags.INFO,4 n2 \3 k; x3 P3 G" ^6 ?$ O
    Diags.RUNTIME_ON
( R+ Z+ J* L/ _+ a. b);
. Y" W5 P8 Q5 E* E2 d
6 m6 D4 `) u; |var Registry = xdc.useModule('xdc.runtime.Registry');
1 `- ]# T( Z  S; P5 `Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;& Y, N! S% C5 j
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 a, m: P; ?! _Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;- [9 h2 e( j; q4 U8 E
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  N0 y& Y( ~: Z! J# `
- E% c6 i" f4 C/ Q# @/* create a logger instance */
) ~: B% c% |9 S: s. t, Fvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
' B: w0 d- l6 Y/ m( S4 Xvar loggerBufP = new LoggerBuf.Params();  _! K2 O+ ]$ e: o
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
9 Q+ F2 U, ?) V+ X% v9 RloggerBufP.bufType = LoggerBuf.BufType_FIXED;
% g% j  D+ a% i- X: ]; D. ~7 c' U8 N/ x5 G3 K% m) e
var appLogger = LoggerBuf.create(loggerBufP);
9 k2 }( [) z+ D2 iappLogger.instance.name = "AppLog_Core1";
* V0 [8 B! `2 Z  |6 T3 V% i# ]Defaults.common$.logger = appLogger;# b% K3 O& \- r3 X( c8 W
Memory.defaultHeapSize = 0x8192;   
6 z9 a6 {  h  U/ V# k4 tIdle.idleFxns[0] = "&LEDStatus";
! @4 k3 M% |9 M# d4 I' ~4 DCache.initSize.l2Size = Cache.L2Size_32K;
/ J! N# M% Q& J: H7 l
- w7 k1 V5 ^# [6 H$ T9 G" C+ Q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
, e8 ~, d  S9 b. C5 Cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  B2 d: s( L% b+ i; I  bvar heapMemParams = new HeapMem.Params();% W) ^' l4 e9 K* J
heapMemParams.size = 0x4000;
9 ~8 Z" Q; F& L& n# K5 r* z  g$ A; t+ V+ V3 S0 U
var Memory = xdc.useModule('xdc.runtime.Memory');
+ T, ~& a. J. A& |+ iMemory.defaultHeapInstance = HeapMem.create(heapMemParams);, v2 b6 n  C  L2 {* g

7 k: `/ A# r& N# E我大约calloc  每次共计大小为5K*16bits,
+ e4 u4 T' M* R而默认配置才0x4000、需要改大。
, a' J- P2 I4 [+ |8 f/ X- X; R) ~# M; q/ [
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */( G6 E, U* Y5 V6 x) d2 u. T* f7 S
Program.heap = 0;2 Z) X4 T: ~, @2 o- @) W. w' W1 }
Program.argSize = 100;  /* minimum size */
/ \6 {9 z4 K2 E! B( xProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-2-7 10:24 , Processed in 0.042316 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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