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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
$ o' r4 [- G" I0 U- a1 S  a: t. j. l
$ y% F9 u% }& j0 f. w4 W) P    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256: Y+ P0 ?3 f; E' N8 b+ O2 P, L

1 w: O( J0 T3 J% T其他程序段。。。。。
3 D7 Q  n7 |5 f " A! a9 J6 w" A$ U6 Q6 f
   free(x_d);  e4 o: ~% s* w* J  X
6 f, `+ e9 [4 H( b" |: \) X
使用DSP侧单独调试功能,验证动态申请没有问题,
" E1 ^& X: z- v5 Y2 W, @: w1 U5 m9 ]1 i0 g& y
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 m* s+ Q' l. C3 v. U, N

% i9 F+ T) |5 |3 F: N) J0 @
1 v. k1 N& ~2 h& P' l+ ^6 s! u: A! q$ Y9 F

' [1 A% u9 c/ A: v+ ^* h: L! B3 m0 x) @

. d' x, i5 y0 M8 z; o' C
$ `, r" n/ B! X- \  ?8 p5 |% {, i
$ J! k4 m) R. F2 [9 }! |8 c. B
% y8 t4 k  C) ^; G1 |4 L1 y* s+ P; T, }' I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
2 U# j4 t4 a3 }3 s6 m  L/ @我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下" g% O( S6 d0 c7 k: B5 h
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
: J: e: ]: m" U: c
* y6 q* o2 P* b: U$ w
是不是需要在DSP.CFG中进行配置
2 `3 K& R; y( b: w' _' C) r1 B我现在的配置为
. ?4 ?6 N' U. m& X
$ ]9 m. P7 o# [; L" |$ j4 y/*5 J* @# }6 p8 m3 g  r/ m
*  ======== Operating System Configuration ========
% k9 k& r5 d0 u! j. ^ */% }! l$ S; N, e4 _' C4 v
+ r2 U$ X) u2 O' n" t2 R
/* no rts heap */
2 U5 V2 ~. q, a  \# o/ w# M7 VProgram.heap = 0;
2 k6 _2 C* D3 Y3 C: `! L! LProgram.argSize = 100;  /* minimum size */
* L. a& n3 X. H4 D0 i! {. EProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
; m9 @. ]  L* h8 `3 u8 T! {; [7 B4 N, |
/* create a default heap */
- w8 }7 w, p+ J7 t# T! b# Tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ {* T# [4 S# s1 B6 {$ O' m; d
var heapMemParams = new HeapMem.Params();
! o9 m2 D$ f% J; [4 HheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& ?$ H& I1 M! \' [7 u3 v8 w

9 m% y6 ~- h9 }) @) j
var Memory = xdc.useModule('xdc.runtime.Memory');% s8 }3 G" v9 ?2 q5 \+ E" F
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);! u8 u6 u2 S5 x* _* @8 ~% T
' ^, J+ m5 P+ B! @# b; I
/* configure System module */
7 e! x0 f8 H) [1 c7 K9 nvar SysMin = xdc.useModule('xdc.runtime.SysMin');
1 B- N, I7 i& v2 P$ DSysMin.bufSize = 0x1000;
, l, e4 U( O& u) h; b) V9 ISysMin.flushAtExit = false;9 q$ }8 A1 ^. |( B
, j5 c! ]# ?% X
var System = xdc.useModule('xdc.runtime.System');+ _! y) v- T9 f0 A! z) d
System.SupportProxy = SysMin;
# O. ~9 ~# W* s8 P3 {  m+ z5 E& t
2 ?# s6 X5 R/ K+ v: L/* configure SysBios to use the lower half of Timer 1 */: {& x- M) `4 ~# z1 [
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');) L$ A  ?% k  x- I5 L# z% L
var Clock = xdc.useModule('ti.sysbios.knl.Clock');' v2 ^4 r: U' u/ r7 ]) g2 }! R* D
Timer.timerSettings[1].master = true;6 }/ O0 }$ F& }6 [
Timer.defaultHalf = Timer.Half_LOWER;0 j8 ]" o% M" C% q) o. S7 u& J
Clock.timerId = 1;
, @. }, b3 o( G& m' u5 w4 Z8 u, C8 e1 Q9 H& H

" M" O, o  k3 S8 l5 t8 M' V3 J/*% R/ X" ?6 L$ o: E8 M- O1 y7 o/ ^  y
*  ======== Miscellaneous Configuration ========2 m8 f0 ~0 N4 t+ F
*/8 \9 ]0 y* i) B/ c
1 G* O; `. Z' Z+ e  R
/* set default diags mask */
/ R0 W+ g+ N2 ~4 t1 N4 Fvar Diags = xdc.useModule('xdc.runtime.Diags');
( h% S( y* W4 K: e6 J5 M1 Yvar Defaults = xdc.useModule('xdc.runtime.Defaults');
1 _  T* u8 j9 d4 Z( W' i$ Z4 j/ Y6 c8 A& _7 r
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
6 Q- p! k1 K% P, d1 `/ o* ZDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
% @& z( U4 \2 d" F- |2 sDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
" j2 d8 L# [2 e7 u5 [1 hDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
% q8 [5 V1 U& p6 gDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! u, O2 ]; s' ?0 E/ B3 @5 j
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 {4 M# N1 n# O
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
2 _7 ^& g0 W' u- jDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;" ]4 @6 \6 n' d4 E
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
/ O6 C: g4 ~2 E2 E) G: UDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;2 ]0 _# |  d- H. p  |! @9 z
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;, V# H; @4 l9 g0 J( u
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;+ B% _0 A* A7 @4 U
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;" c( g! w1 t0 [- ]" h" F, H
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 x% b: J0 D" j2 A, j; R
% u) B2 W0 A4 m- x. ~1 I; p3 t' P
/* override diags mask for selected modules */
2 [) h! o" Z4 N) A- `3 H( K- K3 kxdc.useModule('xdc.runtime.Main');1 c7 V- p- {6 y& G
Diags.setMaskMeta(7 z5 v6 u8 U) g! U; i# ?
    "xdc.runtime.Main",
