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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& n. `. q  D1 z% G; b. u
, x" W# X/ i0 f9 P- r! Q    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256) E+ U# \# x- _, O- q* M, \0 l0 p

8 l$ H8 o% E6 z& _" e! n其他程序段。。。。。
: c2 B; h& W+ o3 n' K, v / Z0 Y! W/ s9 R3 u6 A. s
   free(x_d);
( M5 p8 Y: E2 Q9 H7 K6 E0 F9 s) U/ i
使用DSP侧单独调试功能,验证动态申请没有问题,
2 x* U# o. {, B( D2 F/ K9 Q& [+ M. j* M" K( K4 q' @6 w. N, C  ?- u
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。& r" p6 k- v6 w& c
$ l* t  d5 I2 o9 G

! J. Q) \4 o" q! T
8 D# [6 E) k  y. ?5 b; L- J; {- t) b% o
$ p& S1 |# t. ?# B

/ w5 W7 D- @4 `1 ^
2 r& Y- v+ H0 Q6 X& W, ~7 K+ \) p7 @+ e9 G+ r8 Y

( x( n# d  J, Z+ H) ^( g1 k8 Z9 g) Q1 g3 ?7 r' K: Z6 Y- ^# Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明( h) u. l8 U, @4 t
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下5 Y7 C" D: {4 F# d
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)9 D- y! p5 Q% s# r# D. R1 n& U

# F) [3 c" [* f6 B4 v是不是需要在DSP.CFG中进行配置
! e- F( _0 E) B" b+ i# o" `我现在的配置为9 P" ^4 P' q3 w! d% o6 D

8 G3 ~' D. Q4 a% d  n) [4 u' P5 d/*( O' C3 ^! u5 k6 x9 \0 y
*  ======== Operating System Configuration ========
/ j5 ~, w" |, m2 M) X */
8 o/ }" r$ K5 L" F( i. ?3 o) R$ x
- z4 E2 n, f: m' w4 J) d* X8 k+ a/* no rts heap */
% k1 ~& \8 Z' q+ JProgram.heap = 0;
* q- j6 P4 a" ^2 \& sProgram.argSize = 100;  /* minimum size */
  L1 D; H, ^/ u4 Z. U1 Q' EProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大# h3 S& }! G3 V% s8 M$ k

* Z+ Q0 g3 K/ p$ k+ Q+ @  q& r0 }* \/* create a default heap */4 K$ u' O- g! k' G# E6 {
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' R, {% Y* S, ]var heapMemParams = new HeapMem.Params();9 b( }" C7 [! Z& |; C& S
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 N  b1 g, B& V1 C" G6 ~0 P+ [: F* ]1 c
var Memory = xdc.useModule('xdc.runtime.Memory');
; h! g  |  M0 v2 tMemory.defaultHeapInstance = HeapMem.create(heapMemParams);1 [) k, T: |4 |

/ Q2 N+ k5 [- K, h& Y* P; h! a/* configure System module */# ^2 o6 T: K, e
var SysMin = xdc.useModule('xdc.runtime.SysMin');
  y7 ?" @' p1 w/ N, V# MSysMin.bufSize = 0x1000;
# Y* o8 f1 X! X1 V$ ]$ MSysMin.flushAtExit = false;
8 ]% ^1 q1 }( h1 L7 T
3 Z: ^) ]& w5 O  G, y3 Jvar System = xdc.useModule('xdc.runtime.System');
6 P; d6 w$ d, z/ y  O: ^" C9 ~$ hSystem.SupportProxy = SysMin;: d, V7 F8 L" Z1 y7 l

% a& m0 O4 p" V5 D# O& N# m/* configure SysBios to use the lower half of Timer 1 */) b/ o' ~7 d% A
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
4 c0 j* T: V) J; fvar Clock = xdc.useModule('ti.sysbios.knl.Clock');+ R, p0 C) r% G
Timer.timerSettings[1].master = true;
/ o! E8 M0 x1 F: o8 l& kTimer.defaultHalf = Timer.Half_LOWER;
: {9 U1 a$ V2 [+ `+ oClock.timerId = 1;
" `. a, Q8 ]6 |+ D5 w1 Y! P1 ]0 O1 S+ U, _) Z* D3 J
0 o- B+ _9 R5 Z! m
/*
- e  }: e; Z; T *  ======== Miscellaneous Configuration ========% \2 a( `& \9 w
*/
: k2 z! D1 L. Y# A+ K' a* \6 I4 f6 H- }/ A; i- X
/* set default diags mask */3 r# b+ z2 v6 I2 g6 U; m; t1 z. \! B+ N
var Diags = xdc.useModule('xdc.runtime.Diags');
7 q  ~0 d+ ^. ~7 `$ v1 c/ fvar Defaults = xdc.useModule('xdc.runtime.Defaults');
5 d( [3 e. R1 H# b, C& V# t8 L! T' f& a2 u9 o& L8 e6 T
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) R8 p( z% ]1 B7 w* I* TDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
0 a: a* W7 V+ H4 B$ @) W1 T" NDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 O  [# P9 P/ X6 |' l9 EDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
$ n4 ~* p0 y) `) Y, q7 ^! y: ]; YDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
% U5 u! h2 w# RDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;* N" A" A  C/ U0 N' T9 T: Z# _
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;" [) Y% E1 ?2 E' ]  b1 m5 q; }9 A
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: U: F/ y, [/ t, f# MDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;6 I$ `. u: Q7 u$ V8 A  e: f
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
9 f# M7 L# |. E7 l4 F% H; f- h$ PDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 W. M2 A; d2 d$ X* \Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; t! X& c/ ]) j: v* x8 X; T
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
# N6 S% p8 `. V3 `# rDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
9 K9 l; ]% [% ^/ b! J8 d7 @7 t$ K& A$ R7 s: n8 _" h
/* override diags mask for selected modules */
+ C! t9 j8 v0 v- i% yxdc.useModule('xdc.runtime.Main');) M8 X+ c  O' D  [& ], U9 y
Diags.setMaskMeta(
2 l& {0 s. C( M" H% L, k& u2 f    "xdc.runtime.Main",
, r( b3 V6 Z' B& u" `5 I    Diags.ENTRY | Diags.EXIT | Diags.INFO,/ ?/ C" G! S( E: [' x( `% B
    Diags.RUNTIME_ON/ @! y/ R7 Z9 ]$ v
);
: b" J+ W& o9 g: g0 I3 s7 }% v8 ~3 P* i5 X1 a- M. C
var Registry = xdc.useModule('xdc.runtime.Registry');: ?$ Y: c7 m$ D
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;$ Q& ~" l6 U1 q0 A% N7 g
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
# G, J/ `3 p# \: M  iRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: ^2 Z, @. }, t5 \( `% dRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;2 K% F+ T8 h- w
5 C1 m, i* ]: f% K4 c5 W
/* create a logger instance */( Y# K0 U+ v0 C9 H% i
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
- g/ W& T( E7 F' Rvar loggerBufP = new LoggerBuf.Params();
6 q2 v! u. o: U9 g' RloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 m* \& @# ~: h" ?loggerBufP.bufType = LoggerBuf.BufType_FIXED;4 @% }7 E9 d# ?7 i! C) Q3 a- Z

" C0 z$ i& L3 W8 zvar appLogger = LoggerBuf.create(loggerBufP);! S5 g0 Y! c/ p7 W1 d& {
appLogger.instance.name = "AppLog_Core1";! w& Z% G: D2 A$ Y! a( q+ J
Defaults.common$.logger = appLogger;$ @2 Y0 w* X! G3 c6 D7 M, i; _
Memory.defaultHeapSize = 0x8192;      b2 h# N4 E3 S1 l. z% Q3 ~
Idle.idleFxns[0] = "&LEDStatus";* s* N# y! A$ k+ z0 v+ Q
Cache.initSize.l2Size = Cache.L2Size_32K;) W/ Z/ d: o2 e; l/ M( K3 f

7 H- O  }% N: `& L# B* C7 ]9 O6 p
回复 支持 反对

使用道具 举报

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 */
7 L) D* E6 e2 I$ B* G/ H9 Q  k! y! Ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* ]4 z1 x0 A2 q8 v) \; ~9 l# g. C' Z: o2 d6 svar heapMemParams = new HeapMem.Params();  A( E# l6 G# F
heapMemParams.size = 0x4000;: z! v& s; }# t( h
: w* c8 k+ z1 i3 K2 W$ @& C  a' P
var Memory = xdc.useModule('xdc.runtime.Memory');
% S$ E4 X4 @  m* {# @& E% y9 \! J7 cMemory.defaultHeapInstance = HeapMem.create(heapMemParams);+ J# V; A4 u" u* U* E

9 t( ^9 O/ M0 F* q* ?9 Z2 W5 c我大约calloc  每次共计大小为5K*16bits,% h0 ?; L. B. X2 W8 N0 p, q
而默认配置才0x4000、需要改大。5 Q; Z2 y8 Z, h

7 `2 Z0 E2 S. f9 V* [
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */3 F! \) ?. s6 H# E
Program.heap = 0;
; g& q# K- j) ~) x, m; aProgram.argSize = 100;  /* minimum size */
6 n3 a. ~& U$ JProgram.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 04:39 , Processed in 0.045864 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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