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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构" I- v+ k8 n* |+ g; F
4 [6 {( G2 ]: J
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
- k4 D. Z1 [; `+ ~, M& q& S! q5 k- W1 v
其他程序段。。。。。! v' q4 ]' }4 ^, o# d
* H) ~3 Y% O' M  N
   free(x_d);( L9 ?; c4 P' `2 B* G
: |8 p6 U6 h" k1 }8 B. O/ I
使用DSP侧单独调试功能,验证动态申请没有问题,
9 R* ~9 G6 z- Z; \  b  _# s( \4 ]$ j7 b! ]* m& ~0 r% u* S8 P: {
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。( y0 f. \$ o  a0 Q' S
7 T1 ?1 s) C" e$ H2 L
& l" b$ I# m+ q5 o' e

+ J1 B/ x1 I1 U( U; U. `/ F- u4 l/ X

6 `: L6 y% m+ L# W/ T2 s# a
# l3 m$ N% k0 Z
6 L7 `; m3 c" T6 ]2 K, n
8 k  _* m! c0 v( c0 P& i
6 w# A3 ?; R  S, C: P- k
  A) i! I, N% |7 Z; q! e* k  \
分享到:  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 */
) H) T0 x( B6 W/ Q. ]Program.heap = 0;4 j1 f( d# j8 D9 \2 \; N& g5 t3 N
Program.argSize = 100;  /* minimum size */
" N3 E( ]8 s# P0 l& V2 MProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */; Z6 Y" l) e% E+ a6 y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- \. @1 Z8 C0 F, qvar heapMemParams = new HeapMem.Params();& C* @/ x7 f( T
heapMemParams.size = 0x4000;7 o3 d1 m2 W7 j/ k) \( Y
5 a: H' X7 F# \6 F$ ^* g
var Memory = xdc.useModule('xdc.runtime.Memory');
4 q; o9 T: {& WMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
! ~- h. J( ]; E- X9 ^! n5 ?$ v, m$ y9 H$ C; V
我大约calloc  每次共计大小为5K*16bits,
+ c; F4 p4 L1 ~( G( w! Q4 o而默认配置才0x4000、需要改大。: Y6 {* K( }6 V+ k* w7 {

4 Q+ l# G; h$ Q& C9 t3 l
回复 支持 反对

使用道具 举报

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* l6 |) N; n2 x1 }
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! C+ q% C' N$ W6 s; |- `* Y& T
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
# b8 s1 ]5 C& `
" Q( M" J2 |5 h6 c% W
是不是需要在DSP.CFG中进行配置0 z& ]$ S0 P! {5 p3 c+ _0 ?' X
我现在的配置为
; L9 I4 S4 `% f' G( Q0 v, k7 `% R2 I% m) P" {
/*
3 R% n! O9 U7 y- q6 ]. \ *  ======== Operating System Configuration ========3 T1 S. o5 s, \# n' W
*/0 D! f) I( ~% j8 G) F2 ^
3 B2 X2 j9 \! v, r
/* no rts heap */& e0 b$ E2 L, s" }$ p/ Z8 q
Program.heap = 0;7 ?! k% K' p3 o8 X
Program.argSize = 100;  /* minimum size */+ l- c- X) d) v4 Y8 e( u8 K
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
( g! o% D! ]% d$ B* g% Q; S( s; {1 j. Z/ Z' n
/* create a default heap */, |8 n2 c9 y* X0 n
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ a- ^6 c+ X5 a3 n/ j6 M+ E2 p6 m! L4 g1 g
var heapMemParams = new HeapMem.Params();0 e& ]/ R0 Z9 ~; O
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大/ U. I4 ^/ t/ ?: E2 s% ]- ]
5 J6 l3 r2 N) _% p
var Memory = xdc.useModule('xdc.runtime.Memory');
7 j; J7 c4 Z6 y" O  e. wMemory.defaultHeapInstance = HeapMem.create(heapMemParams);' w; d4 o9 W+ l) G& d& I