8 T9 a# `* Q. R7 J0 K    Diags.ENTRY | Diags.EXIT | Diags.INFO,
, K* A  I/ M% L    Diags.RUNTIME_ON
0 m  G$ P7 s, e( j);
6 X  `2 ]/ U6 N  c  `# T; J& C& o1 F' i2 U
var Registry = xdc.useModule('xdc.runtime.Registry');0 o* @$ B. h" f' g; E5 ?) m
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
$ j0 h0 @$ U/ k8 kRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! H& g; U/ q$ t
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;' ?" O1 y) `; d, P4 R1 ^
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) Q' G( R. z4 Z" _) e
# M6 ?0 k* S/ h, L# F/* create a logger instance */% I2 ~: l$ n; |: U% ~
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');- ]' M3 j$ z4 o8 Q8 S: q2 [
var loggerBufP = new LoggerBuf.Params();0 r, M7 `6 A2 s/ k& D! e( h2 Q
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 a$ S  G5 E0 F" U$ G6 q2 L
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
$ v' ^( p9 Q  F% L: K, W, G4 }6 Z) W- t$ _! I
var appLogger = LoggerBuf.create(loggerBufP);
- E: N6 X. m7 x) K) k7 t2 g7 _3 I1 xappLogger.instance.name = "AppLog_Core1";
( u% s6 a, Z$ [- cDefaults.common$.logger = appLogger;
. v- h. H0 G4 h" y' i3 Z: PMemory.defaultHeapSize = 0x8192;    " ]& ~( L& b) L+ g. t1 R% e* E0 a
Idle.idleFxns[0] = "&LEDStatus";3 V; T: e: D5 B! @3 }
Cache.initSize.l2Size = Cache.L2Size_32K;, |9 e5 L) c: H! E  h7 @& g
; K* s0 p/ E/ T8 R" W& v9 n
回复 支持 反对

使用道具 举报

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 */0 Z# |' T6 |6 R+ Z: ^
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- W3 m7 O2 X2 s# P' Gvar heapMemParams = new HeapMem.Params();# ^7 @& _* p- E8 ]
heapMemParams.size = 0x4000;  n8 n8 n! ~& t' R7 m8 A9 z0 _* v+ O& P& h

0 V6 q4 h( q& a5 Vvar Memory = xdc.useModule('xdc.runtime.Memory');
( I+ R! S" K- z7 `  iMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 V( v; q9 d# m7 V0 ]# |) a' m1 b0 L3 {# g0 i; \5 s
我大约calloc  每次共计大小为5K*16bits,
! G" @1 R5 g( H! V7 q) f+ y而默认配置才0x4000、需要改大。. G' N4 |% b! x' ~1 H1 T& y, W9 A
0 o1 ]8 }' w. `/ {
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */6 h& W/ e( c! p( W) [6 a
Program.heap = 0;) z4 s4 y- ^, z' t4 n2 Q
Program.argSize = 100;  /* minimum size */, {3 g- W* V8 F0 w2 d
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-3 01:40 , Processed in 0.041350 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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