关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构1 H& T% t+ l* X

4 p) U+ q3 d0 k# y4 J# P& |. P) Q    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2560 ]: @0 w2 W8 H. n4 R( d% R. Z
& y+ G& r) X. k2 Y9 n
其他程序段。。。。。* [& U% j3 T7 a9 }! X" q
2 `- r  L; N6 J7 K% Y8 W
   free(x_d);+ \) l$ P$ b" F3 y: {# U# @

) w: P# |5 J1 d9 m8 M# q5 _使用DSP侧单独调试功能,验证动态申请没有问题,1 S9 G: e# C$ {) G% b( Q1 R+ N6 K

" y" F: c! s1 t6 A# P$ L( |% U+ A' g$ x但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。7 @2 O/ J. |6 `$ q! t! z/ d: N

7 A- l8 i" d. r' P( F+ G' i8 r  ~& B- l2 C: y; e& L) R
- @$ Z# m) G% b# u2 U9 E- q3 ~

1 G6 y  l2 J% A, y
9 Y3 `6 u; L2 t  R6 i; |7 ^( e6 t! B. v+ V+ c6 }3 @; B+ ^
4 ~  ?- Y% s( b6 E# @/ j

7 `/ z/ \* }. Z; Q9 A9 \. g$ y) D3 b- W; c. A
, ^* v( @. e# W, o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
" E1 J1 I" N0 E# S$ tProgram.heap = 0;
  [, H2 l8 K6 V# A* gProgram.argSize = 100;  /* minimum size */
, G8 x8 K2 U$ _' n/ f8 C5 o( k$ f/ GProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
, w4 F! T; M( r* E% b+ kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ o' J- F0 W, A+ N) j- ~# Bvar heapMemParams = new HeapMem.Params();
6 U8 r$ b" L6 a, wheapMemParams.size = 0x4000;* Q9 H2 v" z. ]" S7 o

  X( x0 I- @& g  H0 d2 W1 c! A4 V" Gvar Memory = xdc.useModule('xdc.runtime.Memory');
9 ~, Z/ S: q0 q6 L7 r/ H+ _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 S' H, G8 r, v  Z5 N/ K

. t8 R2 z1 D% x: z我大约calloc  每次共计大小为5K*16bits,
" ~  h/ T0 S5 _而默认配置才0x4000、需要改大。0 k* ]7 z4 t7 B
/ ]0 u$ E' g2 M; u$ n
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
1 D  H& ?- o# d& p. q/ l  `我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
. r: S2 u3 q" |(不过疑惑的是,为何单独DSP仿真就没有问题呢?)% u" ]6 ]* s; ?: n3 I