0 {# `' f. v/ h/ W) f/* configure System module */
' R4 W* Y! |& s3 {- ~+ X# Lvar SysMin = xdc.useModule('xdc.runtime.SysMin');
/ {3 d: \: c6 ?* VSysMin.bufSize = 0x1000;8 ^% q7 g: @8 ~! {& V
SysMin.flushAtExit = false;
% j/ S, s) N8 l6 @. a. F. w
' S& D0 X" O$ o# M" N; Pvar System = xdc.useModule('xdc.runtime.System');
  C9 s+ m, h; B% M/ e! eSystem.SupportProxy = SysMin;
0 i0 f7 ^: X* [0 z9 h- S1 j! f
. s! i3 M- T* l2 Q+ a! H! T* _, v/* configure SysBios to use the lower half of Timer 1 */" Z/ T; B1 I* I
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 S5 O& |  q- J, y0 ~
var Clock = xdc.useModule('ti.sysbios.knl.Clock');; f' d3 V0 ^& p, ?# y7 V
Timer.timerSettings[1].master = true;
0 d- j% K2 I4 T5 b3 }Timer.defaultHalf = Timer.Half_LOWER;1 ^3 O9 i/ y3 }* \
Clock.timerId = 1;$ p! l9 E0 Y7 j' }

# L2 l6 V3 ~- _5 t2 G; t& ^
' ]" x- \. B1 a+ b/*
$ b' N# U7 S8 u2 F' X7 Y$ B  g4 a *  ======== Miscellaneous Configuration ========
& C; ~& Q# F* S- G9 \$ o */
) }+ K/ X6 l6 f0 T5 Z9 m
. ~* r7 x' E% X/* set default diags mask */7 K) G& O1 {, ]1 n* ?$ P
var Diags = xdc.useModule('xdc.runtime.Diags');
' F& C% r( w) k9 kvar Defaults = xdc.useModule('xdc.runtime.Defaults');
6 u: b6 I: \4 Q& A) i/ b" R0 x) f
) e& q1 h$ J! \: aDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, b+ ~' h% Z( G$ e- l. RDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
# L! w0 E& n( }Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;3 ^" u& P6 K! q
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
2 ~  z0 x; A( iDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
1 _- B: w" |7 w+ ~/ f! Q2 UDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  k/ z- H' b& l; m
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;8 c0 }$ ^1 q/ D3 X6 e7 _
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% q6 X, Y. ^: X, o$ C; b, h
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 G' c. I: b# I; i' k& b) g! `
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
# ~) G1 N6 m' S& e3 s5 H  bDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;+ c5 x2 b! o1 K! ~9 c
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 `. H7 k  f  W7 E/ s8 [
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! |1 a5 J! C) A& ]& v' S& E
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
( Z. F0 P4 Z1 v- l& J& x7 D" B
; K" N6 E/ e7 x- X( s/* override diags mask for selected modules */
( ]0 D( N8 r4 @0 u  n  N: ?xdc.useModule('xdc.runtime.Main');
! ?* E! E! R5 a0 p% B( Q* G0 N+ IDiags.setMaskMeta(
/ v& X6 k0 Z" R- q0 X    "xdc.runtime.Main",
1 q$ }: j- |9 I    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( u1 N, w& T9 e/ n# ^    Diags.RUNTIME_ON9 V$ z  t$ w9 Z& P; l, ^' D
);
1 P6 F, l- B* V3 h% U% p! a  w! ]% P. K/ Y3 Q& A1 [2 i
var Registry = xdc.useModule('xdc.runtime.Registry');
" r: }, }1 ?* g: m( jRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
0 F/ c* d0 A, g& R( d& }2 C* o4 z: S3 H/ g7 xRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; U# x5 u! y, g, U- r7 i8 FRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;& z/ X! D6 R, G, W, c! q1 u4 `9 f
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
! F. v, r3 o0 k" ^) |0 P4 g! T
8 o$ g! [* E! Q/* create a logger instance */
. F+ Z# v# k, N' b" M: ^, j) R6 Hvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
* _. _" G6 c- \4 M+ C1 c  ?var loggerBufP = new LoggerBuf.Params();
& |8 X; R5 v2 C& ~+ I3 J7 ~* HloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
. X1 Q! T- K0 {/ q2 v+ ologgerBufP.bufType = LoggerBuf.BufType_FIXED;
3 A2 T  }5 I& w8 x- S2 M5 ^/ j. N6 T
var appLogger = LoggerBuf.create(loggerBufP);  a! b5 w1 x; i1 a7 y# B2 L
appLogger.instance.name = "AppLog_Core1";
) I0 C/ W9 {: T% j! `Defaults.common$.logger = appLogger;
  t$ }* U: {- ?# [  q+ X* pMemory.defaultHeapSize = 0x8192;      o& u6 o6 w2 p2 ?7 W/ S$ r+ _$ N
Idle.idleFxns[0] = "&LEDStatus";1 V8 _" E5 ~* `  x/ L3 e6 ~
Cache.initSize.l2Size = Cache.L2Size_32K;
  U; ?# m6 U1 ~+ o" n( U. @5 K. D! t# a( I
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-28 21:38 , Processed in 0.041850 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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