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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构/ j# Q6 w  _. `$ I6 ^6 @8 z8 R
( q* Q) M! ]. ^8 l# ?$ U4 m8 }' s
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. O& D% K4 o; g. g
' b" S- ?3 m/ G7 c; x2 Z其他程序段。。。。。4 v/ _6 X- ?4 W7 e" j# Q

4 M# w  X& q: x1 v   free(x_d);
& `2 y! O& Z( Z8 e7 K5 B% j# l2 o/ X/ x  z( a; k
使用DSP侧单独调试功能,验证动态申请没有问题,
' k$ c% j0 O: Q0 u) s
) `- ]  [+ {  u6 y但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
( }& b, ^8 t# ]9 [% n" V9 S

5 }9 T4 x. c  }, z% |8 R$ f7 C9 S  q+ q+ [2 q9 a* f9 _/ x  l

0 s7 y* x& |* e8 w
% K: N3 S; w6 |- I4 {) u2 d
* E3 T5 y7 ^, \. ]8 Q# M7 l* A/ `) g) z

! t: e  x* T* @8 W: T
5 y9 D' X% K, {: m" g0 [, E9 l
2 d7 e+ _; |- s3 J6 x# t) ]7 l! C6 S1 I0 c* _- S' O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
* L# N# p7 \; ]& Z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 z3 R* ?7 Y# q# W! E6 }6 _. T1 G(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 U% b, X( l$ i; ?1 t/ u

