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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
- L0 O/ @( ^% `, y1 E
0 {- K! s$ g; ~" N0 P    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
" A/ I- U/ u  f
# J( x7 _, ~6 x- ~其他程序段。。。。。+ |2 |' Q9 g5 @8 S( M. l0 p
0 v4 k5 A  _0 a' u- t
   free(x_d);9 {9 l* u1 e& n1 C0 `
2 k' V, v3 h' c) U( c: s+ T
使用DSP侧单独调试功能,验证动态申请没有问题,
7 e0 D4 y( H% Y5 b  v2 a+ J8 p5 q. t( L1 D+ r
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
) m4 O1 M4 |* |& f

- D$ p) j8 B' `6 b8 e5 j( G, s9 ]6 j1 u& n* P8 o2 `* E( U# N
+ W5 t9 k  h7 f9 F4 O" i9 [5 q3 c
, B+ \# w9 y4 x) M+ g6 A4 G

+ }5 G# _. G! d" b; t( }$ |$ B$ W4 q/ N. c' u. C6 d5 g$ u
; G; y' t& G4 p
  V1 q. U  ]3 h$ k3 d

( f$ Y% i6 C& b. ~- W9 z. A5 q& m; I$ m: x( q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明' A* y- G* B5 h# q9 u7 n
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
) S$ o" }- D( I# S(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 Q2 M1 R$ W9 K& Q; @
3 P; m: ?+ Q- L5 R- ?- J. \
是不是需要在DSP.CFG中进行配置
/ X) C- D+ j& P1 q) `$ ~我现在的配置为
9 P7 d) `- u0 @; a% ?7 R( \) R% }' K. ~
/*
4 b/ o1 Q4 G, y/ {: G4 n *  ======== Operating System Configuration ========
& i7 ^7 H& f/ G  t$ G; H */
7 u( _9 B6 f6 J
; m! V% t0 k! \" C+ j! \/* no rts heap */
1 X$ ^9 Y( p$ Z- O  XProgram.heap = 0;
0 a2 v7 B9 w$ E+ rProgram.argSize = 100;  /* minimum size */# p; v) S  ?' l0 C  p9 M' S
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大0 M* h0 I- Y& i* U+ U
0 W) g2 j6 t0 G" a
/* create a default heap */
" z. g! V/ k# M9 N' ?var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( _* }& O3 O- {" G2 T4 |9 J" pvar heapMemParams = new HeapMem.Params();
9 S& }" ]& L; n1 w$ u9 k, WheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
- L$ v) Z& L; x, `
. L" e6 w/ ?4 S
var Memory = xdc.useModule('xdc.runtime.Memory');
+ K$ z7 H9 u& `8 u1 C0 z; uMemory.defaultHeapInstance = HeapMem.create(heapMemParams);9 C  H, }/ Y3 h; p

2 a) E: J7 s6 h( A1 v8 {/ a/* configure System module */
5 \% B) Z- s7 Z# H4 G4 f( U) Avar SysMin = xdc.useModule('xdc.runtime.SysMin');& u6 r0 u5 m3 a7 Y8 K* L& _8 w% A. M, s
SysMin.bufSize = 0x1000;0 _0 q$ d, ?3 Y' w& ^" F
SysMin.flushAtExit = false;
+ l) q1 |' v9 d6 Y! t- v! e; \0 C0 `, s# @; k) P: Z6 @4 V
var System = xdc.useModule('xdc.runtime.System');& I0 k8 T5 w4 B8 e6 a
System.SupportProxy = SysMin;; i1 a% W9 c- J! P2 X/ _
/ k4 M/ _2 D' Q  ?, H
/* configure SysBios to use the lower half of Timer 1 */; ?0 c4 Z! y0 H$ a8 o2 m1 e& ^3 [
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ C/ l( [8 r( n" \7 r, E# l& Dvar Clock = xdc.useModule('ti.sysbios.knl.Clock');! e2 O/ U" y" a% R
Timer.timerSettings[1].master = true;) N  d- @9 a# N* N- V, y
Timer.defaultHalf = Timer.Half_LOWER;
" [7 B! r* ?4 G" N4 M- ~$ u$ ]/ `Clock.timerId = 1;/ w& L6 Z2 H! s% g; D3 H  _# F

; l, I3 n, H5 n2 ~. {0 f, P% O) \& W
# _% w4 L* t% K% y/*2 D% Q+ _4 V' K$ {+ J
*  ======== Miscellaneous Configuration ========, ~! K$ P- r; I% Z) J( R- O0 N
*/
, J, U5 M0 h8 ]) R0 z" `" h3 X% Y- T. Z8 t- E; L1 P- Y
/* set default diags mask */
/ f/ }7 K# Z8 k* x2 Qvar Diags = xdc.useModule('xdc.runtime.Diags');
2 N6 c; u: h: \  M3 Bvar Defaults = xdc.useModule('xdc.runtime.Defaults');
/ e) J0 v# h6 n# p1 }" D
+ \+ `, r) E( @( I7 E' U' h! VDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, E" R* m: a. k
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
; f, ]; F. F( r( hDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
" n1 o/ j+ K- S3 iDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
9 k$ \" x% ?' q* oDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 l; V3 w; ?8 L' y& g. ]% f
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
# g7 K! {0 Z# QDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;1 A, B% s  T7 C( t8 U
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; ]7 G6 _. s$ F8 w- M0 G8 UDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;: i2 i: n  E( D/ `' N# ~+ h
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;! c' [6 ?- {' d
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
- z/ y; \. ^, g- NDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;' E( K2 z& U& G' o! F
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
# n; p/ H0 X; [8 \" l1 m% z' sDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
' P+ j/ z' ?4 v8 ^% b4 O+ K5 f8 H: h
2 Z  \% v5 p& L$ G0 d) N! T/* override diags mask for selected modules */
" s2 Y. d3 \% D3 n% h  f. D8 j1 t0 y0 ?xdc.useModule('xdc.runtime.Main');
% R4 L3 L, ?& Q' G" y7 s8 V: sDiags.setMaskMeta(- h+ x6 A0 l8 }8 ~/ @1 t5 K. j
    "xdc.runtime.Main",