% g6 k5 W0 v; E7 W是不是需要在DSP.CFG中进行配置# f4 x  P4 G! N3 r1 M6 \3 F
我现在的配置为; }- R. V1 l/ ?. l6 s1 k$ U
7 N% c% n& l9 O$ r0 I" F( S
/*
; G; ], i7 C# D# m* P *  ======== Operating System Configuration ========9 i- ^! E) W& P2 l! z
*/
( {8 F2 v+ W  W; M$ z3 w# Y4 H) ?/ D" w+ b, H+ t3 _5 v2 o/ b
/* no rts heap */( s" s7 I+ t1 U
Program.heap = 0;
1 P' ^9 m( @, i2 U+ W: VProgram.argSize = 100;  /* minimum size */
% T& M# f/ D# y1 Q, L" UProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' h5 I1 |1 p$ i- B- p
0 o- n2 h9 n7 u! x8 u
/* create a default heap */; X2 L0 |+ p6 C$ @+ G* Y- ^- P
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 ?& [4 Q% M. U3 \1 K7 Qvar heapMemParams = new HeapMem.Params();
& v9 x( p- m9 y% J+ PheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大$ V% K1 [- k& r1 ]; e" K

' l$ H2 k: {5 c7 m/ u+ Q$ {) t
var Memory = xdc.useModule('xdc.runtime.Memory');
0 j+ {0 G; m3 s7 A* c8 b$ IMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
" ~4 o! V3 M5 q$ J
8 s- f. w: `, |" R+ B/* configure System module */
' t% Z+ L! U. l- ^var SysMin = xdc.useModule('xdc.runtime.SysMin');3 |0 }) c& P1 g3 ?3 }
SysMin.bufSize = 0x1000;
: ~( E" h2 r3 x5 g( S9 hSysMin.flushAtExit = false;
, G( n! `; v! L. N' Y; _. T0 Z( }7 t# |- r) _
var System = xdc.useModule('xdc.runtime.System');" e! {0 Y2 V* z6 o2 m
System.SupportProxy = SysMin;/ }. Q$ T- `5 L1 O+ K
3 e0 c2 ?% E! F) t
/* configure SysBios to use the lower half of Timer 1 */
0 d" c! f, A3 j6 {* E6 l, [var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
" i) b7 i- x' R, _var Clock = xdc.useModule('ti.sysbios.knl.Clock');9 `1 q, e2 g4 j  n) x  m* }
Timer.timerSettings[1].master = true;
  p' K2 q* S* b3 P' YTimer.defaultHalf = Timer.Half_LOWER;8 D! v0 j2 {; _# }% m8 N  J
Clock.timerId = 1;6 y+ S6 I+ y, _9 X& ]. F4 @0 L
$ N$ c6 ]2 f7 |" ]4 O

9 O5 V4 V) M- P, y/*) I4 q5 q% Q7 w8 r2 I, v
*  ======== Miscellaneous Configuration ========
3 j' u2 \  R) i$ l */
) f  e: |! j% S7 ~; W, B& b1 `7 C% B3 e8 r( c5 w9 K
/* set default diags mask */1 \+ v5 k* t9 w7 r( I
var Diags = xdc.useModule('xdc.runtime.Diags');
/ U7 `7 ^' r  P6 Y/ Q$ O2 D; c& Jvar Defaults = xdc.useModule('xdc.runtime.Defaults');8 ]. V7 s+ j, \/ @' N, g7 N! X
# H4 R2 ^+ C$ g, h( w, o
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* l, ^% f! J  I; g
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& M2 Y3 ?# l2 b5 @. KDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* P. ~! O$ s* ?  L) l3 d, a) JDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */: {: z$ [! Z, N6 n1 t  y# j
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
* L1 s- r3 J2 Z3 D9 e/ W( i6 P6 }Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;1 S6 L) y1 ~5 t; e9 B5 j( w
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
) t% \5 L) U3 X, J2 }5 e$ m7 ADefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;; p' u! G" U% Q0 O+ j6 s% H( E
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
9 u( I4 e# F. u; H; qDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
0 p/ G* ?1 K& x% }2 {Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 n& M4 C# A6 }, l
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;' x' n! L3 L3 a0 y" G
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. T+ |- y: n/ g7 d' W, Q2 \5 s
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;+ _# a2 h) Y% @9 v9 g7 q" [' e
2 O0 |. ]$ l' [/ s  ?. Z
/* override diags mask for selected modules */
3 h) t1 [0 m& D+ L1 f0 d# V. F9 pxdc.useModule('xdc.runtime.Main');
. c$ |! B; [* J4 FDiags.setMaskMeta(3 \6 Z0 p9 \1 h! H7 G
    "xdc.runtime.Main",
1 C, g. Z; u1 L( _3 p    Diags.ENTRY | Diags.EXIT | Diags.INFO,
/ x' t9 }9 N( f4 o1 L8 }    Diags.RUNTIME_ON
) n" P! K& _3 N+ a);! }: H/ |+ P8 [1 u5 f$ [

3 l. @* l3 Q* W& t" N% mvar Registry = xdc.useModule('xdc.runtime.Registry');1 \5 A) F0 {$ a4 o5 X/ ~2 l( R& g2 Y0 ~
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* Y) R7 {6 s- T1 {" S- X
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
4 m: |- s8 m: ~) V5 |Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;1 e; r& M( {$ i8 E" \
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
4 }: g8 P4 U5 I; w. `& ]
, j; o  Y; `. {  k. A# F/* create a logger instance */; f; J; o7 ]! J+ O' k: M9 N9 e2 {
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');8 }3 I# C$ n8 J8 Y1 E
var loggerBufP = new LoggerBuf.Params();1 N: {; C. U$ a( y% T; ^2 a3 Z  O
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */  p- X6 S1 T6 m8 a* q: q
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
1 i6 n2 f; {& H9 D- \$ B3 ^
9 F# I; |# p" I1 F' Bvar appLogger = LoggerBuf.create(loggerBufP);& t4 ^1 m0 w. G) K+ L5 V. z$ F* T
appLogger.instance.name = "AppLog_Core1";4 o3 e% A1 }1 o! q
Defaults.common$.logger = appLogger;# Y- Q: [6 z  |  [
Memory.defaultHeapSize = 0x8192;    % }5 `" U4 `7 U$ Z& C
Idle.idleFxns[0] = "&LEDStatus";/ N) n% h" N* A. J0 }
Cache.initSize.l2Size = Cache.L2Size_32K;0 t" P( t% }4 X# t9 {

+ i& z. }4 |2 ]  a
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-2 08:21 , Processed in 0.041376 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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