$ b# F8 a- t4 X- j6 `- H是不是需要在DSP.CFG中进行配置
) C6 e0 g4 |! d8 @% ]9 ^# Y+ U我现在的配置为. ?' s" I7 k9 }4 D2 S
1 m7 I; _- M/ S3 i
/*
/ d: s% ]6 t! Y2 H( }  ^ *  ======== Operating System Configuration ========% @; _' c! E) v& i* {! i- N
*/: m2 n4 {. o5 j" L$ X1 l

# R' |: H) o* W2 C& Q9 i1 n( g9 q. B/* no rts heap */
3 e/ J4 f1 s+ a& M5 q2 p( H: s$ a; M; cProgram.heap = 0;
  j# r1 w7 q5 T9 Z& O3 K' ^9 \Program.argSize = 100;  /* minimum size */
6 N) l* S5 g% l( D0 BProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 o7 f; E- E& R* ]
0 q4 s) @3 S  a- A* q# g# [" K/* create a default heap */
6 q" p- O4 x& f5 [  T! Pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* }4 `2 ~3 {! e8 F
var heapMemParams = new HeapMem.Params();, i, e& ?( k9 r$ p4 J; s3 B: O& h% K
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& A( C8 l4 r9 L8 R
- D! G) l# a; ]$ s) P1 d! _- _
var Memory = xdc.useModule('xdc.runtime.Memory');0 |6 v6 v: T3 C# k3 z: o
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: F$ t: g3 M# [' M8 m

, \. `: L6 {; c' |) R/* configure System module */
( ^$ ^& A6 D+ hvar SysMin = xdc.useModule('xdc.runtime.SysMin');
9 }# g8 K4 l1 J/ `/ D3 k9 s7 t/ bSysMin.bufSize = 0x1000;
+ R0 \  H$ d: Q# R, }8 |3 V5 Q* uSysMin.flushAtExit = false;
2 z' W$ j7 C! A$ d  E! c- E* p) q. M
var System = xdc.useModule('xdc.runtime.System');
" {, L) J  ^$ R$ ]: Z1 SSystem.SupportProxy = SysMin;6 v$ F+ C0 p; r
1 B  ]0 C9 \+ w: n3 |* {+ q
/* configure SysBios to use the lower half of Timer 1 */) T/ @! k1 ^2 y
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 u7 y, G! N4 W4 P/ A  yvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
7 ~: U% g6 N$ O; o" A1 r0 ~, LTimer.timerSettings[1].master = true;. Y4 B* u+ _/ j8 k
Timer.defaultHalf = Timer.Half_LOWER;
" C% U4 H; u/ ^  lClock.timerId = 1;1 u* H% s2 {; }9 h' f
( W! f- ~9 H4 b' i

' @) @: T! q! y( w/*1 i$ Z; ~  q! j" p/ }: n: ^+ u
*  ======== Miscellaneous Configuration ========# H0 l0 Z' S# [) W
*/
4 D6 y! p* ?2 X  \2 K* H+ v$ z( d5 l
* p" ^7 m: a' q/* set default diags mask */
$ E9 E- }( j' h) }0 Bvar Diags = xdc.useModule('xdc.runtime.Diags');
2 C9 l6 M' Q  Y+ Zvar Defaults = xdc.useModule('xdc.runtime.Defaults');
; \; Z5 p7 H* a3 H% K! W6 `! u& I9 x9 C
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
. Q- O  Y' a2 w# j1 e+ vDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 u# {! a  L/ W" }, E5 HDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 j4 ^4 b! B; s( S* C
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
1 \3 u* B- G1 T$ P0 TDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! g& l& s# _6 V9 A/ M
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
% I$ \. ]& e) t; Y* G% wDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
) l! G' X) l  y% I" vDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; m% \5 B9 ^. D5 jDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;5 a/ P& ~* G4 p0 `( b/ F
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;- `& Y, s, w) W  U" Q/ L$ g
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
5 ]9 y/ @+ S, ?: e3 x& ADefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;( G7 q: O, Y- v" I+ C4 K1 [& q1 k
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;6 T) ~% U% I+ J4 G6 p% G
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
  Q; G3 d$ i5 V" E, B5 V/ r. [3 W) Q; W
/* override diags mask for selected modules */5 E* t$ z& P4 \6 h/ F' W
xdc.useModule('xdc.runtime.Main');) b: a$ b) L3 u1 s: v! \
Diags.setMaskMeta(
6 D. D0 D% e8 o+ e2 W    "xdc.runtime.Main",
( ~+ j) s5 {$ U6 h. I    Diags.ENTRY | Diags.EXIT | Diags.INFO,
$ L/ d* b+ Q+ K' G$ D    Diags.RUNTIME_ON
1 }, r4 c$ |8 }+ C3 b  @);  f8 u: S6 ?  g  J; B

& h; i3 z% z4 {% Y* u  fvar Registry = xdc.useModule('xdc.runtime.Registry');
) q+ N: d3 w! t' o6 L' C; B- d% eRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% m* ]) _+ ]/ a! q% d! a4 GRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 e. U. y, c' E( `& J. l7 E- V
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 G1 @' A0 N: z$ |: MRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;: ?# l: p; Y$ w2 V! H0 W/ h

! `8 r' N* p1 z" m/* create a logger instance */
% D: e4 y7 @: D2 Ivar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');: @0 ]5 t/ }; q) H  q
var loggerBufP = new LoggerBuf.Params();9 ?" [: E* m& h6 i& G% N: y
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
3 S. N! q) i# \, t7 f# AloggerBufP.bufType = LoggerBuf.BufType_FIXED;) a0 c- ^2 T$ P

+ d* Y0 |1 D5 ~* |3 x" y! Nvar appLogger = LoggerBuf.create(loggerBufP);
: U) v3 s# x6 aappLogger.instance.name = "AppLog_Core1";
/ E  Q# Z3 p4 X! a( P; t) gDefaults.common$.logger = appLogger;6 m. _+ p+ Q8 u7 M& z' }# J
Memory.defaultHeapSize = 0x8192;   
' Z" b1 I# p9 P9 KIdle.idleFxns[0] = "&LEDStatus";( K3 m' U1 A; a! l  U
Cache.initSize.l2Size = Cache.L2Size_32K;4 R: D8 y1 R9 W8 A
0 [3 {6 A& ~  h1 i& J
回复 支持 反对

使用道具 举报

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 */
2 x+ N3 W4 H9 a2 Q* Pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 I, \& \# O# e. e) b+ o7 O) v2 T
var heapMemParams = new HeapMem.Params();
- d, l  h& }' k! z1 j+ o7 |: r/ Z3 d, lheapMemParams.size = 0x4000;4 g  g* J5 E6 e* P. B6 D
, n% l4 n. w* i6 T" K
var Memory = xdc.useModule('xdc.runtime.Memory');) w& F) F$ V! j- n
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: E. J- A4 H& K2 O/ g' p/ c7 q

) g5 \' k. `. G9 j我大约calloc  每次共计大小为5K*16bits,
+ s  b2 T! k3 }* }2 `( Q1 d而默认配置才0x4000、需要改大。5 r: ?* A! P4 k
: N9 Z3 c' D' k. l$ y; h3 P+ L
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */+ K9 Z; j1 Z# Q3 }
Program.heap = 0;
4 C$ m0 k6 @7 Q7 o7 lProgram.argSize = 100;  /* minimum size */5 k: v' _$ Z  m$ ?4 f, x
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-18 17:20 , Processed in 0.042495 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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