+ H: q: I2 E9 \+ r/ C    Diags.ENTRY | Diags.EXIT | Diags.INFO,7 X0 }$ Y# a- y) h6 W* x- B
    Diags.RUNTIME_ON7 S5 x- @- e' P# E" j  c
);
8 P' z$ O: ]$ N( x( _; @: T0 f6 l' Q; q; ^5 B% K
var Registry = xdc.useModule('xdc.runtime.Registry');
) _) C3 O& I* \; h% h% |0 XRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;- }5 z2 [# X* r& q
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;8 d% P  U& U! z9 ~
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;- w7 t& j) Q* ]; x& {, k* t
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;# d4 ?- M5 K+ k1 r

( W0 C( ]3 E' _/ O/ t7 K1 z/* create a logger instance */3 L) p" t7 w5 Q! M( M
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');% }% ^! u' R3 D0 D% m$ E) G
var loggerBufP = new LoggerBuf.Params();/ H" d+ I. {9 S. {7 S
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
$ j; }0 M/ e! l" H7 ^loggerBufP.bufType = LoggerBuf.BufType_FIXED;7 z, ?- H- s. U4 O

, R+ x9 S% z; Evar appLogger = LoggerBuf.create(loggerBufP);; [5 e8 a( Z- ]9 u
appLogger.instance.name = "AppLog_Core1";
+ C3 m0 @6 o3 {, r6 [Defaults.common$.logger = appLogger;8 s/ M: c& x, R9 u
Memory.defaultHeapSize = 0x8192;    : x( \1 K% E: y; O
Idle.idleFxns[0] = "&LEDStatus";; R  [7 D! X% B3 K9 g
Cache.initSize.l2Size = Cache.L2Size_32K;
6 N2 z, g4 T3 b  M% H2 b# S' k, w
' o# K5 u9 n1 j4 ~
回复 支持 反对

使用道具 举报

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 */8 u. x- L- a' [
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# R* L$ @: A7 G" Q5 v5 B$ ~
var heapMemParams = new HeapMem.Params();
1 H  [; o1 F7 S) s( \+ mheapMemParams.size = 0x4000;1 R8 ?$ T2 |  ^& y
# ~+ V/ d. L1 u+ [, b8 |
var Memory = xdc.useModule('xdc.runtime.Memory');& H/ p7 i+ D) Z8 Z# e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);7 j( s) l, S4 c0 N3 c; v

8 u" _! _0 i& p4 |我大约calloc  每次共计大小为5K*16bits,
" f# i5 f: I$ X" A* C' X1 _) p而默认配置才0x4000、需要改大。
: n8 C, f7 g& f/ I- F# U& u9 _* c& R: k0 G5 j& L& W
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
" {1 y$ _2 N1 _) `Program.heap = 0;, _& }/ _. D2 q. i
Program.argSize = 100;  /* minimum size */
, H/ U  s. z% s; o2 ZProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-29 17:39 , Processed in 0.044601 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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