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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
- F7 r; o' C  X2 K  z" x
4 M. H4 W' Y& u/ L    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: }2 k' Z% {2 j3 |2 E* n5 T" ?  D  R; F: @* t, F; J
其他程序段。。。。。
. E+ [2 [4 c# _. s1 }8 t
9 G& a8 r% y) M1 l/ @0 ?   free(x_d);
6 C% B+ ?" v9 M  O5 {5 Z* ^$ i1 c. f- g: F0 d" H, a* M: t
使用DSP侧单独调试功能,验证动态申请没有问题,8 S, O5 ^( k) K* V. S9 X0 X8 j
& z2 K. ?8 ^4 F% ]6 `4 ^8 J
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, b& ^$ Z5 N, i, k% Q7 A
$ y' {0 |: |% N9 i# k2 x- l

. A2 Z" a4 f5 l. b. O
$ Z* K1 d- t( X( v- }1 b( W' f4 m0 L: Y0 v. @+ X

& n6 Z& l: N/ ~* i) Q
5 o, s# r9 k: K! p( m) W2 r
9 J' _  t9 f3 ^6 s3 E! W2 \( n- T5 x

  Z+ [! D& j) F& F+ A! H: C5 A7 M( a0 w, e
分享到:  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 */
' l. P- k& s# HProgram.heap = 0;! J6 H6 o0 B5 B2 Q9 T/ ^9 j' [  Y) ~2 s
Program.argSize = 100;  /* minimum size */
/ ?% y0 m+ J8 A2 N/ b  [. wProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */% O7 l8 e6 T" v: y9 w1 Y8 N
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: I: T+ ^" H3 s- B" @( O+ f
var heapMemParams = new HeapMem.Params();1 I! D" ~0 `# |* J$ y+ c5 _
heapMemParams.size = 0x4000;4 I& j9 K- ~7 _4 @( y6 ]8 B
6 W$ d' }0 w. F( B. x2 h
var Memory = xdc.useModule('xdc.runtime.Memory');2 v7 V, |5 T8 E* l" o; ]0 a8 B' U
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( Y0 ]0 D) d+ }6 O  ^
6 ~9 f! {3 V& K* e+ P! v% p$ f
我大约calloc  每次共计大小为5K*16bits,! A) q5 ~( @& w+ I) e( G* r. ]! M2 `$ |
而默认配置才0x4000、需要改大。
% ~' p8 E0 g1 ~6 Z
+ O2 y4 W5 `, _& _9 O* o0 F0 l7 t
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
" q* R+ x& k/ x我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- p+ X3 E; @; Q2 }. ^- r
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)% h" T7 K: B# i2 m( t1 ^# s( f6 s

) D! O1 ~% K# `% Y$ O是不是需要在DSP.CFG中进行配置. e! s, \. m+ N2 z! j( D
我现在的配置为
7 @! z' X/ ~8 {6 R9 P$ j9 M, u6 ~# @" Z4 [4 W
/*
( I+ B0 a8 o) _) v0 t *  ======== Operating System Configuration ========& g! k: P! X% x; @4 l/ n
*/
3 _8 W- {) x) v- z, B. }, f% g; k: \5 E3 V8 t
/* no rts heap */
2 C0 {  `/ z: w; Q! T- l0 z9 qProgram.heap = 0;
+ a$ f7 j; {1 oProgram.argSize = 100;  /* minimum size */# X9 z# S7 n& p' z! }) P) P6 _/ w
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
  ~! V/ g1 I" W8 ]
, [" x- J& W7 z0 P3 J8 D: E+ |9 c* b/* create a default heap */
, X$ I1 L; V; e# m' B# ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( _# ?: @1 z; f8 Kvar heapMemParams = new HeapMem.Params();
7 v% M! Z: \) J4 D. _) S5 c0 \heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
2 |9 y5 A7 L& Q# W2 e1 U+ d3 H3 a$ @, @: M8 a
var Memory = xdc.useModule('xdc.runtime.Memory');
; ^. u* Y: V. d& ^- [5 g$ PMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, [, U& X% q! [9 c8 m, M" \' \2 J" |" m
/* configure System module */
0 z7 M% L6 m3 ?6 g$ F. o; svar SysMin = xdc.useModule('xdc.runtime.SysMin');5 }7 X' A* V9 {& D9 x* b+ Y, N
SysMin.bufSize = 0x1000;: G6 R2 o6 _% r) x8 W
SysMin.flushAtExit = false;4 v( v# i7 D2 K! X7 J- a7 j
% Y# m, w- k2 W/ X
var System = xdc.useModule('xdc.runtime.System');
$ e  M8 O, m  c4 K8 y% KSystem.SupportProxy = SysMin;. S0 M8 `: V9 p
' @. L* Z" K+ u0 S. E' O
/* configure SysBios to use the lower half of Timer 1 */# Z+ u' X) G+ E7 i! [3 A: x
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( o' M& U4 T; y4 I- v
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
2 k: h' J( ~1 ?/ UTimer.timerSettings[1].master = true;
$ j+ z$ R' R% h( \+ VTimer.defaultHalf = Timer.Half_LOWER;" T: |/ x4 z3 a! M  A$ Q. S
Clock.timerId = 1;3 x) G! d, A0 I% o3 f; P1 u
; t9 q- @% e5 m

- _2 K) K7 |! s; ?/*
0 G9 ]$ b. Z/ F5 }1 ^7 B *  ======== Miscellaneous Configuration ========
6 E3 b: p" V5 w3 { */
$ Q8 v: }2 A2 u* x; b
7 {# v- U/ V$ ~/* set default diags mask */- _( s& c. C- m' a' P0 R7 d
var Diags = xdc.useModule('xdc.runtime.Diags');
; \- Z( `6 f4 j; A3 Jvar Defaults = xdc.useModule('xdc.runtime.Defaults');
' j8 s8 N2 X5 K5 M2 k
# _. t) r$ s, i9 g- y8 aDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
3 P4 o8 T2 x) p& ?! f4 D/ bDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) @! U3 _# Z$ q+ F+ ^Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;3 {  M# ]0 g- g3 j% o
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */- r3 i& [) ^  y3 Q$ _3 o3 ^# E6 B
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */. ?5 }3 s9 N# r! D
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
% D; M  D) V7 A4 e# x4 j. g& ^Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 K0 U$ ?' l, u$ a& K6 D4 A9 ~) ZDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;' S! v* K! c9 _/ T8 {5 R. Q9 |
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
" W& D& t. c  u1 SDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 W; m8 q3 X1 Q- D- k- E) f! O
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
, a' K1 t: E# ADefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
. Z4 S+ U; s/ pDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 ~! [- l+ K# |' F6 Y; @5 @
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 u$ F1 q( F( {: V* h8 e
& c. x/ v" [3 n( j6 a
/* override diags mask for selected modules */) ~7 \9 _% S2 T+ H  D- m. l
xdc.useModule('xdc.runtime.Main');
5 S) q; A# [. P+ o) K# PDiags.setMaskMeta($ h: I6 O. J5 h8 l5 }7 U
    "xdc.runtime.Main",
4 ]- U! M4 G" j    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ }) t- [; ~3 p- S/ b. ?5 _
    Diags.RUNTIME_ON
6 B0 I$ u: m+ ~% \- @);
1 v0 X! B2 M5 d, u
: K0 q, e9 p' v$ G$ h6 pvar Registry = xdc.useModule('xdc.runtime.Registry');
' e. J5 b4 h% _: ^' [Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
9 [5 R  h# b0 sRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 V/ o& ]% ]" i! {
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
* @$ ~# K" H8 e  ~0 r3 URegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;& c) W% a  H9 `' p! W& X
/ A! E* F; ^6 k$ A+ B
/* create a logger instance */
8 ?2 X. l" @0 ]) j( avar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 h) |7 }, v0 s2 T3 w
var loggerBufP = new LoggerBuf.Params();
* n! Y( x7 h- @% T' BloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */$ [; B/ @, D7 B
loggerBufP.bufType = LoggerBuf.BufType_FIXED;$ s7 Q, u9 Q2 g1 D2 o
" ]8 @  y9 t2 H* K6 J
var appLogger = LoggerBuf.create(loggerBufP);
. d( [: S; L0 z- gappLogger.instance.name = "AppLog_Core1";* K/ R0 b* N3 ]  P5 i
Defaults.common$.logger = appLogger;
. p* p" k$ T+ K2 ZMemory.defaultHeapSize = 0x8192;   
% r6 d5 m/ k9 h1 AIdle.idleFxns[0] = "&LEDStatus";
2 b+ C: z. ]4 RCache.initSize.l2Size = Cache.L2Size_32K;( s; _/ z$ b/ s0 @- U/ r

% v/ c0 Y" V0 U' i* a( T* {
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-3 09:40 , Processed in 0.041615 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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